FreeRTOS中断与同步

FreeRTOS通过中断API和信号量实现中断服务与任务之间的同步。中断服务程序仅发送二值或计数信号量,任务随后进行处理。二值信号量用于一次性事件,计数信号量用于多次事件。中断API包括xSemaphoreCreateBinary(), xSemaphoreTake(), xSemaphoreGiveFromISR()等,用于创建、获取和释放信号量。" 26747269,3003869,Matlab PCA+SVM人脸识别GUI设计实践,"['人脸识别', '界面设计', 'MATLAB', '机器学习', 'GUI开发']

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

FreeRTOS为中断提供了丰富的API(),旨在保持中断服务例程尽量的短小。此时不再在中断服务程序中进行中断的处理,而是告知任务,此时需要某个任务进行中断服务例程的后续处理任务了。缩减中断服务程序出于如下的考虑:

  1. 一旦进入中断服务程序,即使最高优先级的任务都不能被执行
  2. 中断服务程序会打乱一个任务的开始、执行时间点
  3. 一旦进入中断,新的低优先级的中断将不能被响应,过长的中断服务例程会增加这个风险
  4. 如果中断处理都放到中断中进行,软件处理人员需要注意单片机的片上资源可能同时被任务/中断服务程序访问,比如变量、外设、内存缓冲区等
  5. 一些FreeRTOS允许中断嵌套,过长的中断服务程序增加了复杂度降低了程序执行可预测性

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

鉴于我们将中断发生的事件推迟到任务中进行处理,此时需要有一个机制来实现中断与任务的同步。

当事件发生,中断服务程序发送一个二值信号来解除阻塞中的处理任务。这个二值信号可以认为是由长度为1的队列实现。由于这个队列长度为1,因此它要么是空要么是满的状态。当一个中断事件发生,中断写入二值信号量,退出中断,处于阻塞的中断延迟处理任务将二值信号量取出,执行中断延迟服务程序,并在结束后进入下一次阻塞,等待这个二值信号量。

 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

使用xSemaphoreCreateBinary()创建一个二值信号量,与队列使用相似的接口,传入的参数不同。因为是一个二值信号量,只是做为表征,无需向接口传入参数。创建二值信号量后返回这个信号量的操作句柄。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ArvinXD

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值