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/TM4C1290NCZAD:LOAD_getGlobalSwiLoad()报告8%的 SWI 负载、即使在 TI-RTOS 配置中未启用 SWI 模块

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/612014/rtos-tm4c1290nczad-load_getglobalswiload-reports-8-swi-load-even-though-swi-module-is-not-enabled-in-ti-rtos-configurataion

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

工具/软件:TI-RTOS

您好!

我注意到,Load_getGlobalSwiLoad()报告了应用程序中的 SWI 负载为8%,即使 SWI 模块未启用。

是否有任何方式可以自动启用 SWI 模块? 我可以通过某种方式禁用它吗?

下面是我的 TI-RTOS 配置文件。

e2e.ti.com/.../TIRTOS.cfg

谢谢、

此致、

Peter A.

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    默认情况下、内核在内部使用 Swi。 8%似乎有点高、因为您正在提供时钟周期。 您可以启用 Swi 日志跟踪(将 LoggingSetup 添加到.cfg 中并启用 Swi 日志记录)。 这将显示运行的是什么 Swi。 此外,您能否查看 Tools->ROV->Swi->实例以查看存在的内容。

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

    您好 Todd、

    感谢您的回答。 我收集了您要求的数据。 请参见下图。

    在我启用日志记录后、SWI 负载上升到19%、但这可能是预期的行为。

    如果只有 TI-RTOS 正在使用 SWI、SysTick 周期设置为100us 且日志记录模块已禁用、您能否告诉我预期的 SWI 加载是多少?

    谢谢、此致、

    Peter A.

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

    对于时钟节拍、100us 处于 FAST 侧(很抱歉、我最初没有注意到)。 在内部、你调用 Clock_tick 来提升时钟(因为你有 Clock.tickSource = Clock.tickSource_user;)、仍然布置一个 Swi 来在内核中执行所有时间管理。 如果您的 Load.swiEnabled 也设置为 true、8%的噪声不会令人感到难以容忍。 Load.swiEnabled 本身增加了几个百分点、因为在每个 Swi 执行的开始和结束时都有一些数学运算。

    您希望内核时钟具有100us 粒度的具体原因是什么? 我们默认为1ms、大多数客户都将其保留在此值。 请注意、您始终可以自由地将计时器直接用于您的应用、将其他计时器用于内核的时钟模块。 这消除了从高速计时器调用 Clock_tick 的开销。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Todd、
    这很好、我们看到的8%似乎可以接受-我担心发生了错误。
    您能否告诉我将 Load.swiEnabled 设置为 true 后添加了多少 SWI 负载? 如果我们将 Load.swiEnabled 设置为 false、将如何计算其他负载? SWI 加载将被省略、还是会自动添加到其他负载? 我注意到、当我启用 SWI 负载和 HWI 负载监控时、报告的 CPU 负载变化(减小)。

    关于系统时钟频率、我们将对其进行重新评估、因为降低时钟频率并将外部计时器用作时间源似乎是一个好主意。

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

    我刚刚做了一些测试、我看到了一些奇怪的结果。 当全部三个(hwiEnabled、swiEnabled 和 taskEnabled)都为 false 时、我会看到大约17%的 CPU 使用率。 当这三个值都为 true 时、我将看到15%。 我更信任后者。 对于第一种情况、我们计算在配置的周期内 IDLE 已执行的次数。 我们还确定通过空闲的最快时间。 了解这两者后、我们可以很好地估算 CPU 负载。 当所有这些都为真时、我们实际上会为每个任务上下文切换、swi 执行和 hwi 执行的开始和结束时间戳。 在增加一些开销的同时、它更准确。

    Swi 加载的开销是一个要引用的硬数。 它实际上取决于您的系统(例如、是否同时运行多个 Swi)。 为 Swi 加载添加的代码是 packages/ti\SysBIOS\utils\Load.c 中的 Load_swiBeginHook()和 Load_swiEndHook()函数 注意:它还处理嵌套 Swi

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

    此致、
    Peter A.