一 信号量介绍:
RTOS(实时操作系统)中的信号量(Semaphore)是一种用于解决同步问题的机制,它主要用于任务间和中断服务例程(ISR)间的通信,以实现对共享资源的有序访问。信号量通常用于控制对共享资源的访问和任务同步,确保只有一个任务或中断服务例程可以访问共享资源,从而避免资源冲突。
信号量主要分为两种类型:计数信号量和二值信号量。
- 计数信号量(Counting Semaphore):
- 计数信号量可以持有多个“计数”或“票”。当有一些共享资源,每个资源都需要独立的访问控制时,可以使用计数信号量。
- 当一个任务需要访问一个资源时,它会尝试“获取”一个信号量。如果信号量的计数大于0,信号量计数减1,任务继续执行。如果计数为0,任务就会阻塞,直到信号量计数大于0。
- 当任务不再需要访问资源时,它应该“释放”信号量,信号量计数加1。
实例:假设有10个共享资源,每个资源都需要独立的访问控制。可以初始化一个计数为10的计数信号量。当任务需要访问资源时,它会尝试获取信号量。如果信号量计数大于0,任务可以访问资源。当任务完成资源访问后,会释放信号量,使得其他任务可以访问。
- 二值信号量(Binary Semaphore):
- 二值信号量是一种特殊的计数信号量,其计数最大值限定为1。它主要用于实现互斥访问,即只有一个进程或线程可以访问共享资源。
- 当一个进程或线程占用资源时,二值信号量的值为1,其他进