嵌入式系统ISR与关联任务的通信手段
ISR用来响应异步事件,然后触发与后续关联任务的一系列动作。ISR与关联任务的通信手段无非是两种:信号量和消息。但在不同的情况下通信手段不尽相同,也有很多的说道。 当使用信号量时,当有异步事件发生时ISR通过信号量与关联任务进行通信,告诉关联任务:可以采集数据啦~然后ISR就什么都不用管了,只需负责下次再通知关联任务异步事件的发生即可,而关联任务既要对数据进行采集又要对数据进行处理! 当使用消息时,ISR不仅要检测异步事件的发生还有对数据进行采集,然后再把数据通过消息发送给关联任务,有关联任务进行后续的数据处理。 但是到底使用哪种方式,一般遵守以下原则: 1、触发ISR的事件不包括数据:不需对数据进行采集。举例:如报警信号触发了外部中断,该ISR只需触发关联任务即可,后续操作由各项关联任务完成。 在这种情况下,ISR使用信号量与关联任务进行通信。 2、触发ISR的事件是包含数据的低频事件,将数据采集的工作放在关联的任务中完成,产生的时刻延误与采样周期相比可以忽略不计,对采样数据的质量没什么影响,在这种情况下,ISR使用信号量与关联任务进行通信,从而简化ISR。 3、触发ISR事件的是包含数据的中高频事件,采集工作放在关联任务中完成时产生的时刻延误与采样周期相比不能忽略不计,对采样数据质量有可察觉的影响,在这种情况下,数据采集工作在ISR中完成,ISR使用消息邮箱与关联任务进行通信。关联任务从消息邮箱中得到消息的数据,并进行后续处理工作 4、触发ISR的事件是包含数据的非周期高频事件,对于非周期的高频事件,其最短事件间隔可能小于数据处理的耗时,在这种情况下如果使用消息邮箱进行通信,就可能出现数据丢失的情况。这种情况下,数据采集工作应该放在ISR中完成,由ISR使用具有数据缓冲功能的消息队列与关联任务进行通信。关联任务从消息队列中得到消息的数据,并完成后续处理工作! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |