嵌入式系统ISR与关联任务的通信手段

本文探讨了中断服务例程(ISR)与关联任务之间的两种主要通信方式:信号量与消息。根据不同情况,介绍了何时采用何种通信机制更为合适,以及这些选择如何影响数据采集与处理的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ISR用来响应异步事件,然后触发与后续关联任务的一系列动作。ISR与关联任务的通信手段无非是两种:信号量和消息。但在不同的情况下通信手段不尽相同,也有很多的说道。

当使用信号量时,当有异步事件发生时ISR通过信号量与关联任务进行通信,告诉关联任务:可以采集数据啦~然后ISR就什么都不用管了,只需负责下次再通知关联任务异步事件的发生即可,而关联任务既要对数据进行采集又要对数据进行处理!

当使用消息时,ISR不仅要检测异步事件的发生还有对数据进行采集,然后再把数据通过消息发送给关联任务,有关联任务进行后续的数据处理。


但是到底使用哪种方式,一般遵守以下原则:

1、触发ISR的事件不包括数据:不需对数据进行采集。举例:如报警信号触发了外部中断,该ISR只需触发关联任务即可,后续操作由各项关联任务完成。

在这种情况下,ISR使用信号量与关联任务进行通信。

2、触发ISR的事件是包含数据的低频事件,将数据采集的工作放在关联的任务中完成,产生的时刻延误与采样周期相比可以忽略不计,对采样数据的质量没什么影响,在这种情况下,ISR使用信号量与关联任务进行通信,从而简化ISR。

3、触发ISR事件的是包含数据的中高频事件,采集工作放在关联任务中完成时产生的时刻延误与采样周期相比不能忽略不计,对采样数据质量有可察觉的影响,在这种情况下,数据采集工作在ISR中完成,ISR使用消息邮箱与关联任务进行通信。关联任务从消息邮箱中得到消息的数据,并进行后续处理工作

4、触发ISR的事件是包含数据的非周期高频事件,对于非周期的高频事件,其最短事件间隔可能小于数据处理的耗时,在这种情况下如果使用消息邮箱进行通信,就可能出现数据丢失的情况。这种情况下,数据采集工作应该放在ISR中完成,由ISR使用具有数据缓冲功能的消息队列与关联任务进行通信。关联任务从消息队列中得到消息的数据,并完成后续处理工作!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值