S32K144在做CAN通信时,通过FlexCAN中断接收CAN数据,并希望让freeRTOS 的CAN处理任务拿到CAN数据并进行数据处理。因此就需要找到能够满足中断与freeRTOS任务进行同步的方式方法。
遇到这个问题,第一时间想到的就是查找freeRTOS手册《FreeRTOS_Reference_Manual_V10.0.0.pdf》
通过查看手册,找到了3种中断与freeRTOS任务同步的方法,分别是:
1)消息队列
2)信号量
3)事件组
消息队列的方式实现中断与任务同步,手册的描述:
通过英文描述,大致可以判断消息队列应用于多个任务与中断的同步。
信号量的方式实现中断与任务同步,手册的描述:
通过示例代码,任务中xSemaphoreTake()的方法是用一直等待,中断发生后释放锁,任务会进行处理。是用信号量的情况,需要注意的点:
1)与中断同步的任务要设置高优先级,这样正在执行的任务被中断打断后,不会恢复原来的任务,而是优先执行优先级高的任务。
2)中断与任务之间的信号量,最好是用二值信号量。因为互斥信号量本身就带有继承的优先级机制。
事件组的方式实现中断与任务同步,手册的描述:
文章来源:https://www.toymoban.com/news/detail-447736.html
通过事件组可以完成中断与任务的同步。文章来源地址https://www.toymoban.com/news/detail-447736.html
到了这里,关于中断与freeRTOS任务进行同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!