这个是全网最详细的STM32项目教学视频。
第一篇CSDN文章在这里在这里:
75
V3:HAL库开发、手把手教学下面功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、openmv视觉控制、电磁循迹、FreeRTOS、K210视觉智能车(更新中)、K230视觉智能车(更新中)、MSPM0G3507视觉智能车(更新中)
第23章-FreeRTOS项目实战–任务与任务、任务与中断之间的通信和同步
前面我们讲解了如何创建任务,多任务如何轮流执行,多任务和中断之间经常进行同步或者通信,我们还是像裸机 一样通过全局变量标志位和全局变量数组进行同步和通信是否存在一些隐患那?
23.1-消息队列
23.1.0-消息队列和全局变量对比
回答 为什么要在操作系统中使用消息队列而不是 全局变量
消息队列 vs 全局变量
- 全局数组需要解决多任务访问冲突,需要加临界区保护全局数组或者数据被多任务访问 可能会出现冲突的原因是: 访问全局变量的操作往往需要多部汇编指令: 读取数据,修改数据,写回数据。而任务调度器可以在任意时刻打断访问指令,切换另一个任务,这样的话,如果在读取数据和写回数据之间发生切换,数据可能就处于未更新的状态。比如导致任务使用上次变量状态,所以没有获得最新数据。所以为了防止出现再读取数据和写回数据之间发生切换,操作系统的消息队列在数据操作时候增加了关闭任务切换相关保护。
PPT 215到231讲解 数据全局变量的数据竞争,和消息队列是如何解决这个问题的。
- 消息队列可以实现超时机制消息队列的接收或者发送均可以设置超时时间,这样可以提高系统的响应性和保证系统灵活性和容错能力。
- 消息队列可以实现FIFO和LIFO机制可以设置先进先出或者后进先出的的数据机制,更加灵活便于数据处理。
阅读全文