OS_EVENT * sem; //信号量指针
OS_EVENT * msg; //邮箱事件块指针
//开始任务
void start_task(void *pdata)
{
OS_CPU_SR cpu_sr=0;
pdata=pdata;
........
sem_beep=OSSemCreate(0); //创建信号量
msg = OSMboxCreate((void *)0); /* 建立消息邮箱 */
OSStatInit(); //开启统计任务
OS_ENTER_CRITICAL(); //进入临界区(关闭中断)
.....
OSTaskSuspend(START_TASK_PRIO);//挂起开始任务
OS_EXIT_CRITICAL(); //退出临界区(开中断)
}
void Mbox_post_task(void *pdata)
{
.......
OSMboxPost(msg_key,(void*)1);//发送消息到邮箱
.......
}
void Mbox_pend_task(void *pdata)
{
.......
u32 key;
key=(u32)OSMboxPend(msg_key,10,&err); //获取邮箱消息,即key=1;
.......
}
void sem_post_task(void *pdata)
{
.......
OSSemPost(sem); //发送信号量
.......
}
void sem_pend_task(void *pdata)
{
.......
........
}
OSSemPend(sem,0,&err);//收到信号量
该函数未收到信号量之前,所处任务处于挂起状态,收到信号量之后所处任务就绪。