工具/软件:
尊敬的专家
该主题是对该主题的延伸讨论。
J721S2XSOMXEVM:如何生成 freertos_mcu1_0_release.xer5f.map 的.cinit?
我不确定这是一个正确的问题、因为我不了解编译器链接器用例。
据我所知、编译器 .cinit 为每个“静态“初始化变量创建记录、其中包含“变量的位置“和“初始值“ 、然后链接器将这些记录收集到最终 .cinit 段中
例如、我们在代码中定义了一些常量“static variable“、并尝试使用“fardata.appdataconst"部分“部分进行对齐
我们是否应该期望 app_data_const 在每次编译时在代码编译器和链接后具有相同的存储器加载地址?
器件代码如下所示。
#include "app_data_const.h"
#define APP_DATA_CONST __attribute__((section(".fardata.appdataconst")))
APP_DATA_CONST volatile boolean_T KACC_ACCAdvCornrDecFcn_flg = 1U;
APP_DATA_CONST volatile real32_T KACC_ACCAdvCornrDecThrld_mps2 = 1.5F;
APP_DATA_CONST volatile real32_T KACC_ACCAdvCornrMeetLmtOfst_mps = 1.5F;
APP_DATA_CONST volatile real32_T KACC_ACCAdvCornrMeetLmtThrld_mps = 0.0F;
APP_DATA_CONST volatile real32_T KACC_ACCAdvCornrRadFlt_s = 0.3F;
APP_DATA_CONST volatile boolean_T KACC_ACCCalFllwDistOfst_flg = 0U;
APP_DATA_CONST volatile boolean_T KACC_ACCCaliNoLmtSW_flg = 0U;
APP_DATA_CONST volatile real32_T KACC_ACCClrnceAlrtThld_m = 3.0F;
APP_DATA_CONST volatile boolean_T KACC_ACCClrnceAlrtUseCust_flg = 0U;
APP_DATA_CONST volatile boolean_T KACC_ACCCstUseVehInfo_flg = 0U;
APP_DATA_CONST volatile real32_T KACC_ACCCtrlEffrtTrns_s = 0.1F;
APP_DATA_CONST volatile real32_T KACC_ACCDecAlrtOfst_mps2 = -0.1F;
APP_DATA_CONST volatile real32_T KACC_ACCDecPerfrmAlrThrld_mps2 = -2.0F;
例如、我们知道 fardata.appdataconst.load 地址 = a08bc6a8
.cinit 0 a08a5300 00026300
a08a5300 00000008 (__TI_handler_table)
a08a5308 00000030 (__TI_cinit_table)
a08a5338 00000008 (.cinit..bss.load) [load image, compression = zero_init]
a08a5340 00017356 (.cinit..data.load) [load image]
a08bc696 00000002 --HOLE-- [fill = 00000000]
a08bc698 00000008 (.cinit..bss.devgroup.load) [load image, compression = zero_init]
a08bc6a0 00000008 (.cinit..tracebuf.load) [load image, compression = zero_init]
a08bc6a8 0000ee58 (.cinit..fardata.appdataconst.load) [load image]
a08cb500 00000008 (.cinit..bss.appdatavar.load) [load image, compression = zero_init]
a08cb508 000000f8 --HOLE-- [fill = 00000000]
然后是 Link Generated、
.fardata.appdataconst:load addr=a08bc6a8
LINKER GENERATED COPY TABLES __TI_cinit_table @ a08a5308 records: 6, size/record: 8, table size: 48 .bss: load addr=a08a5338, load size=00000008 bytes, run addr=a0728000, run size=0013ad26 bytes, compression=zero_init .data: load addr=a08a5340, load size=00017356 bytes, run addr=a0880700, run size=00017380 bytes, compression=copy .bss.devgroup: load addr=a08bc698, load size=00000008 bytes, run addr=a0726c30, run size=000013c5 bytes, compression=zero_init .tracebuf: load addr=a08bc6a0, load size=00000008 bytes, run addr=a0100400, run size=00080004 bytes, compression=zero_init .fardata.appdataconst: load addr=a08bc6a8, load size=0000ee58 bytes, run addr=a0fa0000, run size=0000ee50 bytes, compression=copy .bss.appdatavar: load addr=a08cb500, load size=00000008 bytes, run addr=a0f90000, run size=00009be4 bytes, compression=zero_init
我们是否可以让“fardata.appdataconst"部分“部分始终保留相同的地址,例如 a08bc6a8 ?
由于客户反馈、此地址有时可能会针对每个代码构建而更改。
是否可以修复此地址位置?
非常感谢
Gibbs
