跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. 开发环境搭建
  4. 如何对编译生成的 Hex,Srec,S19 文件进行补全

如何对编译生成的 Hex,Srec,S19 文件进行补全

已定时 已固定 已锁定 已移动 开发环境搭建
17 帖子 6 发布者 1.6k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • DigaD 离线
    DigaD 离线
    Diga
    写于 最后由 编辑
    #1

    背景

    部分工程编译出来的可执行文件 (.hex, .srec) 可能存在地址不连续,分段等现象,这是合理的,符合 Hex 协议或 Srec 协议,协议内容可参考 Hex,Srec 文件格式。
    但是有些上位机可能无法正确的读取这些文件内的数据,所以需要对数据进行填充,默认填充值为 0xFF
    此外部分云途的 MCU 最小编程单元是 8字节,如果 boot 相关的上位机不进行 8字节填充对齐,可能会导致最后一个word 没编进去。

    使用说明

    将附件中的压缩包解压,在 Power Shell 中运行,运行结果如下图
    d209bcbe-b919-4b81-97b4-2ed468e81891-image.png

    参数解释

    输入 -h 可查看帮助,可达到参数内容

    App

    需要进行补全对齐的文件,这个必须配置

    -s 或者 --start

    应用程序的起始地址,如果不专门进行指定,脚本会读取程序的起始地址,可不配置

    -e 或者 --end

    应用程序的结束地址,如果不专门进行指定,脚本会读取程序的结束地址,可不配置

    -a 或者 --align

    应用程序的对齐方式,脚本会根据对齐方式,修改起始地址域结束地址来确保对齐。可不配置,默认 4 字节对齐。
    例如设置对齐方式为 8字节,可在命令行中输入

    .\outputPadding.exe .\random.srec -a 8
    

    如果检测出程序的起始地址为 0x4004,脚本会校准起始地址为 0x4000
    如果检测出程序的结束地址为 0x8004,脚本会校准结束地址为 0x8008
    如果用户指定了生成程序的起始地址与结束地址,则该参数无效

    -l 或者 --lineLength

    生产的 Hex 或 Srec 一行所包含的有效数据字节个数(不包含地址字段与校验字段),可不配置,默认一行包含 32 字节

    -o 或者 --output

    输出的文件,可不配置,默认生成 output.hex 或者 output.srec

    附件

    压缩包中包含 outputPadding.exe , random.srec, test.hex
    random.srec, test.hex 是两个测试文件,用户可在里面自由删除,并测试是否补全
    test_padding.zip

    z123456111Z 1 条回复 最后回复
    2
    • DigaD Diga 在 中 引用了 这个主题
    • 风清扬风 离线
      风清扬风 离线
      风清扬
      写于 最后由 编辑
      #2

      感谢大神,我验证了一下,这个脚本简捷好用

      1 条回复 最后回复
      0
      • ganyongchaoG 离线
        ganyongchaoG 离线
        ganyongchao YunTu
        写于 最后由 编辑
        #3

        Diga Frankie 建议在YT LINK的生态里面可以配置对齐

        FrankieF 1 条回复 最后回复
        0
        • FrankieF 离线
          FrankieF 离线
          Frankie YunTu
          在 回复了 ganyongchao 最后由 Frankie 编辑
          #4

          ganyongchao 可以的,后续会写一篇文字介绍如何解决这类问题。

          1 条回复 最后回复
          0
          • 风清扬风 离线
            风清扬风 离线
            风清扬
            写于 最后由 编辑
            #5

            有个问题,处理后的srec会把最后面的S7的数据给删除,请问下是啥问题?
            image.png

            ganyongchaoG 1 条回复 最后回复
            0
            • ganyongchaoG 离线
              ganyongchaoG 离线
              ganyongchao YunTu
              在 回复了 风清扬 最后由 编辑
              #6

              风清扬 s19/srec文件主要是处理s1、s2、s3的数据,其他数据不需要烧录进memory。fbl方案中加载srec文件也是解析提取s1、s2、s3对应的数据编程到flash。

              fe8c3fa0-7551-446c-b7ad-69715ef3587b-image.png

              风清扬风 1 条回复 最后回复
              0
              • 风清扬风 离线
                风清扬风 离线
                风清扬
                在 回复了 ganyongchao 最后由 编辑
                #7

                ganyongchao 我的srec文件是要作为app的升级文件,我的上位机识别到这个srec文件没有S7数据会报错,因为上位机不知道升级的flash数据什么时候结束

                ganyongchaoG 1 条回复 最后回复
                0
                • ganyongchaoG 离线
                  ganyongchaoG 离线
                  ganyongchao YunTu
                  在 回复了 风清扬 最后由 编辑
                  #8

                  风清扬 Diga copy一下S1/S2/S3以外的Line呗

                  风清扬风 1 条回复 最后回复
                  0
                  • 风清扬风 离线
                    风清扬风 离线
                    风清扬
                    在 回复了 ganyongchao 最后由 编辑
                    #9

                    ganyongchao 正解

                    1 条回复 最后回复
                    0
                    • DigaD 离线
                      DigaD 离线
                      Diga
                      写于 最后由 编辑
                      #10

                      更新 Hex 03 段与 01 段拷贝
                      更新 Srec S0,S7,S8,S9 段拷贝
                      test_padding.zip

                      风清扬风 1 条回复 最后回复
                      0
                      • 风清扬风 离线
                        风清扬风 离线
                        风清扬
                        在 回复了 Diga 最后由 编辑
                        #11

                        Diga 感谢大佬

                        1 条回复 最后回复
                        0
                        • DerrickD Derrick 被引用 于这个主题
                        • DerrickD Derrick 被引用 于这个主题
                        • z123456111Z 离线
                          z123456111Z 离线
                          z123456111
                          回复了Diga 最后由 编辑
                          #12

                          Diga 在 如何对编译生成的 Hex,Srec,S19 文件进行补全 中说:

                          背景

                          部分工程编译出来的可执行文件 (.hex, .srec) 可能存在地址不连续,分段等现象,这是合理的,符合 Hex 协议或 Srec 协议,协议内容可参考 Hex,Srec 文件格式。
                          但是有些上位机可能无法正确的读取这些文件内的数据,所以需要对数据进行填充,默认填充值为 0xFF
                          此外部分云途的 MCU 最小编程单元是 8字节,如果 boot 相关的上位机不进行 8字节填充对齐,可能会导致最后一个word 没编进去。

                          使用说明

                          将附件中的压缩包解压,在 Power Shell 中运行,运行结果如下图
                          d209bcbe-b919-4b81-97b4-2ed468e81891-image.png

                          参数解释

                          输入 -h 可查看帮助,可达到参数内容

                          App

                          需要进行补全对齐的文件,这个必须配置

                          -s 或者 --start

                          应用程序的起始地址,如果不专门进行指定,脚本会读取程序的起始地址,可不配置

                          -e 或者 --end

                          应用程序的结束地址,如果不专门进行指定,脚本会读取程序的结束地址,可不配置

                          -a 或者 --align

                          应用程序的对齐方式,脚本会根据对齐方式,修改起始地址域结束地址来确保对齐。可不配置,默认 4 字节对齐。
                          例如设置对齐方式为 8字节,可在命令行中输入

                          .\outputPadding.exe .\random.srec -a 8
                          

                          如果检测出程序的起始地址为 0x4004,脚本会校准起始地址为 0x4000
                          如果检测出程序的结束地址为 0x8004,脚本会校准结束地址为 0x8008
                          如果用户指定了生成程序的起始地址与结束地址,则该参数无效

                          -l 或者 --lineLength

                          生产的 Hex 或 Srec 一行所包含的有效数据字节个数(不包含地址字段与校验字段),可不配置,默认一行包含 32 字节

                          -o 或者 --output

                          输出的文件,可不配置,默认生成 output.hex 或者 output.srec

                          附件

                          压缩包中包含 outputPadding.exe , random.srec, test.hex
                          random.srec, test.hex 是两个测试文件,用户可在里面自由删除,并测试是否补全
                          test_padding.zip

                          demo中的hex能正常不全,我这个却是报错了,请问是什么情况
                          123456789.png

                          1 条回复 最后回复
                          0
                          • DigaD 离线
                            DigaD 离线
                            Diga
                            编写于 最后由 编辑
                            #13

                            Hex 方便发一下吗

                            z123456111Z 1 条回复 最后回复
                            0
                            • z123456111Z 离线
                              z123456111Z 离线
                              z123456111
                              回复了Diga 最后由 编辑
                              #14

                              Diga 在 如何对编译生成的 Hex,Srec,S19 文件进行补全 中说:

                              Hex 方便发一下吗

                              是这个
                              uds_can_bootloader.hex

                              1 条回复 最后回复
                              0
                              • DigaD 离线
                                DigaD 离线
                                Diga
                                编写于 最后由 编辑
                                #15

                                你这里面怎么有 RAM 内容?剔掉再转
                                image.png

                                z123456111Z 1 条回复 最后回复
                                0
                                • limanjiangL 离线
                                  limanjiangL 离线
                                  limanjiang YunTu
                                  编写于 最后由 编辑
                                  #16

                                  KEIL 生成的hex RAM 中有数据,可以参考这个帖子
                                  https://forum.ytmicro.com/topic/607/b1md-mcal-dio例程生成的hex文件为什么有0x1fff8400地址的信息/2?_=1753772506639

                                  1 条回复 最后回复
                                  0
                                  • z123456111Z 离线
                                    z123456111Z 离线
                                    z123456111
                                    回复了Diga 最后由 编辑
                                    #17

                                    Diga 在 如何对编译生成的 Hex,Srec,S19 文件进行补全 中说:

                                    你这里面怎么有 RAM 内容?剔掉再转
                                    image.png

                                    啊?可是我这个是从官方的demo直接生成的hex
                                    4620a45e-e192-48a6-83a0-21388d64d0ab-image.png
                                    8dc0dc92-5333-4967-be7d-74c3e91cafe1-image.png
                                    cfd7dcea-d1f2-4c08-95d0-4a63514b98e6-image.png

                                    1 条回复 最后回复
                                    0

                                  • 云途开发生态介绍

                                    快速上手云途开发生态

                                  • 云途论坛规则/Yuntu Forum Rules

                                    发帖前请查看

                                  • YT CONFIG TOOL调查问卷

                                    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

                                  • can
                                    20
                                    demo
                                    20
                                    uds
                                    13
                                    lin stack
                                    11
                                    md14
                                    6
                                    fbl
                                    5
                                    yt-link
                                    5
                                    adc模块
                                    4
                                    Online Users
                                    • 登录

                                    • 登录或注册以进行搜索。
                                    • 第一个帖子
                                      最后一个帖子
                                    0
                                    • 版块
                                    • 最新
                                    • 标签
                                    • 热门