OSEK turbo机制学习—Apple的学习笔记

之前看了FreeRTOS和RT-thread的任务调度(其它资源处理,堆栈处理和信号处理我先忽略),由于这2款操作系统比较相似,所以我要选一个不太一样的。由于我知道FreeRTOS和RT-thread都不支持协作式操作系统,都是属于抢占式操作系统,所以选择看OSKE,OSEKturbo是兼容OSEK2.2标准。是NXP的一个免费OSEK os,可惜我最后下载安装需要lic,所以看不到源码。
但是关于他的介绍资料是有的,通过这些资料我可以对比调度实现机制。

osek os的特点

  1. 仅支持静态优先级。除了在使用资源时,根据天花板协议,任务优先级可动态变为资源优先级。
    FreeRTOS支持动态优先级。它可以通函数切换优先级。
  2. 可以为不同的task配置不同的类型,包括BCC1,BCC2,ECC1,ECC2。
    FreeRTOS和RT-thread对于所有task仅支持选择一种配置。一般选择ECC2。
  3. 关于激活任务,激活后高优先级的先执行,若非就绪队列中最高优先级则排队。先激活先执行FIFO机制,其中需要记录任务的激活次数。
    FreeRTOS和RT-thread策略一样。但是OSEK应该不止按优先级调度,它支持配置协作式的OS,即当前任务优先级不是最高,不会立即切换,会等当前任务执行完成后再切换。另外,记录激活次数是否也要有用,比如激活次数超过最大值,则hook函数报警,或者提高优先级?
    OSEK的code还没有看,细节不清楚。
  4. OSEK关于非抢占任务的调度策略
    什么情况下需要设计任务为非抢占,参考如下:
    非抢占式策略,就是就有通过精确定义的系统服务的选择才会导致任务切换。
    非抢占式调度对任务可能的时序请求有着特别要求。特别地,正在运行的低优先级任务的不
    非抢占(比如,任务有一些不可分割的代码段,或者有些不可分割的操作)会延迟一个高优先级任务的调度,只能等到下一个调度时刻。
    对于长时间的任务而言,纯抢占式操作系统较为合适;对时间较短的任务而言,采用非抢占式调度则更有效率。
    image.png
  5. OSEK ISR堆栈的机制没有看明白
  6. 资源管理暂时没有关注过代码
    主要是中断和任务中的共享资源的保护,当一个任务占用多个资源时,应按后进先出(LIFO)的原则释放资源。OSEK中包括使用了天花板翻转协议,及添加了RES_SCHEDULER资源调度器。
    优先级天花板策略(Priority ceilings): 优先级天花板是指将申请(占有)某资源的任务的优先级提升到可能访问该资源的所有任务中最高优先级任务的优先级。(这个优先级称为该资源的优先级天花板) 体现为当低优先级任务申请占有某资源时就将这个低优先级任务的优先级升为能访问该资源的所有任务中最高优先级任务的优先级


    image.png
  7. OSEK的alarm机制
    周期函数基本都是通过设置alarm触发的。而FreeRTOS的周期函数可以使用delay。虽然FreeRTOS支持中断,但是没有细看过。而OSKE的Alarm也可以理解为中断。只是规定了此类中断中它要做事情,包括了激活任务或者设置事件或者调用回调函数。


    image.png
  8. OSEK的事件机制
    我理解和FreeRTOS的Event类似。一个任务可以等待多个事件的逻辑关系,事件未触发则挂起,事件满足后则恢复任务运行。
  9. OSEK任务的跟踪和调试
    FreeRTOS我没有主要是否有此类hook函数。当然有需要的话,自己也可以添加。


    image.png

osek功能概览

image.png
image.png

你可能感兴趣的:(OSEK turbo机制学习—Apple的学习笔记)