MDK编译以后执行脚本

开发stm32 目前在国内用的最多的集成开发环境就是MDK。最近做一个stm32的IAP在线升级程序,这个IAP程序编译以后生成的bin文件我需要对它做个修改,存入我对整个APP代码部分的checksum校验。这样我就可以通过bootloader来验证我app部分代码的完整性。

这里面有个关键地方就是要对编译好的bin文件进行修改。仔细想想MDK本身编译好以后直接生成的是hex而非bin文件,那么生成的bin是通过编译后添加了一个选项生成的,如下图所示:

MDK编译以后执行脚本

圈起来的地方完整的命令如下:    C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe –bin -o ./IAP-LED/IAP-LED.bin ./IAP-LED/IAP-LED.axf

也就是编译晚以后会调用这条命令把IAP-LED.AXF  文件转换成bin文件。

于是呢我就顺着这条思路,来实现编译后对我bin文件的修改。但是这里我不再是调用一个现成的exe文件,而是换成了python脚本,测试了还果然ok。(前提是电脑上要安装包python并且添加到环境变量中)

下面就公布下我这段python代码:

import os
import sys
import struct

APP_SIZE=0XB0      #bin文件中的偏移地址
APP_CHECK=0XB4
APP_VER=0XB8

arg=sys.argv[1]    #sys.argv[1] 表示传入的第一个参数
fileName=str(arg)  #通过传入参数获取bin文件名称


f = open(fileName,'rb')     #打开文件
buf=bytearray(f.read())     #读取文件内容并转换为byteArray,原为bytes不能编辑
f.close()                   #关闭文件
fileSize=len(buf)           #获取bin文件长度

print('|***************************bin add check tool********************************|')
print('|*******************************BY Derrick************************************|')
print('--read source file success!   fileName: '+fileName+'    filesize: '+str(fileSize))


newFileName=fileName[:-4]+'-Check.bin'    #拼接出新文件名
fileChecksum=sum(buf)                     #定义checksum                 
print('--calc checksum is :'+str(fileChecksum))

 #把unsigned int型整数打包存进buf中
struct.pack_into('I',buf,APP_SIZE,fileSize)        #写入文件长度
struct.pack_into('I',buf,APP_CHECK,fileChecksum)   #写入checksum

f=open(newFileName,'wb')   #把buf内容写入新的bin文件中
f.write(buf)                
f.close()

print('--New bin file generated :'+newFileName)

 

然后我把这个这个代码保存为APPC.py名称。并把它和我的MDK工程放在同一个文件夹下面。之后就是在我的mdk设置里面添加编译后执行该脚本了:

MDK编译以后执行脚本

这样做有什么好处呢?就是每次编译完我就可以直接获得我想要的最终结果,而不再需要手动的把bin再通过手动进行修改。大大提高了效率


转载请注明转自电子创客营:MDK编译以后执行脚本! 了解我们点击这里
喜欢 (0)or分享 (0)
电子创客营
关于作者:
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址