什么是信号量
信号量是操作系统中重要的一部分,信号量一般用来进行资源管理和任务同步,FreeRTOS中信号量又分为二值信号量,计数型信号量,互斥信号量和递归互斥信号量。不同信号量其应用场景不同,但有些应用场景是可以互换着使用的。
信号量的重要作用其中就有任务的同步,用于任务与任务之间的同步,用于中断与任务之间的同步。在执行中断服务函数的时候可以通过向任务发送信号量来通知它所期待的事情发生了,当退出中断服务函数以后在任务调度器的调度下同步的任务回去执行。
在编写中断服务函数的时候一定是要快进快出的,中断服务函数中一般都不能放入太多的代码,否则就会影响系统的实时性。在裸机编写代码的时候一般都只是在中断服务函数中打一个标记,然后在其他的地方根据标记的值来进行具体的处理过程。而这些在RTOS中就可以借助信号量来进行实现。
当中断发生的时候就释放信号量,但在中断服务函数中不做具体的处理。具体的处理过程做成一个任务,这个任务会获取信号量,如果获取到信号量就说明中断发生了,需要进行相应的处理,这样做的好处就是中断的时间会非常短。当然任务与任务之间也可以通过信号量来进行同步。