OpenHarmony开发者论坛

标题: 关于中断处理函数的最大等待时间问题 [打印本页]

作者: delight-light    时间: 2024-4-11 22:41
标题: 关于中断处理函数的最大等待时间问题
[md]问题源于调用 GPIO-05 接口时,将中断处理函数设计成三个 for 循环后,发现若设置 OsDelay 总时间过长,会导致程序未按照预期执行,代码如下:

![IMG_20240407_175020.jpg](https://forums-obs.openharmony.c ... xugcco6tucqlgw4.jpg "IMG_20240407_175020.jpg")

运行时,发现在按下 Reset 键后并未出现LED灯按照规律亮起的场景。按下前LED仅仅是在按下时有微弱的蓝光闪烁(预先设置是,GPIO-05处于上拉模式)

按照设想,至少在

```
IoTGpioSetOutputVal(LED_GPIO,IOT_GPIO_VALUE0)
osDelay(100)
```

有一秒的亮起,但事实并未看到LED灯明亮地发光。

推测中断处理函数并未在按下Reset时运行。

因此,这种现象是否是因为中断处理函数有受限制的最大运行时间?
[/md]
作者: s_hao    时间: 2024-4-26 16:37
这个问题可能是因为你的中断处理函数中包含了三个 for 循环,而这些循环执行时间较长,导致了中断响应时间过长,从而影响了程序的正常执行。在中断处理函数中应该尽量避免使用循环或者其他执行时间较长的操作,以便尽快完成中断处理并返回到主程序。

另外,如果你需要在中断处理函数中执行一些较长时间的操作,可以考虑将这些操作放在一个任务中,并使用消息队列或者信号量等机制与中断处理函数进行通信,以避免中断响应时间过长。

此外,如果你使用了 OsDelay 函数来延时等待操作完成,也需要注意设置合适的延时时间,以免影响程序的正常执行。建议使用定时器等机制来代替 OsDelay 函数,以便更精确地控制延时时间。
作者: delight-light    时间: 2024-4-28 22:45
回复 s_hao: 您好,执行的时间限制有具体的数值吗?从源码中可以得知吗?




欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/) Powered by Discuz! X3.5