关于挂起任务以及时间片
参考编程指南!确认一个问题:
就绪状态中的任务:如果要挂起的话,使用RT_THREAD_SUSPEND() 就可以了。
如果运行中的任务呢? 按照注释,是不是也是使用
RT_TRHEAD_SUSPEND();
+ RT_SCHEDULE()?
是不是就是实现了有些RTOS里的运行中的任务无限期的SLEEP,直到其他任务用AWAKE唤醒?
因为尝试移植一个现有的程序到RT-THREAD上,原来的RTOS具有SLEEP_TASK() 和AWAKE_TASK()两个函数。一个任务每次都在
运行结束的时候自己吧自己挂起来,等待中断事件吧自己给唤醒。
另外:关于时间片:
RT-THREAD 只能在创建任务,初始化的时候分配时间片,是否可以更改时间片呢?
如果按照指南似乎不支持修改,那么再确认一下,是否可以关闭时间片的功能呢?
如果可以关闭时间片的功能,我是否可以把几个任务的优先级别设置成一样,然后采用定时器中断调用RT_THREAD_YIELD()的办法使当前运行中的任务让出处理机,使得相同优先级的任务得以运行,自己挂在队列的最后呢?
如果可以,我更改定时器的定时值是否就可以实现更改时间片的值呢?
可能叙述有点麻烦了! 1. 关于挂起,书上提到一点:
不要做自己挂起自己的操作;
而至于resume,则直接恢复即可(不可能自己恢复自己吧)
2. 可以更改时间片;不支持关闭时间片功能 回复【1楼】ffxz
-----------------------------------------------------------------------
1)您的意思是不要自己挂起自己? 我以为6.7.9线程挂起 中的注,是上面我的理解呢!
自己不会回复自己的,在中断事件中恢复。
--- 谢谢!
看来要采用个EVENT来做这个移植了。任务结束回到头的时候,再次进入等待事件。然后中断里把这个事件置为。
2) 哦!可以运行中更改时间片就好。
--- 谢谢!
因为原来的程序是符合ITRON的规格的,似乎很难完全移植用RT-THREAD. 1. 其实你最开始说对了的,如果是自己挂起自己,需要这样:
{
rt_thread_suspend(rt_thread_self());
rt_schedule();
}
移植自ITRON,没什么不可能的,RT-Thread可是支持完整的POSIX Thread,ITRON当然是可能的,只是需要自己下些功夫。
页:
[1]