打印
[uCOS/RTOS]

关于nios上移植ucos时OSStartHighRdy()函数的问题

[复制链接]
1757|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lip2004love2004|  楼主 | 2013-12-25 18:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在看《嵌入式实时操作系统UCOS-II(第2版)》时,文中说OSStartHighRdy()函数的功能是运行最高优先级的就绪任务,用户需要将所有的处理器寄存器安顺序从任务堆栈中恢复出来,并执行中断返回;但是我在看nios的移植代码时发现许多与原文要求不同的地方。
下面是nios关于OSStartHighRdy()的代码部分:
/*********************************************************************************************************
*                                        START THE HIGHEST PRIORITY TASK
*                                           void OSStartHighRdy(void)
*
* Note(s): 1) Upon entry,
*             OSTCBCur     points to the OS_TCB of the task to suspend
*             OSTCBHighRdy points to the OS_TCB of the task to resume
*
*********************************************************************************************************/
      .global OSStartHighRdy            

OSStartHighRdy:

      /*
       * disable interrupts so that the scheduler doesn't run while
       * we're initialising this task.
       */  
      rdctl r18, status
      subi  r17, zero, 2   /* r17 = 0xfffffffe */
      and   r18, r18, r17
      wrctl status, r18

      /*
       * Call the user definable OSTaskSWHook()
       */

      call OSTaskSwHook

      /*
       * set OSRunning = TRUE.
       */

      movi r18, 1                    /* set r18 to the value 'TRUE' */
      stb r18, %gprel(OSRunning)(gp) /* save this to OSRunning */

#if defined(ALT_STACK_CHECK) && (OS_TASK_CREATE_EXT_EN == 0)

      mov et, zero                   /* Don't check stack limits */
      stw et, %gprel(alt_stack_limit_value)(gp)

#endif

      /*
       * start execution of the new task.
       */

      br 9b


这个代码首先没有将堆栈内容恢复到寄存器的步骤,其次有一个不太明白的地方就是最后一句 br 9b;按照资料上说,应该是执行中断返回的功能,但是9b是根据什么确定的呢?


相关帖子

沙发
adef_13| | 2013-12-25 18:29 | 只看该作者
目前看不懂                 

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝