jeep_jun 发表于 2012-6-12 14:48:39

关于os任务切换的问题??

最近学习一直uc/os-II的学习,有两个星期了,目前能顺利移植到我的arm单片机上,
但我在写单任务的时候当任务跑完跑到空闲状态,问题是我进入空闲状态如果我还要执行任务我改如何跑出来??

后来我又写了多任务的程序,但在跑起来后才发现,程序只跑优先级最高的程序,其他低优先级的根本不执行?这又是为何啊,请各位大侠给小弟点睛?????????

john_patson 发表于 2012-6-12 15:07:22

嗯嗯。。你是不是任务使用死循环来的呢?开启了多任务了没呢?你去看看那系统的技术手册了,它有两种模式了。

p4s5j6 发表于 2012-6-12 15:11:30

优先级高的任务米有释放CPU控制权吧

jeep_jun 发表于 2012-6-12 15:16:18

john_patson 发表于 2012-6-12 15:07 static/image/common/back.gif
嗯嗯。。你是不是任务使用死循环来的呢?开启了多任务了没呢?你去看看那系统的技术手册了,它有两种模式了 ...

恩,用的是死循环,但我仿真的时候能跳出死循环来啊?

jeep_jun 发表于 2012-6-12 15:20:07

p4s5j6 发表于 2012-6-12 15:11 static/image/common/back.gif
优先级高的任务米有释放CPU控制权吧

哦,这个估计被我忽略了,我找找看,谢谢

jeep_jun 发表于 2012-6-12 16:23:31

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就去执行下一个任务了,大侠给解释下???

www378660084 发表于 2012-6-14 08:56:06

在高优先级的程序delay的时候,os会用这段时间去执行低优先级的程序,如果没有delay的话,os就不会有时间去执行低优先级的程序了.

jeep_jun 发表于 2012-6-15 16:13:00

www378660084 发表于 2012-6-14 08:56 static/image/common/back.gif
在高优先级的程序delay的时候,os会用这段时间去执行低优先级的程序,如果没有delay的话,os就不会有时间去执 ...

一语点醒梦中人啊。。谢谢大侠

lijg8421 发表于 2012-6-15 17:36:15

高优先级的任务使用了死循环,而没使用系统提供的时间管理函数,导致低优先级的任务无法获得cpu的使用权!
页: [1]
查看完整版本: 关于os任务切换的问题??