UCOSII 使用笔记

UCOS使用总结

1.UCOS 是抢占式系统,换句话来说,优先级高的能够被准时执行,优先级低的很容易被高优先级抢占,导致执行任务延迟。

2.UCOS一般为64个优先级,有些可以到256,其实一般开发就几个任务,任务多了更不好把控。很多时候都尽量少的开辟新的任务,因为这样可以避免开辟更多的栈,

3.目前而言使用的QP,只用到了消息队列,其它信号量和事件都没有使用,无论是消息队列和信号量和事件都是任务之间通讯使用的,也就是书上说的同步,同步说法个人认为搞的太过抽象。不方面初学者理解。

4.任务调度,在循环中为OSSched,在中断中是退出中断后调用红OSIntExit,在这个函数中判断中断嵌套是不是执行完,执行完就执行一次调度,OSTimeTick 是针对OSTimeDly,在这个函数中对应任务的一个计数器减。

5.UCOS 默认开启空闲任务,这个任务一般不适用,我一般用来喂看门狗。

UCOS CPU利用率显示

UCOS中开辟一个状态任务,其实就是定时去 看空闲计数器执行了多少次。

一个大任务启动,然后调用OSStatInit,这个函数其实就是执行一个任务延时,然后读取这个时间段 空闲任务计数器的个数。

以此来作为后续 计算CPU利用率的分母,后面执行程序,就按照这个定时读取空闲计数器个数,因为一旦有任务执行,空闲任务势必会被抢占,也就是得不到执行。

cortex m0 使用理解

一般m0 有R0 到 R15

R0-R7为低位寄存器,R8-R12为高位寄存器。

R13为堆栈寄存器。

R14为LR寄存器

R15为PC寄存器

XPSR  中很重要的低位数据,表示中断执行的函数号。这个东西意思,单片机执行中断,在那个中断服务函数中,尤其是中断嵌套中,就可以清晰的看到在那个中断执行中。这个寄存器高为是状态寄存器,表示当前执行计算的一些状态,类似51中的PSW,

PRIMASK,这个寄存器的最低位就是全局中断的开关,在OS中一般是保持这个寄存器,然后最后恢复这个寄存器。

无论在函数前面是否开启全局中断,都是在恢复PRIMASK的值,这样就不用粗暴的开关中断,因为你不知道函数是不是在前面就关闭了全局中断,然后您执行一次临界台操作又把全局中断开启了。

arm V6 m只有四个优先级,默认栈使用的MSP,无论是主程序还是中断都使用的MSP,在主循环显示的thread模式,中断中是handle模式,我犯了过一次错误就是在中断中执行了低功耗操作,但是我不知道,为什么呢,因为我用的老的ucos 任务切换的过程没有调用pendsv操作,都是手动直接切换,这个导致很多时候函数都是在handle模式中。

在中断中执行低功耗操作,要想唤醒,要让配置的唤醒中断源大于当前中断。否则唤不醒

中断执行硬件自动压栈顺序

消息队列

创建消息队列,在UCOS中使用事件管理,Event.

OSQPend

OSQPost()

Post过后 置位事件所属任务的优先级。然后设置调度,因为这个函数是在中断中执行,软中断需要等待中断完执行才能被执行。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值