[求助] 程序运行着进入OS_IdleTask (void *p_arg),卡在里面了

碧霄长博   2017-5-12 17:30 楼主
程序运行着进入OS_IdleTask (void  *p_arg),卡在里面了

回复评论 (4)

这个卡在里面了是个什么意思?怎么判断出的这个结论呢?这个函数里面有系统挂起的处理吗?
点赞  2017-5-12 17:38
我进行仿真着,程序停在了这个任务中了
void  OS_IdleTask (void  *p_arg)
{
    CPU_SR_ALLOC();



    p_arg = p_arg;                                          /* Prevent compiler warning for not using 'p_arg'         */

    while (DEF_ON) {
        CPU_CRITICAL_ENTER();
        OSIdleTaskCtr++;
#if OS_CFG_STAT_TASK_EN > 0u
        OSStatTaskCtr++;
#endif
        CPU_CRITICAL_EXIT();

        OSIdleTaskHook();                                   /* Call user definable HOOK                               */
    }
}

UCOSIII 的os_core.c文件中
点赞  2017-5-12 17:44
你的其他线程是不是 有返回的,所有线程不能返回   只能被删除
亚里士缺德
点赞  2017-5-12 21:19
引用: 汤权 发表于 2017-5-12 21:19
你的其他线程是不是 有返回的,所有线程不能返回   只能被删除

自定义的任务有两种:
1.void led1_task(void *p_arg)
{
        OS_ERR err;
        p_arg = p_arg;
        while(1)
        {
                LED1=~LED1;
                OSTimeDlyHMSM(0,0,2,0,OS_OPT_TIME_HMSM_STRICT,&err);
        }
}

2.void can_task(void *p_arg)
{
                OS_ERR err;
                p_arg = p_arg;
                while(1)
                {
                        OSSemPend(&CAN1RXEND_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);         //ÇëÇóDÅoÅá¿                                               
            move_decode();
                    OSTimeDlyHMSM(0,0,0,200,OS_OPT_TIME_PERIODIC,&err);      //Ñóê±10ms       
                }

}

这样的任务十多个,如上面两个任务。can接收中断中有数据收到时, 执行任务can_task(void *p_arg)。通过jlink仿真,程序运行一段时间就停在空任务中。
点赞  2017-5-12 23:26
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复