大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家分享的是开启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. 云计算管理平台之OpenStack认证服务Keystone

    一.keystone简介 keystone是openstack中的核心服务,它主要作用是实现用户认证和授权以及服务目录:所谓服务目录指所有可用服务的信息库,包含所有可用服务及其API endport路 ...

  2. 码农会锁,synchronized 对象头结构(mark-word、Klass Pointer)、指针压缩、锁竞争,源码解毒、深度分析!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 感觉什么都不会,从哪开始呀! 这是最近我总能被问到的问题,也确实是.一个初入编程职场 ...

  3. 二叉树、平衡二叉树、B-Tree、B+Tree 说明

    背景 一般说MySQL的索引,都清楚其索引主要以B+树为主,此外还有Hash.RTree.FullText.本文简要说明一下MySQL的B+Tree索引,以及和其相关的二叉树.平衡二叉树.B-Tree ...

  4. Docker学习笔记之--.Net Core应用容器通过网桥连接Redis容器(环境:centos7)

    上节演示通过应用容器连接sql server容器,连接:Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7) 本节演示安装 redis容器,通过网桥连接 先决 ...

  5. pycharm新建项目时选择virtualenv的说明

    虚拟环境及venv和virtualenv介绍:https://www.cnblogs.com/mind18/p/13877170.html pip介绍:https://www.cnblogs.com/ ...

  6. Linux下开发环境的搭建(For C++ OIer)

    说句实话,对于OIer来说,Linux真的是个很好的开发平台. 这里既没有游戏的喧嚣,也没有广告的打扰,gcc/g++早已预装,一切已为你准备好......(???)即使对于日常使用,也绰绰有余. 如 ...

  7. abp(net core)+easyui+efcore实现仓储管理系统——出库管理之五(五十四)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...

  8. 服务器性能监控神器nmon使用介绍

    介绍 Nmon (Nigel's Monitor)是由IBM 提供.免费监控 AIX 系统与 Linux 系统资源的工具.该工具可将服务器系统资源耗用情况收集起来并输出一个特定的文件,并可利用 exc ...

  9. ajax 加载数据前的刷新动画

    $(document).ready(function(){     $.ajax({        type:"get",        cache:false,        u ...

  10. 1.流程控制--if

    流程控制--if -*- coding:utf-8 -*- #定义字符编码 1.判断条件if age = input("输入年龄:") #将交互式输入内容赋值给age,默认内容为字 ...