关于os任务切换的问题??
最近学习一直uc/os-II的学习,有两个星期了,目前能顺利移植到我的arm单片机上,但我在写单任务的时候当任务跑完跑到空闲状态,问题是我进入空闲状态如果我还要执行任务我改如何跑出来??
后来我又写了多任务的程序,但在跑起来后才发现,程序只跑优先级最高的程序,其他低优先级的根本不执行?这又是为何啊,请各位大侠给小弟点睛?????????
嗯嗯。。你是不是任务使用死循环来的呢?开启了多任务了没呢?你去看看那系统的技术手册了,它有两种模式了。 优先级高的任务米有释放CPU控制权吧 john_patson 发表于 2012-6-12 15:07 static/image/common/back.gif
嗯嗯。。你是不是任务使用死循环来的呢?开启了多任务了没呢?你去看看那系统的技术手册了,它有两种模式了 ...
恩,用的是死循环,但我仿真的时候能跳出死循环来啊? p4s5j6 发表于 2012-6-12 15:11 static/image/common/back.gif
优先级高的任务米有释放CPU控制权吧
哦,这个估计被我忽略了,我找找看,谢谢 p4s5j6 发表于 2012-6-12 15:11 static/image/common/back.gif
优先级高的任务米有释放CPU控制权吧
#if OS_TIME_DLY_HMSM_EN > 0
INT8UOSTimeDlyHMSM (INT8U hours, INT8U minutes, INT8U seconds, INT16U ms)
{
INT32U ticks;
INT16U loops;
if (OSIntNesting > 0) { /* See if trying to call from an ISR */
return (OS_ERR_TIME_DLY_ISR);
}
#if OS_ARG_CHK_EN > 0
if (hours == 0) {
if (minutes == 0) {
if (seconds == 0) {
if (ms == 0) {
return (OS_ERR_TIME_ZERO_DLY);
}
}
}
}
if (minutes > 59) {
return (OS_ERR_TIME_INVALID_MINUTES); /* Validate arguments to be within range */
}
if (seconds > 59) {
return (OS_ERR_TIME_INVALID_SECONDS);
}
if (ms > 999) {
return (OS_ERR_TIME_INVALID_MS);
}
#endif
/* Compute the total number of clock ticks required.. */
/* .. (rounded to the nearest tick) */
ticks = ((INT32U)hours * 3600L + (INT32U)minutes * 60L + (INT32U)seconds) * OS_TICKS_PER_SEC
+ OS_TICKS_PER_SEC * ((INT32U)ms + 500L / OS_TICKS_PER_SEC) / 1000L;
loops = (INT16U)(ticks >> 16 ); /* Compute the integral number of 65536 tick delays */
ticks = ticks & 0xFFFFL; /* Obtainthe fractional number of ticks */
OSTimeDly((INT16U)ticks);
while (loops > 0) {
OSTimeDly((INT16U)32768u);
OSTimeDly((INT16U)32768u);
loops--;
}
return (OS_ERR_NONE);
}
#endif
这个函数为每个任务可以占用多长时间的cpu,这个函数的参数我设置了但设置的时间根本不起作用,我看了下函数原型根本就没delay就去执行下一个任务了,大侠给解释下??? 在高优先级的程序delay的时候,os会用这段时间去执行低优先级的程序,如果没有delay的话,os就不会有时间去执行低优先级的程序了. www378660084 发表于 2012-6-14 08:56 static/image/common/back.gif
在高优先级的程序delay的时候,os会用这段时间去执行低优先级的程序,如果没有delay的话,os就不会有时间去执 ...
一语点醒梦中人啊。。谢谢大侠 高优先级的任务使用了死循环,而没使用系统提供的时间管理函数,导致低优先级的任务无法获得cpu的使用权!
页:
[1]