【原理】RT-Thread内部IPC之信号量

关于操作系统,FreeRTOS也好,UCOS也好,再或者是RT-Thread,都有任务间的通讯机制(简称IPC),分别有:信号量,互斥量,事件邮箱,消息队列。从裸机转向操作系统,我们便需要学习他们,下面,简单总结一下信号量的原理与使用的好处。

 

裸机下开发:任务间的通讯通常我们都是使用一个变量,任务是否执行前,我们都会先去判断这个变量是否为true。这样便会造成:1,实时性不高,若我们的任务比较繁多,当任务1的变量在任务2执行过程中更改为true,MCU需要跑完一圈任务,才能执行任务1,这样变回使任务实时性不高。2,变量没有为true时,任务仍需要轮询。

 

信号量原理主要有获取信号量与释放信号量:

获取信号量:当任务执行时,需要获取信号量时,若此时信号量为0,则任务根据等待信号量的时间会直接返回、挂起一段挂起、或永久挂起。 任务挂起时,MCU不会进行轮询,从而减轻了MCU的负荷。

释放信号量:释放了信号量时,若信号量队列上没有挂起任务,则信号量数值会+1,若有任务挂起时,信号量数值不会+1,而是直接将挂起的一个任务A状态更改为就绪,并进行一次任务调度,若就绪任务队列内没有任务比进任务A优先级高,则任务A马上执行。

 

相比之下,使用信号量会提高任务间的通讯实时性,以及减轻MCU的负荷。

关于信号量的应用场景,RT-Thread编程手册写的很完美,看手册即可。

你可能感兴趣的:(RT-Thread)