rtx51tiny笔记

1.task进入running状态后,task上的signal标志会自动clear。

2.task有五种状态:running,waiting,ready,deleted,time-out.程序一开始运行,task0处于running状态,其余task处于deleted状态。在task0里面create task以后,被创建的任务处于ready状态,没有被创建的任务仍然处于deleted状态。cpu无法真正的同时执行多个任务,可用的cpu时间被分为时间片,rxt51tiny为每个ready的任务分配时间片,分配到时间片的任务处于running状态,时间片一过恢复到ready状态,同时其余在ready状态的某一个任务转换到running状态,如此循环。由于时间片很短(几十毫秒),所以在ready状态的任务好像是在同时running。

从这个理论分析,虽然操作系统可以同时运行多个程序,但是同时运行的程序越多,运行每个程序的速度也就越慢。

3.如果一个任务正处于系统延时,这个任务处于time-out状态,系统延时一过,任务恢复成ready状态。

所以在操作系统中应该尽可能的使用系统延时而不是通过for循环执行语句来延时。一方面通过for循环延时,任务仍然处于ready或running状态,会占用cpu时间,导致其他任务执行速度减慢;另一方面根据第一个理论的分析,在多个任务“同时”运行时,使用for循环来延时也并不准确(已经过证实,非常不准确,且执行的任务越多实际延时时间越长)。

4.可以用os_wait或者是os_wait1或os_wait2来延时,但是在定时器资源丰富的情况下,还是再开一个定时器来及时比较准确,需要短时间不精确的延时可以直接调用系统函数。

5.time-out与waiting状态的区别:

time-out是处于ready状态的任务因某事件而暂时不能运行(或者说还在运行,但是不需要占用CPU资源,如系统延时)。而waiting是进程虽然被创建,但不进行任何操作,正在等待某一信号使其变为ready状态。

time-out状态中,CPU要记录进程当前执行的状态,如当前进程执行被中断的位置(即将要执行的指令地址)等保存起来以便于重新执行该进程时,能够按原状态恢复执行,而waiting状态没有。

个人认为time-out状态是一种特殊的ready状态。

os_wait的延时时间和有关K_TMO K_IVL的区别:http://www.51hei.com/mcu/4147.html

发布了8 篇原创文章 · 获赞 0 · 访问量 436

猜你喜欢

转载自blog.csdn.net/weixin_45467056/article/details/101601699
RTX
RTX