毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

vxworks中怎么唤醒一个任务

更新时间:2012-6-20:  来源:毕业论文

通常情况下,任务A执行完自身代码后挂起5ms(用nanosleep),想在中断中判断若收到某个信息就立刻将任务A变成就绪状态,应该怎么做?
用了taskActivate()函数,没效果,用示波器看到中断中用了taskActivate()函数,但任务A还是要等5ms

这个是同步问题:

偶一般这样处理

用 二进制 信号量

SEM_ID semSync;
semSync = semBCreate(SEM_Q_FIFO,SEM_EMPTY);
taskA(void)
{
semTake(semSync,WAIT_FOREVER); //等待信号量。
……..
}

ISR(void)
{
……….
semGive(semSync); //信号量释放,有效。
}

不是这样理解的,我希望实现的功能是:
正常情况下taskA每隔5ms执行一次,如果有突发事件则立即唤醒taskA。也就是说正常情况下taskA每执行一次自身代码便交出cpu,5ms后才变成就绪状态,如果中断发生,将taskA立刻变成就绪状态。
我现在是不知道在中断里边怎样将taskA变成就绪状态。
ps:如果网页能提供自由画图的功能就好了,画个cpu的执行图你一下子就能明白我说的了^_^
 
semTake(semSync,WAIT_FOREVER)
如果不指定WAIT_FOREVER,那就是等待时间啊,到时间就自动退出semtake了

(1)任务A创建一个消息队列,任务用msgQRecv循环接收消息,没有收到消息既是阻塞状态.
(2)用看门狗封装一个通用的定时器模块,每5s给你的任务A发一个定时器消息.这5s中任务A如果没有其他消息收到,则一直处于阻塞.
(3)如果有中断产生,也给任务A的消息队列发一个消息,任务A即进入到ready状态.

也就是说,依靠消息队列来控制任务状态的转换.还是比较方便的

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。