信号量(Semaphore)是在多线程环境下使用的一种设施,可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。
下面通过RT-Thread的信号量来完成一个简单的应用:LED2和LED3以1Hz的频率交替闪烁。
信号量是进程间通信的媒介,在此定义两个线程thread1和thread2。Thread1首先获取一个信号量,然后点亮LED2,延迟500ms过后熄灭LED2,随即释放一个信号量。Thread2以RT_WAITING_FOREVER的方式一直保持获取信号量,当Thread1释放信号量之后,Thread2获取到一个信号量开始运行,点亮LED3,延迟500ms过后熄灭,随即释放一个信号量。
下面按照步骤完整地实现该例程:
1. 首先当然是定义两个LED灯啦!在jiezhi320讲解的《15天入门RT-Thread》视频第2课中,LED的定义方式使用了RT-Thread自带的API,我也用此方式初始化两个LED。我使用的STM32开发板以STM32F103ZET6为主控芯片,该芯片为144脚。通过查看电路原理图,得到LED2对应PE5,即芯片的第4脚;LED3对应芯片的PB5,即芯片的第135脚。如下图所示:
2.在rtconfig.h文件中,以具体的名称代替引脚序号:
#define LED_2_PIN 4 //LED2 connect to PE5-the forth pin of stm32f103zet6
#define LED_3_PIN 135 //LED3 c