gpfrank 发表于 2011-9-4 23:13:05

关于挂起任务以及时间片

参考编程指南!
确认一个问题:
    就绪状态中的任务:如果要挂起的话,使用RT_THREAD_SUSPEND() 就可以了。

    如果运行中的任务呢? 按照注释,是不是也是使用
    RT_TRHEAD_SUSPEND();
   + RT_SCHEDULE()?
    是不是就是实现了有些RTOS里的运行中的任务无限期的SLEEP,直到其他任务用AWAKE唤醒?

    因为尝试移植一个现有的程序到RT-THREAD上,原来的RTOS具有SLEEP_TASK() 和AWAKE_TASK()两个函数。一个任务每次都在
运行结束的时候自己吧自己挂起来,等待中断事件吧自己给唤醒。


另外:关于时间片:

    RT-THREAD 只能在创建任务,初始化的时候分配时间片,是否可以更改时间片呢?

    如果按照指南似乎不支持修改,那么再确认一下,是否可以关闭时间片的功能呢?
    如果可以关闭时间片的功能,我是否可以把几个任务的优先级别设置成一样,然后采用定时器中断调用RT_THREAD_YIELD()的办法使当前运行中的任务让出处理机,使得相同优先级的任务得以运行,自己挂在队列的最后呢?
    如果可以,我更改定时器的定时值是否就可以实现更改时间片的值呢?

    可能叙述有点麻烦了!

ffxz 发表于 2011-9-5 09:18:12

1. 关于挂起,书上提到一点:
不要做自己挂起自己的操作;
而至于resume,则直接恢复即可(不可能自己恢复自己吧)

2. 可以更改时间片;不支持关闭时间片功能

gpfrank 发表于 2011-9-5 09:40:52

回复【1楼】ffxz
-----------------------------------------------------------------------
1)您的意思是不要自己挂起自己? 我以为6.7.9线程挂起 中的注,是上面我的理解呢!
    自己不会回复自己的,在中断事件中恢复。
   
    --- 谢谢!

    看来要采用个EVENT来做这个移植了。任务结束回到头的时候,再次进入等待事件。然后中断里把这个事件置为。

2) 哦!可以运行中更改时间片就好。
    --- 谢谢!

    因为原来的程序是符合ITRON的规格的,似乎很难完全移植用RT-THREAD.

ffxz 发表于 2011-9-5 09:44:30

1. 其实你最开始说对了的,如果是自己挂起自己,需要这样:
{
rt_thread_suspend(rt_thread_self());
rt_schedule();
}

移植自ITRON,没什么不可能的,RT-Thread可是支持完整的POSIX Thread,ITRON当然是可能的,只是需要自己下些功夫。
页: [1]
查看完整版本: 关于挂起任务以及时间片