zoukankan      html  css  js  c++  java
  • 痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序


      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题

      痞子衡之前写了一篇 《在IAR开发环境下为工程开启CRC完整性校验功能的方法》,有同事在使用CRC校验功能时遇到了关于.out/.bin文件先后生成顺序的问题。我们在线调试IAR工程时,调试器下载的其实是可执行文件(.out),CRC校验功能在.out文件里没有任何歧义,但是更多时候我们会使用镜像文件(.bin)来下载量产,有时候CRC校验功能在.bin文件里却没有正常开启,这是怎么回事?痞子衡为你解惑:

    一、使用IAR生成镜像文件

      抛开CRC完整性校验功能,以一个正常嵌入式工程来说,比如 SDK_2.8.2_FRDM-K64Foardsfrdmk64fdemo_appshello_worldiar,这个工程正常编译链接后一定会生成.out可执行文件(其实就是标准.elf文件)。如果我们希望同时能生成一个.bin镜像文件,需要借助工程选项Output Converter:

      在Output Converter可以指定生成镜像文件格式,常见的镜像格式(.bin/hex/.s19)都支持。如果你了解IAR你应该知道这个功能其实是调用 IAR SystemsEmbedded Workbench 8.50.6arminielftool.exe 工具实现的:

    ielftool --bin sourceFile.out destinationFile.bin
    ielftool --ihex sourceFile.out destinationFile.hex
    ielftool --srec sourceFile.out destinationFile.s19
    

      我们编译工程看一下编译信息,从日志输出顺序来看,首先生成了hello_world.out(蓝色框标出),然后调用了ielftool工具执行转换命令(绿色框标出),最后生成了hello_world.bin(红色框标出):

    二、比较两种CRC校验开启方法

      《在IAR开发环境下为工程开启CRC完整性校验功能的方法》 一文中介绍了两种开启CRC完整性校验功能的方法,我们从生成.out/.bin文件顺序的角度来分析一次结果:

    2.1 基于Checksum功能

      分析开启Checksum功能的工程编译结果,可以发现日志输出顺序如下:

    1. 调用ielftool实现添加CRC校验功能(蓝色框)
    2. 生成了包含正确CRC校验值的.out文件(绿色框)
    3. 调用ielftool实现文件格式转换(红色框)
    4. 生成了包含正确CRC校验值的.bin文件(黄色框)
    

      这种情况下,.out文件和.bin文件虽然生成先后顺序不同,但都包含了正确的CRC校验值,因此在CRC验证使用上是一致的。

    2.2 基于Post-build功能

      再来分析开启Post-build功能的工程编译结果,可以发现日志输出顺序如下:

    1. 生成了默认CRC校验值的.out文件(蓝色框)
    2. 调用ielftool实现文件格式转换(绿色框)
    3. 生成了包含默认CRC校验值的.bin文件(红色框)
    4. 调用ielftool实现添加CRC校验功能(黄色框)
    5. 生成了包含正确CRC校验值的.out文件(紫色框)
    

      这种情况下,.out文件和.bin文件生成先后顺序不同,但是.bin里只是默认的CRC校验值(全0),并不是期望的正确CRC校验值,因此无法用于后面的CRC验证,这也是我同事遇到的问题。

    三、解决Post-build下.bin/.out一致性问题

      现在让我们来解决我同事遇到的Post-build下.bin和.out里CRC校验值不一致问题,显然无法直接使用工程选项Output Converter功能了,因为它在IAR里执行顺序没法改变。

      我们需要额外写一个如下post-build.bat脚本,在bat脚本里实现CRC校验功能添加以及文件格式转换,这样我们就能控制文件生成顺序。

    set OUT=%1.out
    set BIN=%1.bin
    
    ielftool --fill="0xFF;__checksum_begin-__checksum_end" --checksum="__checksum:4,crc32:p,0xffffffff;__checksum_begin-__checksum_end" --verbose %OUT% %OUT%
    
    ielftool --bin --verbose %OUT% %BIN%
    

      将post-build.bat脚本放到工程文件同路径下,并重新使用Post-build来执行这个脚本,传入脚本的参数是$TARGET_BPATH$,即不含工程目标文件后缀的全路径,再次编译工程后就可以得到包含正确CRC校验值的.bin文件了,问题解决,大功告成!

    备注:post-build.bat脚本正常执行的前提是,ielftool工具的路径需要在系统环境变量里。

      至此,开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序问题痞子衡便介绍完毕了,掌声在哪里~~~

    欢迎订阅

    文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

    微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

  • 相关阅读:
    路径变量@PathVariable/请求参数@RequestParam的绑定以及@RequestBody
    JSR303后端校验详细笔记
    创建ssm项目步骤
    利用 R 绘制拟合曲线
    在 Linux 中将 Caps 根据是否为修饰键分别映射到 esc 和 Ctrl
    Master Transcription Factors and Mediator Establish Super-Enhancers at Key Cell Identity Genes
    Genomic Evidence for Complex Domestication History of the Cultivated Tomato in Latin America
    Variation Revealed by SNP Genotyping and Morphology Provides Insight into the Origin of the Tomato
    The genetic, developmental, and molecular bases of fruit size and shape variation in tomato
    微信支付jsapi
  • 原文地址:https://www.cnblogs.com/henjay724/p/14043987.html
Copyright © 2011-2022 走看看