ucosiii信号量新特性简述

ucosiii信号量可用于ISR与任务间、任务与任务间的同步,新增加可选模式,如非阻塞等待、释放但不进行任务调度、
新增任务内嵌的信号量(用户程序无需建立信号量便可与任务直接通信)

     常规信号量和任务内建信号量
     1)常规信号量
一般使用流程
声明
OS_SEMTEST_SEM;

OSSemCreate ((OS_SEM*)&TEST_SEM,
                 (CPU_CHAR* )"TEST_SEM",
                 (OS_SEM_CTR)0,
                 (OS_ERR* )&err);

//参数3
//1、OS_OPT_PEND_NON_BLOCKING用于非阻塞方式
 //2、OS_OPT_PEND_BLOCKING用于阻塞方式
OSSemPend(&TEST_SEM,100,OS_OPT_PEND_BLOCKING,0,&err);

//参数2 
//1、OS_OPT_POST_1      POST and ready only the highest priority task waiting on semaphore(if tasks are waiting)
//2、OS_OPT_POST_ALL      POST to ALL tasks that are waiting on the semaphore
//3、OS_OPT_POST_NO_SCHED              Do not call the scheduler   发送信号量但系统不需要马上进入调度
OSSemPost(&TEST_SEM,OS_OPT_POST_1,&err);

      2) 内嵌信号量
    无需自己去创建信号量,只使用于单个任务里面
      如串口接收到完整数据,通过内建信号量发送给任务
     ISR服务程序里:   
       //参数二
 //1、OS_OPT_POST_NONE
 //2、OS_OPT_POST_NO_SCHED
       OSTaskSemPost(&MyTaskTCB, OS_OPT_POST_NONE,&err);//参数一指明任务块即可
       任务里面:
       OSTaskSemPend(100,OS_OPT_PEND_BLOCKING,0,&err);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值