int main{
msgId = msgQCreate(Maxnum,Maxlen,FIFO);
创建任务 task1;
创建任务 task2;
创建任务 task3;
创建辅助时钟;
}
void task1
{
如有事件消息,为连续事件触发;
msgQsend(msgId,send_data,..NO_WAIT);
}
void task2
{
while(1)
{
msgQReceive(msgId,RCV_data,...,WAIT_FOREVER);
task2Process();
}
}
void task3
{
while(1)
{
semTake(sem_50Hz,WAIT_FOREVER);/*每 20ms获取信号量*/
task3_Process();
}
}
我的问题是:(task2Process()和task3_Process()的时间可忽略不计)
1、我想在task1事件来之后,处理task2Process()然后在处理执行task3_Process,请问task2和task3的优先级该怎么设置?我现在设置task2比task3高,发现task3老是被抢占,其他也一样。
2、msgQReceive阻塞的优先级取决于任务的优先级吗?它阻塞时会把时间片让出来给其他任务执行吗?
3、msgQReceive的任务优先级高会不会一直阻塞不让task3执行
1 个解决方案
#1
1,看你的task2任务重要还是task3每20MS的处理重要吧?如果两个都重要,就要优化性能了,(增加主频,打开cache之类的),或者减少task2process task3process的处理时间。
2,它阻塞时会把时间片让出来给其他任务执行
3, msgQReceive的任务优先级高一直阻塞时,task3可以执行
2,它阻塞时会把时间片让出来给其他任务执行
3, msgQReceive的任务优先级高一直阻塞时,task3可以执行
#1
1,看你的task2任务重要还是task3每20MS的处理重要吧?如果两个都重要,就要优化性能了,(增加主频,打开cache之类的),或者减少task2process task3process的处理时间。
2,它阻塞时会把时间片让出来给其他任务执行
3, msgQReceive的任务优先级高一直阻塞时,task3可以执行
2,它阻塞时会把时间片让出来给其他任务执行
3, msgQReceive的任务优先级高一直阻塞时,task3可以执行