如何编辑 linker.cmd 文件以在 TCM 中添加新的部分、以及如何将应用代码添加到这些 TCM 部分以实现更快的代码执行?
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.
如何编辑 linker.cmd 文件以在 TCM 中添加新的部分、以及如何将应用代码添加到这些 TCM 部分以实现更快的代码执行?
有时、机器关键型应用需要使用延迟极低的代码更快地执行。 在这种情况下、可以将这段代码配置为在 TCM 中执行、因为它靠近 CPU。 如果内核正在访问其自身的 TCM、TCM 在每次访问时采用单个 R5周期。 有关 TCM 的更多信息、请参阅 TRM。 每个 R5内核包含64 KB TCM 存储器、划分如下:
TCMA - 32KB
TCMB - 32KB
修改 linker.cmd 文件:
代码和数据存储器可被单独添加至 TCM。 作为一个一般原则、代码和数据应该被放置在不同的 TCM 分区(TCMA 和 TCMB)中以进一步提高性能。 要在 TCM 中创建段、请按如下所示编辑 linker.cmd:
.NewTCMSection1 : {} palign(8) > R5F_TCMA .NewTCMSection2 : {} palign(8) > R5F_TCMB
示例:
此处的 controlfunction 部分包含 代码并存在于 TCM_A 中 同样、应用的数据部分出现在存在于 TCM_B 中的控制数据部分
2.为代码段的 linker.cmd 文件添加了更多内容:
TCM 中代码所使用的堆栈也应该被放置在 TCM 中。 例如、ISR 的 IRQ 或 SVC 堆栈也应该在 TCM 中。 下图显示了如何添加 IRQ、SVC 和 FIQ 堆栈。
注意:如果您的应用占用的 TCM 空间更小、则 linker.cmd 文件的其他部分也可以放置在 TCM 中、具体取决于如下所示的要求:
3.修改本准则:
现在、TCM 中所需的代码部分:
static inline __attribute__((__section__(".controlfnc"),always_inline)) void Function_API (uint32 function_param) {} __attribute__((__section__(".controlfnc"))) int Function_API (uint32 function_param) { return 0;}
对于全局变量:
uint32_t GlobalVariable __attribute__((__section__(".controldata")));
任何经常执行且占用大部分 CPU 时间的 ISR 都可以被置入 TCM 中。 ISR 使用的任何函数、如数学函数等、也应放入 TCM 中。 ISR 或内部函数内的局部变量可被作为全局变量并被添加到 TCM 中。
4.存储器异常:
TCMA 和 TCMB 各为32KB、因此如果在32KB 以上添加任何多余的内存、编译器会引发以下异常:
错误#10099-D:程序不能放入可用存储器中、或者该段包含需要无法为此段生成的 trampoline 的调用站点。"
然后、用户必须重新调整需要存在的代码段以及可以避免的代码段。 通常建议将高优先级 ISR 与传感和控制环路相关的应用置于 TCM 内部。
5.映射文件和 TCM 部分:
要验证此代码部分是否已成功放入 TCM、请参阅以下步骤:
1.编译并编译代码。 强烈建议在启用优化的情况下使用发行模式配置。
R5_0_0 (第1个内核)中的 TCMA 出现在地址0x0000到0x07FFF 之间。
R5_0_0 (第一个内核)中的 TCMB 在地址0x80000至0x807FFF 之间存在。
4.在.map 文件中搜索您各自的 TCM 段名称、以查找 其在 TCM 内的各自存储器位置。 此信息应出现在映射文件的分配映射标题部分、例如:
5.检查 .map 文件中的内存配置标题,查看 TCM 和 OCRAM 的内存使用情况,如下所示:
以下链接器脚本可用作使用64KB TCM 的参考:
e2e.ti.com/.../8272.linker.cmd
以下是在锁步模式下使用 AM263 TCM 128KB 的配置:
1.最初将 AM263设置为锁步模式。 以下步骤是使用 CCS - gels 将 AM263设置为锁步模式。
以下步骤是使用 SBL 将 AM263设置为锁步模式。
2.现在将 TCM 大小设置为128KB,如下链接器文件所示:
现在 、在 syscfg 的 MPU 配置中将 TCMA 大小设置为64KB、将 TCMB 大小设置为64KB、如下所示:
TCMA:
TCMB:
这应将您的应用配置为使用128 KB TCM。 要验证内核的锁步模式、您可以使用此 API -
状态 = SOC_rcmIsR5FInLockStepMode (CSL_ARM_R5_cluster_Group_ID_0);
我在我的末尾也进行了同样的测试、这里是一张"Memory Allocation"选项卡的图片: