EDN China > 其它文章 > 嵌入式系统 > 正文
?

(多图) HotTask51任务循环的构成及任务锁机制

作者:HotTask51: EDN China?? 2009年02月16日 ?? 收藏0

  EDN博客精华文章??作者:HotTask51

  HotTask51和一般的OS一样,他们同裸奔最大的不同就在于任务函数有个死循环把任务套在循环中。

  而裸奔由于无内核控制强行豪夺正在运行的程序及函数,故运行期间不能在某处死循环。

  在协作式或裸奔任务(如菜农经典的“零耗时键盘”)中,他们的任务都会在约定的时间内,脱离死循环体,给其他任务以更多更平均的机会。

  由于任务运行的长短时间的不同,有些任务可能更长时间独占系统的全部资源。

  而剥夺式OS在这方面就要比他们优先的多,虽然必须拥有一个带硬件中断的定时器

  所以大多的OS任务体内是有循环语句while(1)或for(;;)来完成对任务的“绑架”及停留。

  在定时器节拍中断的作用下,OS剥夺低级任务并进行断点资源的保护及任务相互间的切换。

  HotTask51采用任务循环互锁机制,系统和用户各自有一把,若双方都代开任务循环锁,则任务死循环。

  当任意方解锁时,任务脱离任务循环体,交出控制权给OS。

  任务主动交权,只需解锁用户任务锁。

  系统夺权要复杂些,若是节拍中断,肯定要剥夺任务运行的权利。但在非节拍中断的期间,因为任务内的函数可能没有运行到检测锁处,

  任务不会自己放弃权利给OS。当然这是OS也未获得控制权。但系统的任务锁若在切换前解锁后交权给任务,则该任务就被赋予了协作式的任务,即任务是开环的。

  HotTask51片段:

程序

点击看原图

程序

点击看原图

  可以看到:

  一般任务的写法:

程序

  而HotTask51是这样书写的:(现在还未完成“HotTask51的命名规范”)

程序

程序


?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

HotTask51任务? 程序? 定时器?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈