【发布时间】:2022-01-05 20:08:09
【问题描述】:
目前我正在为带有 Cortex-M4 处理器的 STM32F4VE 编写一个轻量级的 RTOS。多个进程之间以循环方式进行上下文切换工作正常,但尽可能优化内核机制是我的爱好。 TCB 堆叠在 SRAM 底部的保留区域中。
在每次上下文切换时,我都会像这样搜索下一个 TCB:
((pid + 1) * TCB_Size) + TCB_BASE_ADRESS.
如果 pid 等于任务数量,我将其重置为 0。这是通过 if 三元运算符完成的,而不是昂贵的模运算。
当切换时,例如每 8 毫秒,CPU 必须每次都执行此乘法运算。 我想知道在生成每个任务时预先计算这些 tcb 地址并将它们直接写入内存是否会更有效。
第二种变体将在每次上下文切换时访问内存 2 次 - 获取 tcb 的地址,获取 tcb。否则会有一个“昂贵”的乘法。
哪种变体更有效? 如果没有人有绝对的答案,我将重写概念并做一个简单的基准测试。
谢谢!
【问题讨论】:
标签: performance memory rtos