gpt4 book ai didi

c++ - 处理GPIO中的多个事件

转载 作者:太空宇宙 更新时间:2023-11-04 05:41:19 24 4
gpt4 key购买 nike

我是嵌入式编程新手,对于任何混淆,我提前表示歉意。

我需要处理来自连接到 GPIO 的不同设备的多个事件。这些事件需要持续监控。这意味着在生成并处理一个事件后,代码需要继续监视设备是否有其他事件。

我理解Linux中中断和轮询的概念(内核收到一个中断并将其分派(dispatch)给处理程序,该处理程序继续到epoll的被调用者,该epoll位于类似while(1)的无限循环内)。

这对于一次性、单事件玩具模型来说很好。在资源有限的嵌入式系统中,例如AT91SAM9x5运行速度为 400mhz,内存为 128mb,我能做什么?我相信类似 while(1) 的模式不是最好的选择。我听说过有关线程池解决方案的好消息,但在每个线程的核心,我们没有找到 while(1) 吗?

我有什么选择来解决这个问题?

提前谢谢您!

最佳答案

对于嵌入式系统来说,AT91SAM实际上是相当“资源丰富”的,而不是资源有限的。这个想法与使用 Linux 编写它是一样的:设置一个引脚中断,并在中断处理程序中进行一些最小的处理,并可能设置一些全局数据,以便主循环“while (1)”可以检测情况,然后在非中断上下文中处理信息。基本上,您希望中​​断处理程序尽快完成,以便它可以处理下一个中断。

在大多数系统中,中断可以挂起或嵌套。对于允许嵌套中断的系统,您必须确保它不会破坏仍在执行的前一个中断的上下文。

中断处理程序和主代码之间的实际通信方案取决于您的需求。您甚至可以使用支持此类要求的 RTOS。

关于c++ - 处理GPIO中的多个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56277058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com