This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS/TM4C1294NCPDT:当另一个较低优先级的任务持续循环时、任务模块无法加载空闲模块静态任务。

Guru**** 2547370 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/570565/rtos-tm4c1294ncpdt-task-module-fails-to-load-the-idle-module-static-task-when-another-task-of-lower-priority-is-persistently-looping

器件型号:TM4C1294NCPDT

工具/软件:TI-RTOS

先前披露: https://e2e.ti.com/support/embedded/tirtos/f/355/p/570414/2092056#2092056

也许 BIOS 内核的计时速度不够快,1000us 时钟周期无法为     一个静态的更高优先级的空闲循环任务函数提供服务,该函数的休眠间隔为10ms……

1:当       较低 优先级的任务 循环(8) 持续 保持加载状态时、任务模块无法指示(实时会话)高优先级静态任务(0)的负载。

2.任务模块调用堆栈  没有空闲模式任务函数的跟踪数据,因为它从未加载或运行。

3. BIOS 内核不     能及时监视对每个已注册任务的任务模块调用。

4.   没有为未加载的任务或在列表中存在时进入运行状态而转换内核异常。

为什么会出现这种情况、是否有解决方法?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    发现的变通方法是将静态空闲打印(taskFxn)代码 while (1)循环从(uartlogging.c)删除到 Task、IOT while (1)循环。 因此、删除 while (1)静态注册循环、使其成为  Task.IOT while (1)循环的嵌套动态空闲打印任务。  
     
     也许 RTOS 只能支持1个任务循环或混淆阻止延迟更高优先级的任务 以抢占线程。 如果出现加载线程的延迟、似乎证明 BIOS 任务轮距管理器没有按优先顺序切换任务。

    在(Task.IOT)循环优先级(8)之前加载了奇怪的(taskFxn)循环优先级(1)。 (taskFxn)启动10ms 延迟、导致空闲线程管理器(~KNL_Idle_loop_E)断言阻塞实时打印任务 Fxn 循环事件和/或完全抢占线程。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    根据我在另一个主题中的评论、您是否要打开此讨论?

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当 IOT。Fxn 时、从不可能加载(uartlogging.c)的静态任务、而(1)循环似乎永远不允许加载后最后调用 BIOS_start()。

    仅可通过在 IOT。Fxn while (1)循环内嵌套打印用户1来获取 CCS 调试实时状态、如下所示。

    (uartlogging.c):
    
    /*
    === taskFxn ====
    *此函数的任务是静态创建的。 请参阅工程的.cfg 文件。
    //
    //void taskFxn (UArg0、UArg0 arg1)
    //{
    //无符号整型 sleepDur= 100;
    //unsigned int id =(unsigned int) arg0;
    //unsigned int count = 0;
    
    //while (1){
    /*休眠10毫秒*/
    // Task_sleep (sleepDurs);
    //Log_print2 (Diags_User1、"任务%d 唤醒、计数=%d"、ID、计数);
    //count++;
    //}
    ////
    
    Task_Params_init (&taskParams);
    // taskParams.STACKSIZE = TASKSTACKSIZE;
    // taskParams.stack =&task0Stack;
    //task_structure&struct (&task0Struct,(Task_taskcPtr) taskFxFunn、taskParams null);
    
    
    变通办法 nest (Diags_User1)打印现有 while (1)循环底部:
    
    /*=========================================== //
    /*++++++ 物联网任务功能++++++++ //*/*========================================
    /void
    
    IOTAppLoop _taskFxn (void)
    {
    unsigned int sleepDur=500;
    unsigned int count = 0;
    
    
    /*++++ 一些物联网呼叫线路++++ */
    
    }
    }
    
    }
    
    }
    
    /*休眠50ms */
    Task_sleep (sleepDurs);
    log_print2 (Diags_User1、"任务%d 唤醒、计数=%d"、0、计数);
    count++;
    }
    }