有时需要将一些二进制文件链接到项目中,怎么办呢?IAR提供强大的链接功能.下面简单介绍一下如何把一个二进制的文件"ZROM_Data.bin"编译链接到代码中. 首先要用winhex创建二个只有4字节文件的二进制文件.为什么是4字节呢?因为ARM是4字节对齐的,所以创建4字节的文件最合适又省空间的.将这两个文件分别命名为"ZROM_BEGIN","ZROM_END.BIN".我将用这两个文件来辅助定位和确定"ZROM_Data.bin"的位置和文件大小. 然后找开IAR项目的OPTION对话框,定位到Linker->Input标签,如下图所示.输入 ZROM_AAAA ZROM_DATA ZROM_ZZZZ
名字可以随意,这三个名字表示后面将要链接到项目的3个文件.然后定位到Linker->Extra options选中"use command line options",在文本框输入以下命令(命令格式请按F1查看IAR帮助文件): --image_input=$PROJ_DIR$\ZROM_BEGIN.BIN,ZROM_AAAA,ROM_region,4 --image_input=$PROJ_DIR$\ZROM_Data.Bin,ZROM_DATA,ROM_region,4 --image_input=$PROJ_DIR$\ZROM_END.BIN,ZROM_ZZZZ,ROM_region,4
最后,在Linker->list标签中选中Generate linker map file,让链接器生成map文件,以确认数据 是否正确链接目标代码中.注意,在输入上述命令时,请不要留空格,行尾也不能留(图中红圈部分),否则编译不通过.
接下来查看二进制代码是否链接到目标文件中.打开map文件,查找"ZROM_AAAA".如下图所示,三个二进制文件已经成功被链接目标代码.
难道就这么完了吗?没有!从上图可以得知,ZROM_AAAA的首地址为0x080000c4,ZROM_DATA的首地址为0x080000c8,ZROM_ZZZZ的首地址0x0802313c.但是随着代码的增减,每次编译这些地址值将会发生很大的变化,如何能自己的代码找到这ZROM_DATA这块数据的首地址以及确定它的大小呢?另外,你可能会问:为什么要取名为ZROM_AAAA,ZROM_DATA,ZROM_ZZZZ呢?细心的朋友会发现,IAR编译成的标代码会按照字母的顺序来链接,所以按这种命名方法,生成的代码是紧紧挨在一块的,用ZROM_AAAA的址可以确定"ZROM_Data.Bin"的开始位置,用ZROM_ZZZZ可以确定"ZROM_Data.Bin"的结束位置,这样,二进制文件的大小和位置都确定了,接下来用代码定位到访问这个二进制文件 文件首地址u8 *)&ZROM_DATA 文件大小u32)&ZROM_ZZZZ-(u32)&ZROM_DATA 至此大功告成!是不是很方便?
梅川酷子
|
用户1694343 2013-10-25 16:33
用户377235 2013-9-23 17:39
(u8 *)&ZROM_DATA // 这里编译错误,提示 Error[Pe020]: identifier "ZROM_DATA" is undefined G:\IAR Proj\YaWaJi\main.c 23 请问:怎么解决?