0

我在ARM7上运行了一些代码,首先我使用OSTaskCreateExt在main中创建启动任务,然后它将在启动任务中创建一些子任务,即AppTaskCreate的用法。但是在进入 OSStatInit 后它永远不会被回调并再次运行下一行。通过调试发现,一旦进入OSStatInit,启动的Task就会从os schedule的就绪任务表中删除,并且逐步没有时间滴答响应负责改变就绪任务表的状态。所以它永远不会再次安排启动任务。在发现我深入调试 uc/os-ii 内核中的时间管理器之后。在 OSTmr_Task 中运行代码时,它会在 "OSSemPend(OSTmrSemSignal, 0, &err);" 行处暂停并停止 通过等待一些信号。所以我认为缺乏一些信号来调用它。到最后,

下面列出了一些代码:

int  main (void)
{
    BSP_IntDisAll();

    OSInit();  /* Initialize "uC/OS-II, The Real-Time Kernel" */

    err = OSTaskCreateExt(AppTaskStart,
                (void *)0,
                (OS_STK *)&AppTaskStartStk[APP_TASK_START_STK_SIZE - 1],
                APP_TASK_START_PRIO,
                APP_TASK_START_PRIO,
                (OS_STK *)&AppTaskStartStk[0],
                APP_TASK_START_STK_SIZE,
                (void *)0,
                OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
    if(err != OS_NO_ERR) {
        return 0;
    }


     #if (OS_TASK_NAME_SIZE > 13)
         OSTaskNameSet(APP_TASK_START_PRIO, "Start Task", &err);
     #endif


     OSStart();
     return 0;
}

static  void  AppTaskStart (void *p_arg)
{
    (void)p_arg;
    p_arg = p_arg; //avoid warning
    BSP_Init();                /* Initialize BSP functions*/

    OSStatInit();           /* Determine CPU capacity*/

    AppTaskCreate();        /* Create application tasks */

    OSTimeDlyHMSM(0,0,0,10);

    OSTaskDel(OS_PRIO_SELF);
 }
4

1 回答 1

0

感谢@D Krueger 和@Clifford。这个问题有一个答案,因为我忘记在 bsp 上初始化计时器滴答管理器。就是这样。

于 2013-08-06T01:11:40.357 回答