This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR6047:来自 cl430.exe 编译的 ELF 程序头是否会出现在输出.out 文件的开头?

Guru**** 2482105 points
Other Parts Discussed in Thread: MSP430FR6047

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1250917/msp430fr6047-can-the-elf-program-header-from-cl430-exe-compilation-appear-at-the-beginning-of-the-output-out-file

器件型号:MSP430FR6047

我想将剥离的.out 文件流式传输到引导加载程序以进行升级。 遗憾的是、详细介绍程序段的程序头表出现在.out 文件的末尾。 在链接期间是否可以转换.out 文件或以不同方式生成该文件、以便在程序数据之前移动标头、使其可以流式传输?

或者、是否有其他工具可以用于生成可流式格式? 我希望格式为二进制、例如、TI-TXT 格式的厚度是原来的3.x 倍、传输时间要长得多。 目前、我将把 TI-TXT 转换为具有相同信息的二进制形式、但我想省去自定义转换、只使用 CCS 提供的工具。

示例:请注意程序头出现在 ELF 文件偏移142,348处、而所有程序段偏移在那个前。

ElfHeader (magic=b'\x7fELF'、bitwidth=1、endianess=1、版本=1、osabi=0、 abi=0、fillettype=2、machin=0x69、version2=1、entry_address=0xb358、 OFF=142348 ,shoff=142668,flags=0,header_size=52,pH_entry_size=32, ph_num=10、sh_entry_size=40、sh_num=99、sh_string_index=98)
ELF_Program_Header (segment_type=1、 偏移= 52、 虚拟地址=0x1c00、物理地址=0x1c00、文件大小=0、存储器大小=6712、标志=6、 ALIGN = 4)
ELF_Program_Header (segment_type=1、 偏移= 52、 虚拟地址=0x4000、物理地址=0x4000、文件大小=0、存储器大小=448、标志=6、 ALIGN = 4)
ELF_Program_Header (segment_type=1、 偏移= 52、 Virtual_address=0x4400、physical_address=0x4400、file_size=0、memory_size=14452、flags=6、 对齐=2)
ELF_Program_Header (segment_type=1、 偏移= 52、 虚拟地址=0xa000、物理地址=0xa000、文件大小=2、内存大小=2、标志=4、 对齐=2)
ELF_Program_Header (segment_type=1、 偏移=56、 virtual_address=0xa002、physic_address=0xa002、file_size=0、memory_size=94、flags=6、 ALIGN = 1)
ELF_Program_Header (segment_type=1、 偏移=56、 Virtual_address=0xa402、physical_address=0xa402、file_size=19294、memory_size=19294、flags=5、 对齐=2)
ELF_Program_Header (segment_type=1、 偏移= 19352、 虚拟地址=0xFF80、物理地址=0xFF80、文件大小=16、存储器大小=16、标志=4、 ALIGN = 1)
ELF_Program_Header (segment_type=1、 偏移=19368、 virtual_address=0xFFac、physic_address=0xFFac、file_size=82、memory_size=82、flags=4、 ALIGN = 1)
ELF_Program_Header (segment_type=1、 偏移=19452、 virtual_address=0x26400、physical_address=0x26400、file_size=24509、memory_size=24509、flags=4、 对齐=2)
ELF_Program_Header (segment_type=1、 偏移=43964、 Virtual_address=0x2c3be、physical_address=0x2c3be、file_size=97338、memory_size=97338、flags=5、 对齐=2)

构建目标:"f4600_v2.out"
调用:MSP430链接器
flags:-vmspx --data_model=large -O1 - opt_for_speed=1 --use_hw_mpy=F5 --advice:hw_config=all /ti/ccs1200/ccs/ccs_base/msp430/include --define=__MSP430FR6047_--symdebug:dwarf_version=4 --c99 --printf_support=minimal /ti/ccs1200/ccs/ccs_base/msp430/lib/5xx_6xx_FRxx /ti/ccs1200/ccs/ccs_base/msp430/lib/FR59xx /ti/ccs1200/ccs/tools/compiler/ti-cgt-msp430_21.6.1.LTS/lib /ti/ccs1200/ccs/tools/compiler/ti-cgt-msp430_21.6.1.LTS/include
"C:/ti/ccs1200/ccs/tools/compiler/ti-cgt-msp430_21.6.1.LTS/bin/cl430 "-@"ccsLinker.opt"-o "f4600_v2.out"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Harvey:

    您可以按照以下指南在 CCS 中创建.hex 或.txt 映像:

    谢谢!

    此致

    约翰逊  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的帮助。 我猜,你没有读我的帖子,虽然。 在我的帖子中、我提到我已经在使用 TI-TXT 文件、现在正尝试使用二进制输出来节省传输文件的时间。 十六进制输出是二进制数的3倍以上、因为每个字节都需要两个十六进制字符和一个空格。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Harvey:

    实际上、我并不熟悉将.out 或.txt 转换为.bin、可以尝试咨询一些专家、然后返回这里。

    谢谢!

    此致

    约翰逊

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你。 我不认为 ELF 文件是可能的可悲,因为我无法控制的程序标题的位置,以进入之前的程序部分数据。 我用 python 语言编写了一个 TI-TXT 到二进制转换器、并将其编译为单个 exe、然后将其添加到我们的编译工具中。 我希望避免这种情况。 二进制格式:

    所有标头数据都是 MSB。 对于 TI-TXT 文件中的每个段:

    页眉、32位地址、32位计数、页脚  ##页眉和页脚对我来说是32位和16位的。 应有尽有。

    计数数据

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不知道 CCS 工具、但借助 gcc、我会使用 msp430-elf-objcopy。

    这可能比预期的要大得多、因为它必须在代码和中断矢量/复位区域之间填充一些内容。 hex (或 S-record)文件不存在的问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 我当时在尝试让 objcopy 正常工作。 我猜(正确)复制过程会将 ELF 文件的片段写出为读。 不过、我没有 GCC 工具链。 尝试后、它起作用了。 您可以看到、程序头文件紧跟在偏移52处的文件头之后开始。

    ElfHeader(magic=b'\x7fELF', bitwidth=1, endianess=1, version=1, osabi=255, abi=0, filetype=2, machine=0x69, version2=1, entry_address=0xb358, phoff=52, shoff=142536, flags=11, header_size=52, ph_entry_size=32, ph_num=10, sh_entry_size=40, sh_num=97, sh_string_index=96)
    Elf_Program_Header(offset=0, physical_address=0x1c00, file_size=0, memory_size=6712, align=4)
    Elf_Program_Header(offset=0, physical_address=0x4000, file_size=0, memory_size=448, align=4)
    Elf_Program_Header(offset=0, physical_address=0x4400, file_size=0, memory_size=14452, align=2)
    Elf_Program_Header(offset=372, physical_address=0xa000, file_size=2, memory_size=2, align=2)
    Elf_Program_Header(offset=0, physical_address=0xa002, file_size=0, memory_size=94, align=1)
    Elf_Program_Header(offset=374, physical_address=0xa402, file_size=19284, memory_size=19284, align=2)
    Elf_Program_Header(offset=19658, physical_address=0xff80, file_size=16, memory_size=16, align=1)
    Elf_Program_Header(offset=19674, physical_address=0xffac, file_size=82, memory_size=82, align=1)
    Elf_Program_Header(offset=19756, physical_address=0x26400, file_size=24509, memory_size=24509, align=2)
    Elf_Program_Header(offset=44266, physical_address=0x2c3be, file_size=97338, memory_size=97338, align=2)