主题中讨论的其他器件:TMDSCNCD28379D
你(们)好
我正在尝试让 printf 使用 C I/O 向 CCS 发送调试消息(在本例中为 put())。
开箱即用也可以正常工作、但为了避免它保留我的两个硬件断点之一、我希望按照 使用 printf 的提示将其移动到 ram。
如果我做一个简单的
`.text:CIO:{ rts*.lib (.text)}> RAMLS`
它在调试中仍然可以正常工作、但该程序只能从调试器运行、因为它依靠调试器用 CIO 代码填充分配的 RAM 部分。
因此我想将其添加到 ti.ramfuns 段中,以便通过调用 device_init()将代码复制到 ram 中。
但是、我在控制台中没有更多的输出。
我不知道为什么会这样。
-我已经验证了代码实际上是复制到 RAM 中的。
我也将主程序的函数放入了 ramfuncs 中,只是为了验证我是否可以在那里执行代码。
-我可以在调试器的内存视图中看到值被写入到_CIOBUF_
-我已经在映射文件中验证了 C$$IO$$和 C$EXIT 确实被放置在 RAM 中。
我随附的演示项目、请注意 CIO_inRAM.cmd 文件中的两条注释行
在打包版本中、printf 不起作用、其外观如下所示:
// Make sure the CIO relevant part is put into memory, to not block one of the two HW breakpoints. //.text:cio : { rts*.lib<trgmsg.c.obj exit.c.obj>(.text) } > RAMLS //.TI.ramfunc : {} .TI.ramfunc : { -l rts*.lib<trgmsg.c.obj exit.c.obj>(.text) } LOAD = FLASH, RUN = RAMLS, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8)
如果您将其更改为
// Make sure the CIO relevant part is put into memory, to not block one of the two HW breakpoints. .text:cio : { rts*.lib<trgmsg.c.obj exit.c.obj>(.text) } > RAMLS .TI.ramfunc : {} //.TI.ramfunc : { -l rts*.lib<trgmsg.c.obj exit.c.obj>(.text) } LOAD = FLASH, RUN = RAMLS, LOAD_START(RamfuncsLoadStart), LOAD_SIZE(RamfuncsLoadSize), LOAD_END(RamfuncsLoadEnd), RUN_START(RamfuncsRunStart), RUN_SIZE(RamfuncsRunSize), RUN_END(RamfuncsRunEnd), ALIGN(8)
它停止工作、具有上述限制。
我正在使用 TMDSCNCD28379D 控制板套件、并尝试使用 XDS110和 XDS200。 调试器。
我没有尝试过内置 XDS110V2、因为在最终必须运行的定制板上既不存在这种情况、也不存在可用的 UART。
Code Composer Studio 版本:12.2.0.00009