在 Code Composer 中,您可以简单地在链接器命令文件中定义新符号:
_Addr_start = 0x5C00;
_AppLength = 0x4C000;
在内存映射和部分分配之前。这是在 TI 的引导加载程序示例中完成的。
然后,您可以在 c 代码中引用地址(作为整数),如下所示
extern uint32_t _Addr_start; // note that uint32_t is fake.
extern uint32_t _AppLength; // there is no uint32_t object allocated
printf("start = %X len= %X\r\n", (uint32_t)&_Addr_start, (uint32_t)&_AppLength);
问题在于,如果您使用“小”内存模型,后一个符号(位于 0x45C00)会发出链接器警告,因为它会尝试将其转换为 16 位指针。
"C:/lakata/hardware-platform/CommonSW/otap.c", line 78: warning #17003-D:
relocation from function "OtapGetExternal_CRC_Calc" to symbol "_AppLength"
overflowed; the 18-bit relocated address 0x3f7fc is too large to encode in
the 16-bit field (type = 'R_MSP_REL16' (161), file = "./otap.obj", offset =
0x00000002, section = ".text:OtapGetExternal_CRC_Calc")
我尝试使用显式far
指针,但代码编写器不理解关键字far
. 我试图使虚拟符号成为函数指针,以欺骗编译器认为取消引用它会......指针指向代码空间,代码空间模型是“大”,而数据空间模型是“小” .