尊敬的 TI 专家:
在 尝试迭代以提高 TI 工具(C/C++ 编译器/链接器)生成的最终汇编代码的效率之后 、我没有找到相关选项和系统设置(编译器、链接器、C28x...)的适当组合 以实现足够快的数据传输(效率通过 执行这些广泛使用的操作所需的 CPU SYSCLK 周期数进行测量)。
事实上、我们被迫 将数据接口缩减到16位宽的 EMIF 接口(作为在我们的 ECS 中集成互联网接口的折衷方案)。 当然、还存在与 EMIFx 数据接口的异步字符相关的其他(加重)问题。
当在内部寄存器之间或寄存器与内部存储器和寄存器之间运行时、有许多可用的 CPU 性能改进功能、例如许多算术/逻辑1-2周期(读取/测试和修改/写入)指令、这些指令利用了新的 C2000系列 MCU 基础架构提供的一些增强功能(包括自动后增量、后减量寻址选项)。 但是、 当源数据和目标数据都位于未寄存器分配的存储器位置时、任何此类指令都不会提供类似的性能。
例如、使用 EMIF16接口、在存在存储在外部存储器位置的外部数据块的情况下
(例如、具有包含即时 ADC 结果的连续地址的缓冲器、通过 集成在同一 PCB 上的额外独立控制的外部相邻 DAQ 子系统和/或其独立计算的后处理衍生器件来获取)
应立即(尽快)传送到 MCU 芯片内的数据存储器
(例如、分配给任一 C28x 内核的 GS 或 LS 存储器)
每次此类传输都 需要大量的 CPU 周期、其中的大部分时间 似乎已浪费掉、因为 在此期间 MCU 的 C28x 内核
不执行任何其他有用的任务(根据 C/C++生成的汇编代码)。
例如、8个字的数据块(16位数据)需要超过 170个周期(平均值)
当 CPU 总负载达到75%或者更多一点时、执行性能会进一步下降。
此外,事实证明,只有在最高优先任务上执行数据块传输操作时,才能保证数据的一致性(数据块传输中的数据)。
是否有机会 为 TI C2000编译器/链接器采用一些高级选项/开关来提高此类实际"存储器到存储器"数据传输的性能?
由于讨论了连续地址、如果(对于上述数据块传输示例)仅 进行4个 EMIF 传输(如有必要、4×32位数据在内部分离为高/低字)、将提高性能
而不是两倍以上的 EMIF 数据传输(8×16位数据)-两者都使用 EMIF16数据接口?
此外、除了 DMA 之外、您建议什么来优化内部外设(内部 ADC、SDFM 子系统、ePWM...)之间的数据交换性能
和 C28x 内核(也最好适用于两个 CLA 内核)?
是否有任何方法 指示(预)编译器最大限度地使用"原子指令"( 尽可能识别/实现更多原子指令、即在适用时)?
有什么特殊原因为什么汇编 RPT 命令只能处理一条指令(而不是至少两条指令、在这种 情况下、我强烈认为可以解决前面提到的很多 CPU 代码执行效率问题)?
这都是为了知道。 我们期待您的下次再见。 提前感谢。
时间很重要(尤其是实时嵌入式控制系统的执行时间),因为它总是:-)
此致
Nenad Težak ć
页 S:听起来可能很奇怪、从目前的角度来看、似乎 F28388D 的 CPU 性能与 C/C++生成的汇编 代码相比明显落后于 F28335!?
它是否与特定功能块(每个功能块都以 C/C++编写、然后编译/转换/链接到执行汇编)之间不太高效的输入/输出数据参数传递/交换有关?