工具/软件:Code Composer Studio
我的情况涉及从引导加载程序过渡到应用程序代码。 我使用的是TMS320F2.8068万 MCU。 我的引导加载程序驻留在闪存的扇区A中。 如果它没有检测到需要将代码下载到闪存中,它应该转换到B到H区中的应用程序代码。我正在使用链接程序命令文件来确保代码按此方式分隔。 我的引导加载程序和应用程序代码都驻留在一个CCS项目中。
我注意到,当我更改应用程序代码时,它可以使用我的引导加载程序正常加载 (这意味着应用程序代码已正确加载),但在重置后不会从引导加载程序中过渡。 使用Code Composer和JTAG端口,我检查了拆卸。 我对我的代码的一个版本和另一个版本执行了此操作。 在每个版本中,我从未修改过引导加载程序代码。 相反, 我只修改了应用程序代码。 下面是拆卸的两个屏幕截图(每个屏幕截图来自不同的版本)。
我的"main()"函数位于A区。这调用我的bootloader。 "MAIN_APL()"是应用程序代码开头的函数(也位于B到H的扇区中)。 如您所见,在地址0x3F4268,该地址的内容会发生变化,即使它们都是对"main_apL"的调用。 在 第一个中,0x3F4268的内容是767E2C61,另一个是767E2C3D。 这是一个问题,因为bootloader只将扇区B写入H。因此,代码 可能会正确加载,但从扇区A到应用程序的调用不同。 这将阻止bootloader和应用程序代码之间的成功转换。
我的问题是:如何从bootloader部分转到"main_apl",同时在不同的编译之间保持扇区的内容不变? 我当时在考虑将"main_apL():"替换为"ASM("LCR 0x3D8000)",但如何从链接程序命令文件中确保该函数始终保持在0x3D8000?
谢谢。
Syed