我是嵌入式编程的新手,如有任何混淆,我预先致歉。
我需要处理来自连接到gpio的不同设备的多个事件。这些事件需要不断进行监视。这意味着在生成并处理了一个事件之后,代码需要继续监视设备是否存在其他事件。
我了解Linux中的中断和轮询的概念(内核获取中断并将其分配给处理程序,该处理程序将继续到达epoll的被调用方,而该epoll处于while(1)式无限循环内)。
这对于一次性的单事件玩具模型来说很好。在资源有限的嵌入式系统中,例如AT91SAM9x5,其运行速度为400MHz,RAM为128mb,该怎么办?我相信,类似while(1)的模式不是最佳选择。我听说过有关线程池解决方案的好消息,但在每个线程的核心,我们都找不到while(1)吗?
我有什么解决这个问题的选择?
提前谢谢!
答案 0 :(得分:1)
对于嵌入式系统,AT91SAM实际上是“资源丰富的”而不是资源有限的。这个想法和使用Linux编写代码的想法是一样的:您设置了pin中断,并在中断处理程序中进行了一些最少的处理,也许还设置了一些全局数据,以便主循环“ while(1)”可以检测情况,然后在不中断的情况下处理信息。基本上,您希望中断处理程序尽快完成,以便它可以处理下一个中断。
在大多数系统中,可以挂起或嵌套中断。对于允许嵌套中断的系统,您必须确保它不会破坏仍在执行的上一个中断的上下文。
中断处理程序和主代码之间的实际通信方案取决于您的要求。您甚至可以在支持此类要求的情况下使用RTOS。
答案 1 :(得分:0)
这在很大程度上取决于您的应用程序和约束,但这是一些监视gpio引脚事件的常用方法