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.

[参考译文] AM5726:DSP BIOS:高优先级线程已准备就绪但未调度(C66内核)

Guru**** 2487425 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1437244/am5726-dsp-bios-high-priority-threads-are-ready-but-not-scheduled-c66-core

器件型号:AM5726
Thread 中讨论的其他器件:SYSBIOS

工具与软件:

你(们)好

这种情况仅发生在 C66上、A15上也是如此。

BIOS_6_52_00_12

谢谢

Raste.

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

     BIOS_6_52_00_12出现问题

     BIOS_6_76_03_01仍然存在问题  

    需要紧急解决。

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

    嗨、Rasty、

    A15和 C66之间的*cfg 文件是否有任何差异? 是否设置了中断?

    -若苏厄

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

    您好!

    ISR 链接到 GPIO、ISR 向任务发布一个信号量。

    一切正常、但是会受到低优先级 tasks.e2e.ti.com/.../4705.app.cfg 的干扰

    可以在低优先级任务中通过严格环路模拟/放大问题。

    我没有找到任何 在系统级别禁用/启用抢占的标志/API。

    连接了 CFG。

    谢谢

    Raste.

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

    Rasty、

    要设置正确的预期目标、请注意我们的 SYSBIOS 支持非常有限。  

    尽管如此、这看起来并不正确、而且肯定不是应该发生的事情。 (当然、您已经了解了这一点。)

    在你共享的.cfg 文件中、我看不出你正在使用什么样的信标、 你能够共享正在使用什么样的信标吗?

    较低优先级的线程是否有可能禁用调度程序?  即调用 Task_disable() ?

    事件组合器模块的作用是什么?

    -若苏厄

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

    您好!

    我们使用从 ISR 释放并由高优先级任务执行的信标。

    我们不使用  Task_disable()。

    您可以通过在低优先级运行以下代码来轻松重现此行为:

    while (1)

    volatile int i = 1000000;

    while (i --)

    }

    睡眠(100);<-在此处输入断点、您将看到高优先级任务处于"就绪"状态。

    }

    而无需任何信标或 Task_disable。

    我可以给你一个提示:

    cfg 文件中的以下2行

    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    BIOS.swiEnabled = false;

    修正此行为、但具有非常奇怪的副作用。 也许这将为您提供一些方向。

    谢谢

    Raste.

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

    忘记我提到过的。

    BIOS.swiEnabled = false;不解决 任何问题。 只是会引入另一个 奇怪的行为。

    才需要合适的解决方案。

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

    Rasty、您好!

    您能否提供有关您的项目的更多详细信息? 这是您要添加的新功能吗? 为什么现在出现此问题、而之前没有报告或讨论? 您最近进行了哪些代码更改? 您是否进行了全面的代码审查? 如果使用 TI SDK 模块、这里使用 TI SDK 的哪个部分? 您提供的详细信息越多、我们就越能理解它。

    谢谢。

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

    你(们)好

    这个项目已经运行了几年。

    将某些功能(计算)从 A15卸载到 C66。

    从第1天开始、它就在我们的路线图上、但由于项目计划而延迟了。

    我们制定了 C66和 POC 的所有基准并认为它可以接受。

    就在发布前几天、我们发现从低优先级任务到高优先级任务存在干扰。

    您需要了解以下内容。

    1.由 GPIO 触发的周期性 ISR。 工作正常。

    2. ISR  向高优先级线程发送一个二进制信标。 工作正常。

    3.线程唤醒并做一些有用的工作,并再次挂起信标。 工作正常。

    4.低优先级任务(如下图所示)对高优先级线程产生干扰。 这不是我所期望的。

    应用非常简单、此外我们还有简单的诊断控制台连接到 UART。

    个性签名 不会

    1.阻止中断

    2.暂停调度程序

    3.使用可导致优先级反转的互斥体。

    正如您在初始帖子中的图片所示

    低优先级任务"正在运行"、而高优先级任务"就绪"、 这是异常情况、我不会期望抢先式实时内核。

    此致

    Raste.

    while (1)

    volatile int i = 1000000;

    while (i --)

    }

    睡眠(100);<-在此处输入断点、您将看到高优先级任务处于"就绪"状态。

    }

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

    Rasty、

    请参阅 TI-RTOS 内核用户指南:信标的第4.1章

    低优先级的任务"正在运行"、而高优先级的任务"就绪"、 这是一种异常现象、我不会期望抢先式实时内核能做到这一点。

    对、您有三个使用一个二进制信标的任务。 这是我的初始诊断。

    请访问 https://focus.ti.com/download/trng/multimedia/dsp/OLT110026/semaphores.mp4

    此致!

    若苏厄

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

    这 不是我写的。

    周期 ISR 发布一个二进制信标给在信标上挂起的任务(为清楚起见、我们删除了第二个周期任务)。

    周期性任务应完成其工作、直到下一次中断。

    有一个低优先级任务根本不使用任何信标、只有紧密循环和睡眠。

    因此、我们有一(1)个中断、一(1)个高优先级周期性任务、一(1)个信号量(在 ISR 和高优先级周期性任务之间)和一个低优先级任务 根本不使用任何信标 .

    由于低优先级任务、高优先级任务会延迟。

    同样的情况在 A15上可以正常工作、但在 C66上不可行。

    我使用不同类型的 RTOS ,如 VxWorks,FreeRTOS,TheadX,SYS-BIOS , 20年的发展经验。 我知道信标的工作方式以及预期结果。

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

    Rasty、

    我根据您所写的"线程(s)"(复数)假设:

    。 ISR  向高优先级线程发布一个二进制信标。 工作正常。

    如果这是一个错误的假设,我很抱歉,只是试图帮助。

    下面列出了其他一些想法:

    • 您是否考虑启用 BIOS.assertsEnabled = true;-这将有助于我们进行一些健全性检查并提供有关可能出错的更多信息。

    • 您是否可以尝试减小应用程序以查看是否有其他因素影响调度程序?  如果您移除 NDK/网络线程、是否仍然看到问题?
    • 如果您要在紧密循环中插入一些小延迟、您仍然会看到问题吗?

    您能否在一个 TI 电路板的小示例中重新创建该设计并将其与我们分享以进行测试?

    -若苏厄

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

    我希望这一问题已为人所知、您可能已经有了一些解决方案。

    我们将 对这个问题进行简单的独立复制并上传。

    我有几个问题。

    1. SYS BIOS 是否有可以打开/关闭的非抢先式模式?  

    2.是否可以在 C66 ISR 中使用浮点?  我们应该怎么做才能在 ISR 中启用浮点?

    3.对于从 ISR 发送消息(通过消息队列)是否有任何限制? 例如不同的 API/等?

    谢谢

    Raste.

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

    Rasty、

    我今天不在办公室,我下周会回来。 您可以在 https://software-dl.ti.com/lprf/simplelink_cc26x2_latest/docs/tirtos/sysbios/docs/Bios_User_Guide .pdf 上找到许多此类信息

    此致!

    若苏厄

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

    您好!

    它没有帮助。 文档描述了抢先式行为(即 RTOS)、没有提及对 ISR 的任何限制。

    我检查了 RTOS 的源代码、没有看到任何看起来像 Hwi 执行路径中浮点上下文的安全/恢复的内容。  

    谢谢

    Raste.

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

    Rasty、  

    这些章节包括 ISR 的限制:

    如需了解更多相关信息、请访问:

    以及回顾:

    另一个限制是应避免在 HWI 或 SWI 上下文中进行内存分配。

    请参阅 https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/839437/memory-allocation-form-hwi-swi-context

    -若苏厄

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

    文档没有帮助。

    我已经通过实验 得出 、可以从 SYS BIOS 的 C66端口中的 hwi 中使用浮点。

    我们 将所有关键处理从线程移动到 HWI。

    不正确的 调度问题未解决。