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
}
}
}
|