应用场景:芯片中没有boot功能,只有应用程序。该应用程序需要在运行过程中检测flash中代码的正确性。
----正文如下----
检测代码正确性,就必须先将代码进行计算,生成一个CRC校验文件,文件格式为.bin。由于IAR没有找到直接下载.bin格式文件的功能,所以就想如何才能将该bin文件加入到代码中而不影响源代码,否则校验文件失效。
后来发现IAR可以将bin文件链接到代码中,按照上面的要求,只要将bin文件链接到一个与源代码不相关的、且我们知道的地址即可。
实现过程:
1、编译源代码使其生成bin格式文件,取名为“S.bin”
2、将S.bin文件按1k字节大小进行CRC计算,生成一个CRC校验文件,取名C.bin,生成过程忽略
3、设置IAR工程,将C.bin链接到flash末端
(a).ICF文件中flasn区域一分为二,第一个区域放置源代码,第二个区域放置C.bin
(b) option->linker->input 定义符号FLASHCRC
(c)option->linker->extra option 输入命令
--image_input=$PROJ_DIR$\Debug\Exe\C.bin,FLASHCRC,FLASHCRC_region,4
意思为将该文件定义为FLASHCRC这个符号,并指定为FLASHCRC_region段,按4字节对齐
4、编译链接后结果,校验文件链接到与源代码不相关的区域,最后通过IAR下载S.out文件
----正文结束----