UCOSIII学习记录(一)

书籍:正点原子STM32F1 UCOS开发手册 V2.0

一、软件定时器

①、是一个递减计数器,减到0时触发回调函数。分辨率由系统节拍频率决定。

②、OSTmrCreate中的重要参数,dly:初始化定时器延时值。period:重复周期(计数值,自动重置)。opt:单次/周期定时器。

③、单次定时器只运行一次,周期定时器可以一直重复运行,直到调用OSTmrStop。

④、单次定时器从dly开始递减;周期定时器第一次从dly递减(dly不为0),后面从period递减。

二、信号量和互斥信号量

①、信号量像是一种上锁机制,代码获得对应的钥匙才能执行。控制任务存取共享资源、同步。

②、二进制信号量一次只能一个任务使用共享资源;计数型信号量可以同时有多个任务访问共享           资源。

③、信号量现在更多的用于任务与任务之间、任务与中断之间的同步,它可以避免轮询扫描标志            位,减少CPU的消耗。(例:按下按键发送一个信号量,任务获取到该信号量屏幕背景颜色变         化 一次)

④、互斥信号量:解决优先级反转问题。说明:任务优先级H、M、L的三个任务,L获得信号量开         始访问共享资源;此时H因获取不到信号量,进入挂起状态,等待L释放信号量;M剥夺CPU          使用权开始执行;最后L继续执行,释放信号量后,H执行。照成M先于H执行的现象。

⑤、互斥信号量会将L的优先级升至同H一样,防止被M中断,L执行完成并释放掉互斥信号量后,         会将L的优先级恢复到原来状态。

⑥、任务内嵌信号量:不需要创建信号量,简化代码。OSTaskSemPost函数的参数指向要用信号         通知的任务的TCB。

三、消息队列

①、用于任务间的通信。发布数据是指针传递。消息队列的读取采用先进先出(FIFO),或者后进           先出(LIFO--紧急消息采用此方式非常有用)。

②、消息发布到队列中,最高优先级的任务获得该消息,也可以向消息队列中广播一则消息。

③、任务内建消息队列:不需要使用外部的消息队列就可以直接向任务发布消息,简化代码。

四、事件标志组

①、解决一个任务和多个事件之间的同步。

②、同步关系可以是“或”和“与”;创建事件标志组时需赋一个初值;OSFlagPost向事件标志组发布         标志,决定了对哪些位进行清零和置位(flags  opt);OSFlagPend等待事件标志组,决定等待         哪些位是置为还是清零(flags  opt)。

③、等待的是单个对象的有:信号量、互斥信号量、消息队列、事件标志组等。

五、同时等待多个内核对象

①、和事件标志组的区别:同时等待多个内核对象。但UCOSIII只支持同时等待多个信号量和消息          队列。

②、同时等待任意数量的信号量或者消息队列,它们之间是 “或” 的关系。

③、先初始化OS_PEND_DATA表中的每个元素的PendObjPtr,使各个指针指向被等待的对象;           OSPendMulti函数返回有几个内核对象准备好了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值