sem.cpp- #include "Look_sem.h"
- #include "utils/debug.h"
- #include "numicro/sfr/gpio"
- sem_t Sem = 1;//Sem > 0 Sem.wait()任务可以直接获取信号量
- instance_task1_Look_sem_t task1_Look_sem(1); // 任务实例
- // 任务类 task1_Look_sem_t 的例程
- void task1_Look_sem_t::routine()
- {
- // TODO: 在此编写 task1_Look_sem_t 例程的内容
- using namespace sfr::gpio;
- while (true) {
- // TODO: 在此编写 task1_Look_sem_t 例程的内容
- if (Sem.wait())//等待获取信号量,Sem > 0直接获取,Sem = 0阻塞等待
- {//任务1独占信号量2S,此时Sem-- = Sem = 0,阻止任务2获取信号量
- GPIOA.DOUT().DOUT2(0).DOUT3(0);//LED1,LED2亮
- delay(LOOK_TICKS_PER_SEC);//延时亮1S
- GPIOA.DOUT().DOUT2(1).DOUT3(1);//LED1,LED2灭
- delay(LOOK_TICKS_PER_SEC);//延时亮1S
- Sem.post();//独占2S后释放信号量,任务2可以获取信号量,Sem++ = Sem = 1
- }
- }
- }
- instance_task2_Look_sem_t task2_Look_sem(2); // 任务实例
- // 任务类 task2_Look_sem_t 的例程
- void task2_Look_sem_t::routine()
- {
- // TODO: 在此编写 task2_Look_sem_t 例程的内容
- using namespace sfr::gpio;
- while (true) {
- // TODO: 在此编写 task2_Look_sem_t 例程的内容
- if (Sem.wait())//等待获取信号量,Sem > 0直接获取,Sem = 0阻塞等待
- {//任务1独占信号量2S,此时Sem-- = Sem = 0,阻止任务2获取信号量
- GPIOA.DOUT().DOUT4(0).DOUT5(0);//LED3,LED4亮
- delay(LOOK_TICKS_PER_SEC);//延时亮1S
- GPIOA.DOUT().DOUT4(1).DOUT5(1);//LED3,LED4灭
- delay(LOOK_TICKS_PER_SEC);//延时亮1S
- Sem.post();//独占2S后释放信号量,任务1可以获取信号量,Sem++ = Sem = 1
- }
- }
- }
|