原创 关于即将开源的HotTask51的任务优先级调度问题及讨论

2009-2-17 19:24 2531 6 6 分类: MCU/ 嵌入式
HotTask51 发表于 2009-2-17 19:15 裸奔式实时操作系统HotTask51 ←返回版面 按此察看该网友的资料 按此把文章加入收藏夹 按此编辑本帖

楼主: 关于即将开源的HotTask51的任务优先级调度问题及讨论


/*------------------------------------------------------------------------------------
        HotTaskPriorityTickCount位名定义及优先级处理过程简要说明
HotTask51采用和Linux类似的动态优先调度算法。(但HotTask51的级别0最小,7最大,共8个任务)

TickCount每次在节拍中断中所有任务被遍历减一,当跳变为 0时表示该任务时间片用完,进入
就绪状态。若遍历时遇到多个跳变为0的任务时,表示有相同的优先级在同一时间片内发生冲突
故需要对同级任务进行再判,但HotTask51采用从最低优先级任务开始遍历,遍历过程中如遇到
TickCount跳变为 0,则立即将任务号入保存该节拍中断的就绪寄存器中,注意被挂起的任务除外

最后跳变就是该同级任务的最高级别的任务。它就会第1个被切换。
注意遍历时,TickCount跳变为 0时ready都会被置1 并一直被保存到切换时ready被清零!!!

故HotTask51任务优先级可以相同,这个要优于ucOS-II任务不能同级别优先的缺点.
当然我们应该尽量来避免同级任务给系统的“实时”带来不必要的麻烦。
故HotTask51也建议任务不要同级。但HotTask51自身具备动态优先级调度的设计不应该产生非议。


HotTask51时从“裸奔”来考虑和设计及处理问题的,它不追求大而全,"强实时"等华丽的外表。
故HotTask51的6个用户设计的非常紧凑,故能充分地合理利用51十分紧张的系统资源。

HotTask51从工控的特点来构建OS,为区别它们儿拒绝更名带有“OS”的字样~~~
并腾出一个任务作为用户初始化任务和运行期间的看门狗监视任务。它与普通任务执行看门狗任务
有些本质的区别,及时用户设置某最高级任务单独执行看门狗监视系统环境。

但它肯定不如系统自绑定且可为硬件看门狗提供挂钩函数的狗任务~~~

况且该内核的编程是由“狗论”的“缔造者”菜农同志集20年之精华“友情赞助”~~~

HotTask51优先级和节拍计数器位定义
HotTask51在创建任务时:
Priority=1~6
TickCount=7-Priority或TickCount=~Priority=6~1
--------------------------------------------------------------------------------*/
typedef volatile struct
{
    HotTask_REG    TickCount:        3;//0 每次进入HotTaskTick时减一,初值为7-Priority
    HotTask_REG    ready:            1;//5 该任务就绪,只要TickCount-1=0即被置1,遍历=0
    HotTask_REG    Priority:        3;//4 在创建任务时的优先级1~6
    HotTask_REG    Suspend:        1;//7 该任务已被挂起(初始化为1,即无此任务)
                                  //  被挂起的任务不参与就绪和切换的处理
}HotTask_BITS_PriorityTickCount, *HotTask_BITS_pPriorityTickCount;

typedef volatile union
{
    HotTask_REG                        Regs;//以寄存器字节访问
    HotTask_BITS_PriorityTickCount     Bits;//以寄存器位访问
}HotTask_REG_PriorityTickCount, *HotTask_REG_pPriorityTickCount;


谢谢参与~~~特别是“阶级敌人”们~~~
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条