black0936

    1. 请教任务切换问题 6/3773 嵌入式系统 2012-06-17
      精辟,实在感谢。看问题果然要耐心细致,非常感谢。
    2. 请教任务切换问题 6/3773 嵌入式系统 2012-06-17
      其实想问的正是这一句,如果将OSSchedUnlock()放到OSTaskSuspend(B)之后,那这一句还会不会执行呢?挂起任务后是不是之后的语句都不会执行了呢?也就是说,实际上OSTaskSuspend(B)挂起自身后又没有来得及执行OSSchedUnlock(),所以程序无事可做,可能会死掉。这样理解对吗?谢谢指点
    3. 请教任务切换问题 6/3773 嵌入式系统 2012-06-17
      非常感谢juntianya的回复。本来已经隔了几天没看这个论坛了,没想到您还是热心的帮我解答问题,非常感谢。事实上也的确是你说的那个问题,我颠倒了一下顺序就好了。非常感谢。现在还是有一个问题希望请教。我是三个任务来回切换,例如说A、B、C,切换有两种可能,中断或者是任务中设置条件满足。现在问题来了,有这种情况,在任务B运行过程中(此时A、C都没有运行)    if(满足条件)        {            OSTaskResume(A);//解除任务A的挂起状态            OSTaskSuspend(B);//挂起当前任务B        }这种情况下,解除A的挂起状态时运行过OSSched(),因为A的优先级高,所以直接切换过去运行A,等到A中运行到OSTimeDly()这一块,又转回来运行B,然后发现B需要挂起,有点绕远路的感觉。我觉得这个过程有点麻烦,有没有什么方法能先解除A的挂起,再挂起B,然后才运行调度函数,进行任务切换。我的想法是            if(满足条件)            {                        OSLockNesting++;                        OSTaskResume(A);//解除任务A的挂起状态                                     OSLockNesting++;                        OSTaskSuspend(B);//挂起当前任务B            }这样子就能保证先解除A的挂起状态同时不进行任务切换,留到挂起B的时候再进行任务切换,你觉得这样合适吗?谢谢!
    4. uCOS源码求教 6/3879 实时操作系统RTOS 2012-06-05
      也许是我太愚钝了,还是不太明白。为什么OSTCBFreeList的值为0时就意味着已经没有空余TCB了呢?初始化时不也是为0吗? 好的,谢谢你的指点。我还是回去再琢磨琢磨代码吧。
    5. uCOS源码求教 6/3879 实时操作系统RTOS 2012-06-05
      很感谢你能够耐心给我指点,抱歉还是不太明白,请允许我再多问几句。如果说“空余”的TCB应该非零,那么为什么初始化时要清零呢?假如我初始化后直接建立一个任务,岂不是就立即失败。初始化函数OSInit()之中将所有的TCB控制块清零,同时OSTCBFreeList指向第一个控制块,此时应该是零吧?然后我建立一个任务OSTaskCreate()之中会调用OS_TCBInit(),这个函数中会检验是否存在剩余的控制块,如果发现ptcb == (OS_TCB *)0,应该会报错吧? 这是我的理解,不知道哪里出问题了,请指教。 还有我知道OSTCBTbl和OSTCBPrioTbl是两个不同的控制块,前者是按照创建任务的顺序排布的,大小根据最大任务数,后者则是按照优先级排布的,大小根据最大任务优先级数,但是初始化函数中这两个均置零了,为什么判断是否仍有空余时不同呢? 恳请指教,谢谢!

最近访客

< 1/1 >

统计信息

已有57人来访过

  • 芯积分:--
  • 好友:--
  • 主题:2
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言