关于ucos的邮箱、信号量使用步骤

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);   /* 只有信号量置起,该任务才能执行 */

........

}

OSSemPend(sem,0,&err);//收到信号量

该函数未收到信号量之前,所处任务处于挂起状态,收到信号量之后所处任务就绪。

OSSemAccept(sem )//收到信号量
该函数并不挂起任务,OSSemAccept ()函数查看设备是否就绪或事件是否发生。
for (;;) {
INT16U value;
value = OSSemAccept(sem); /* 查看设备是否就绪或事件是否发生 */
if (value > 0) {
......
                          /* 就绪,执行处理代码 */
......
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值