[讨论] MSP430移植ucosii系统后跑飞

adam_zhang41   2015-8-21 09:06 楼主
这是我向MSP430移植的一个ucosii系统,
QQ图片20150821085533.png
下载程序,在线调试,发现程序一直停在 OSInit()这个函数。通过单步调试,发现在执行创建空闲任务函数时
    (void)OSTaskCreateExt(OS_TaskIdle,
                          (void *)0,                                 /* No arguments passed to OS_TaskIdle() */
                          &OSTaskIdleStk[OS_TASK_IDLE_STK_SIZE - 1], /* Set Top-Of-Stack                     */
                          OS_IDLE_PRIO,                              /* Lowest priority level                */
                          OS_TASK_IDLE_ID,
                          &OSTaskIdleStk[0],                         /* Set Bottom-Of-Stack                  */
                          OS_TASK_IDLE_STK_SIZE,
                          (void *)0,                                 /* No TCB extension                     */
                          OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);/* Enable stack checking + clear stack  */
在这个函数里面,在执行到断点所在位置时(如下图所示),函数没有往下执行,而是直接跳到了空闲任务OS_TaskIdle里去了。按理说断点处已经得到了err==OS_NO_ERR,程序应该往下执行才对呀,实在搞不懂,还请各位前辈指点一二
QQ图片20150821090139.png

回复评论 (2)

任务没有调度, 有可能是定时器没启动,检查下吧
点赞  2015-8-21 11:00
引用: lruifoot 发表于 2015-8-21 11:00 任务没有调度, 有可能是定时器没启动,检查下吧
定时器是要什么时候开始启动呢?是放在OSInit()之前吗?还是放在自己创建的那个任务里?但是我看到邵贝贝那本书上说要放在OSStart()之后 测试之后的结果是把定时器启动放在OSInit()之前,能进入定时器中断里面,但是程序还是只能执行到OSInit(),放在自己创建的任务里,或者放在OSStart之后(也就是放在OSInit()之后),程序只能执行到OSInit(),自然也就无法打开定时器中断了。这到底是怎么回事???? 本帖最后由 adam_zhang41 于 2015-8-22 10:39 编辑
点赞  2015-8-22 10:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复