/*------------------------------------------------------------------------------------ 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;
谢谢参与~~~特别是“阶级敌人”们~~~ |