UCOSII源码分析一——相关知识点

知识点

休眠:任务驻留在内存中,但并不被多任务内核所调用
就绪:任务已经准备好,可以运行,但由于该任务的优先级比正在运行的任务的优先级低,不能运行
运行:正在运行
挂起:等待某一件事情发生
被中断:
前后台系统:应用程序是一个while(1)的大循环跑,是后台,前台就是中断程序。
非占先式:当前任务不结束,那么高优先级任务就绪了也无法插入,中断可以插入任务。响应中断快,允许使用不可重入函数,不需要信号量来保护共享数据。

占先式:最高优先级任务一旦就绪,就能得到CPU的控制权,中断回调函数可以是高优先级任务就绪,这样中断一退出,就立刻跳转到就绪的高优先级任务。
不可重入函数
优先级反转:低优先级任务使用共享资源时,高优先级就绪后会剥夺低优先级的CPU使用权,但是高优先级运行也需要低优先级的同一个共享资源时,低优先级任务被抢断还没来得及释放,这时,高优先级任务也无法执行下去,就只能挂起,低优先级拿到CPU使用权,执行任务后在释放共享资源,高优先级才能在来运作,这样实际上低优先级任务优先高优先级任务执行了。纠正的方式,当拿到共享资源的低优先级任务可以立刻提升自己的优先级,让自己执行,任务完成后在恢复自己的原本优先级
优先级继承:内核能自动变化任务的优先级

互斥条件:

  1. 开关中断,关闭中断,处理共享数据,开启中断。关中断时间不能太长,否则会影响整个系统的中断响应时间
  2. TAS(Test and Set),给共享数据加一个标识位,当资源能使用时直接使用,资源不能使用,等会在试
  3. 禁止任务切换,处理共享数据时候,先禁止任务切换,然后处理数据,处理完成了在开启任务切换
  4. 信号量。控制共享资源的使用权,标志某个事件的发生,使两个任务的行为同步。最多的是控制共享资源的使用权,一个共享资源有一个信号量,当要使用这个资源的时候,先要等待信号量,就一个类似标识位的意思
    死锁:deadlock,两个任务无限期的等待对方控制的资源,距离,T1任务独享R1,T2独享R2,T1想独享R2,T2也想独享R1,2个任务都无法进行,就死锁了。解决方式
  5. 先得到全部需要的资源在进行下一步的操作
  6. 用同样的顺序去申请多个资源
  7. 释放资源时使用相反的顺序

任务调度所花的时间是一个常量。

空闲任务:内核自动创建的的OSTaskIdle(),最低优先级,唯一作用就是给OSIdleCtr计数器自加1。这个计数器可以用来统计CPU效率。
统计任务:统计CPU利用效率,优先级倒数第二,需要使用统计任务时,需要先单独创建一个任务,来跑OSStartInit(),用来标定CPU在1秒内最多跑多少次OSTaskIdle任务,计为OSIdleCtrMax,这样后续统计时候,用1秒内OSIdleCtr/OSIdleCtrMax就是CPU利用效率

内存管理:
C中的malloc和free可能会产生内存碎块且执行时间也不是固定的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值