Other Parts Discussed in Thread: TMS320F28388D
器件型号: TMS320F28388D
提交给 TI 支持团队、
我目前正在处理一个涉及外部闪存以存储可配置参数的工程。 为了管理这些参数,我使用#pragma DATA_SECTION指令将变量放入一个特定的命名段(例如,).TRIMSECTION,然后映射到我的.cmd链接器命令文件中的一个特定 RAM 范围。
问题: 我已经注意到、编译器/链接器不会保留在.c源文件中声明的变量序列。 相反、它似乎是根据数据类型对它们重新排序(例如,在或之前组合在一起)uint16_tfloatuint32_t。
这种重新排序会产生问题、因为我们的外部闪存映射依赖于一致的存储器偏移量。 添加新参数时、链接器会根据它们的类型将它们插入该段的中间、移动现有参数的地址、并在固件更新后导致数据不匹配。
证据: 如随附的映射文件屏幕截图所示:
-
用例 A: 现有参数(如)
gc_crank_engage_time_cont后跟battery_voltage_cal_value。 -
用例 B: 在添加
amf_start_type和后CB_selection、它们会自动放置在地址0x0001B013和0x0001B014(在其他 16 位/8 位类型之后)、从而移动后续float变量。
问题: TI ARM/C2000 工具链中是否有特定的编译器标志或链接器属性可强制链接器维护 源声明顺序 在命名段中?
约束注释: 我们知道将这些参数代入中struct会强制执行顺序;但是、由于严格的存储器限制和当前实现中涉及的开销、我们更倾向于使用链接器级解决方案、这样我们就可以在保证各个变量的序列的同时保留它们。
环境:
-
编译器: TI-CGT-C2000_22.6.1.LTS
-
IDE: Code Composer Studio [CCS]
-
器件: TMS320F28388D
感谢您的帮助。


