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

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

一、使用IAR生成镜像文件

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

  在Output Converter可以指定生成镜像文件格式,常见的镜像格式(.bin/hex/.s19)都支持。如果你了解IAR你应该知道这个功能其实是调用 \IAR Systems\Embedded Workbench 8.50.6\arm\bin\ielftool.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主页知乎主页微信公众号 平台上。

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

痞子衡嵌入式:探析开启CRC完整性校验的IAR工程生成.out和.bin文件先后顺序的更多相关文章

  1. 痞子衡嵌入式:在IAR开发环境下为工程开启CRC完整性校验功能的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在IAR开发环境下为工程开启CRC完整性校验功能的方法. CRC校验在嵌入式领域里的应用非常广,比如在通信领域,CRC检验值可以作为数据 ...

  2. 痞子衡嵌入式:一次利用IAR自带CRC完整性校验功能的实践(为KBOOT加BCA)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是利用IAR自带CRC完整性校验功能的一次实践(为KBOOT加BCA). 痞子衡之前写过两篇关于IAR中自带CRC校验功能的文章 < ...

  3. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M4 L-MEM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M4内核的L-MEM ECC功能. 本篇是 <简析i.MXRT1170 Cortex-M ...

  4. 痞子衡嵌入式:简析i.MXRT1170 Cortex-M7 FlexRAM ECC功能特点、开启步骤、性能影响

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7内核的FlexRAM ECC功能. ECC是"Error Correcting ...

  5. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道. ECC 是 "Error Correc ...

  6. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(8)- 从Raw NAND启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Raw NAND启动. 前面铺垫了七篇启动系列文章,终于该讲具体Boot Device了,我们知道i. ...

  7. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南

    NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...

  8. 痞子衡嵌入式:飞思卡尔Kinetis系列MCU启动那些事(9)- KBOOT特性(IntegrityCheck)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔Kinetis系列MCU的KBOOT之完整性检测(Integrity Check)特性. Application完整性检测是非常 ...

  9. 痞子衡嵌入式:揭秘i.MXRTxxx系列上串行NOR Flash双程序可交替启动设计

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT500/600上串行NOR Flash双程序可交替启动设计. 在上一篇文章 <i.MXRT1170上串行NOR Fla ...

随机推荐

  1. 【总结】vertica数据库

    1.简介 Vertica是一款基于列式存储架构的数据库,可以支持存放多至PB级别的结构化数据 2.列式存储 行式存储就是以行为单位进行存储,再配合B+树作为索引,就能快速通过主键找到相应的行数据.即大 ...

  2. python pickle 模块的使用详解

    用于序列化的两个模块 json:用于字符串和Python数据类型间进行转换 pickle: 用于python特有的类型和python的数据类型间进行转换 json提供四个功能:dumps,dump,l ...

  3. RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation

    问题 在用pytorch跑生成对抗网络的时候,出现错误Runtime Error: one of the variables needed for gradient computation has b ...

  4. [Luogu P2014]选课 (树形DP)

    题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法. 首先,观察 ...

  5. ETCD核心机制解析

    ETCD整体机制 etcd 是一个分布式的.可靠的 key-value 存储系统,它适用于存储分布式系统中的关键数据. etcd 集群中多个节点之间通过Raft算法完成分布式一致性协同,算法会选举出一 ...

  6. 2018-12-5 及 codeforces round 525v2

    突然发现五天没记录了,这五天学习完全没有按着正常规划进行,先罗列一下吧. 机器学习视频第一周的全部看完了. 算法导论看了几页. 参加了一次CF.rating只加了20,看来提高实力才是最关键的. C+ ...

  7. CF716D Complete The Graph

    图论+构造 首先可以发现如果去除了可以改变权值的边,$s$到$t$的最短路若小于$l$,那么一定不行 若等于则直接将可改边权的边改为inf,输出即可 那么现在原图中的最短路是大于$l$的 因为每一条边 ...

  8. Jmeter(二十六) - 从入门到精通 - 搭建开源论坛JForum(详解教程)

    1.简介 今天这篇文章主要是给大家讲解一下,如何部署测试环境,这里宏哥部署一个开源测论坛,后边的文章中会用到这个论坛,并且也看到童鞋们在群里讨论如何在开发将测试包发给你以后,你如何快速地部署测试环境. ...

  9. Qt基础之菜单栏

    本篇介绍Qt菜单栏相关操作,分为三部分:1.菜单栏相关的类介绍:2.系统菜单的生成和响应:3.弹出菜单的生成和响应:菜单栏通常只有以QMainWindow为基类的程序中才用到,以QWidget为基类的 ...

  10. SQL:获取每个key下最新创建的记录

    今天遇到了一个好玩的问题 问题: 有一个含有key和createdTime字段的表,表里存在很多不同的key值,每个key值下有很多记录. 我想要查出每个key下面cratedTime最大的记录,即每 ...