工具/软件:
TI 团队大家好、
我正在使用 Motor Control SDK 通用工程和实验(通用电机控制工程和实验用户指南(修订版 A))、并对创建的链接器符号(例如 loadStart_user_data & loadSize_user_data)有疑问 。 阅读文档 TMS320C28x 汇编语言工具 v21.6.0.LTS 用户指南(修订版 W)时、请了解以下信息:
- 8.6 链接器符号 — 8.6.1 在 C/C++应用中使用链接器符号
- 表示数据地址的链接器符号 :在 C 代码中,将变量声明为 extern 变量。 然后使用&运算符引用链接器符号的值。 由于变量位于有效的数据地址、因此我们知道数据指针可以表示该值。
在 Motor Control SDK 通用工程和实验中、有一个初始化函数“void boardInit ()“、该函数中有几个类似的函数调用:
- HAL_clearDataRAM ((void *) loadStart_user_data、(uint16_t) loadSize_user_data);
我认为这有一个问题、因为由于 缺少&运算符用法、传递到函数的 loadStart_user_data 的值为 0。 我当前应用的修复程序如下:
uint32_t sectionSize;
sectionSize = (uint32_t)&loadSize_user_data;
HAL_clearDataRAM((void *)&loadStart_user_data, (uint16_t)sectionSize);
由于将 OTP 配置为执行 DCSM 配置的仅仿真操作时、尤其有必要进行此修复。
在将建议的修复应用到 HAL_clearDataRAM 之前、当我连接 JTAG/仿真器时、加载/运行代码。 通过 CCS 进行复位((“Scripts">"Realtime Emulation“ Emulation Control"“ Control">“> Run_Realtime_ with_Reset“;如.c 注释所示)。 我会收到以下错误:
- 错误消息: Texas Instruments XDS110 USB 调试探针/C28xx_CPU1 故障读取寄存器 PC:(错误–1142 @ 0x0)器件阻止调试访问、因为其当前正在执行不可调试的代码。 选择“粗鲁重试“以禁用礼貌模式并强制执行操作。 (仿真包 20.2.0.3536)。
在修复之前、我认为由于 loadStart_user_data 缺少&运算符、因此 valeu 0 被传递到函数上。 您能解释为什么新 DCSM 代码会导致 错误消息 修复 HAL_clearDataRAM 之前? 另外,您是否同意该修复程序? 修复后、传递到函数的地址值不再为 0、如以下文章中所述: TMS320F2800132:链接器 cmd 文件中 HAL_clearDataRAM 问题或 load_start - C2000 微控制器论坛 — C2000︎ 微控制器 — TI E2E 支持论坛。
如有必要、我可以共享更多信息、例如链接器文件或生成的.map。
此外、当激活 DCSM 模块(不再仅仿真)以从闪存组 0 引导时、扇区 0:

这将生成以下汇编代码:
.sect "dcsm_otp_z1_pswdlock"
.retain
.long 0xFB7FFFFF
.long 0x7FFFFFFF ;Reserved
.sect "dcsm_otp_z1_crclock"
.retain
.long 0x4BFFFFFF
.long 0x3FFFFFFF ;Reserved
.sect "dcsm_otp_z1_jtaglock"
.retain
.long 0x9FFFFFFF
.long 0x0FFFFFFF ;Reserved
.sect "dcsm_otp_z1_gpreg"
.retain
.long 0x5AFFFFFF ;Z1OTP_BOOTPIN_CONFIG
.long 0x5AFFFFfF ;Z1OTP_GPREG2
.sect "dcsm_otp_z1_bootctrl"
.retain
.long 0xFFFFFF03 ;Z1OTP_BOOTDEF_LOW
.long 0xFFFFFFFF ;Z1OTP_BOOTDEF_HIGH
关于记录和档案管理部门、必须有什么关切? 特别是关于 HAL_clearDataRAM 指令、因为在我建议的修复之前、在仿真期间、电路板会冻结。 我想防止发送错误的 OTP 代码。
谢谢、
Martin