TASKING TriCore工程链接后可以同时输出ELF和Intel HEX,HEX常用于烧录或生产下载。HEX地址来自链接器已经确定的Section位置,如果地址范围与预期不同,应先核对LSL和Map文件,再检查HEX输出格式。
一、TASKING怎么生成HEX文件
TASKING可以直接生成一个Intel HEX,也可以按LSL中的ROM memory拆分输出。普通工程可先使用单HEX,分区烧录时再启用Chip Output。
1、开启Intel HEX输出
①选中工程,进入【Project】→【Properties】。
②打开【C/C++Build】→【Settings】。
③进入【Linker】→【Output Format】。
④勾选【Generate Intel Hex format file】。
⑤在【Size of addresses】中设置地址长度,AURIX工程可检查是否使用【4】。
⑥按烧录要求决定是否启用【Emit start address record】。
⑦保存设置并执行【Rebuild Project】。
⑧在输出目录中检查【.hex】文件。
2、按ROM区域分别生成HEX
①进入【Linker】→【Output Format】。
②开启【Generate Intel Hex format file】。
③勾选【Create file for each memory chip】。
④重新Build工程。
⑤打开当前【.lsl】,确认对应memory为【type=rom】。
⑥核对输出文件对应的PFLASH或其他ROM区域。
二、TASKING生成HEX后地址范围不正确如何调整
HEX地址异常时,先看Map里的Section是否已经放错。Map也错误时先查链接布局;Map正确再查地址宽度和输出方式。
1、检查Map和LSL中的地址
①重新Build并打开【.map】文件。
②找到代码和初始化数据对应的Section。
③查看【Space addr】和所在Memory。
④确认代码是否进入【pflash0】【pflash1】等目标区域。
⑤地址不对时打开工程【.lsl】。
⑥找到对应【section_layout】和group。
⑦检查【run_addr】是否指向正确Flash memory。
⑧修改后重新链接并核对Map。
AURIX的PFLASH可能存在cached和not_cached映射,同一物理Flash可对应不同地址。LSL选错mapping时,HEX地址也会变化。
2、检查地址宽度和应用起始位置
①进入【Linker】→【Output Format】。
②检查【Size of addresses】。
③Intel HEX可使用【1】【2】【4】字节地址长度。
④工程使用32位地址时,检查是否设置为【4】。
⑤带Bootloader时,确认LSL中的应用起始位置避开Bootloader区域。
⑥需要预留标定区或升级区时,在LSL中限制Section范围。
⑦完整Rebuild后重新生成HEX。
地址长度只影响HEX记录的地址表达,不会移动Section。程序需要换到另一段Flash时,应修改LSL,不要手工改HEX。
三、调整后怎么确认HEX地址正确
修改LSL和输出参数后,可以把Map、HEX解析结果和目标Flash范围对照。Intel HEX会用扩展地址记录表示高位地址,不要只看第一行判断起始位置。
1、对照Map和HEX范围
①从Map记录第一个Flash Section地址。
②记录主要代码区结束地址。
③用烧录工具打开新生成的HEX。
④查看工具解析后的起始和结束地址。
⑤确认主要代码段与Map一致。
⑥检查Bootloader预留区没有被覆盖。
2、烧录后检查目标Flash
①使用调整后的HEX执行下载。
②读取目标Flash中的应用起始区域。
③对照Map中的入口和关键Section地址。
④确认程序写入规划的Flash范围。
⑤重新上电验证启动。
⑥地址正确但仍无法运行时,再检查启动入口和Bootloader跳转。
总结
TASKING生成HEX时,文件地址取自链接阶段的Section定位,LSL决定程序落在哪段Flash。地址范围异常时,应先用Map确认链接结果,再检查memory mapping、run_addr、地址宽度和Chip Output设置,避免直接修改HEX导致镜像与ELF不一致。如需进一步了解TASKING HEX文件生成、LSL地址布局与烧录范围异常排查方法,欢迎联系咨询。