本小节介绍如何将COFF文件转换为适用于基于CAN引导装载的格式。该例子假定发送数据流的主机能够读取ASCII十六进制格式文件。实例中需要转换的COFF文件名为GPIO34TOG.out。
建立项目并用-m链接器选项链接产生一个映射文件,可以查看该映射文件。下述例14-7复制了映射文件实例(GPIO34TOG.map),可以看出代码段的定位。该映射文件包含下述信息:
●输出段。这是由链接命令文件中SECTIONS命令指定的输出段名。
●起始位置。为每一个输出段列出的第一个起始位置是整个输出段的开始地址。随后的起始位置数值是部分输出段的开始地址。
●长度。为每一个输出段列出的第一个长度是整个输出段的长度。随后的长度数值是部分输出段的长度。
●属性/输入段。列出输入文件,可以是段的一部分或与输出段相关联的任何数值。
为使代码正确执行,下述例14-7的所有初始化段需要装入到DSP。这种情况下,code-start、ramfuncs、.cinit、myreset和.text段需要装入。其他段为非初始化段,不需要包括到装入过程。映射文件也指明了各段的长度和起始地址。例如,.text段具有0x155字且在0x3F A000开始。
例14-7 GPIO34TOG映射(Map)文件
使用CAN引导装载器装入代码,主机必须用引导装载器能够理解的格式发送数据。即,数据必须以具有长度的数据块形式发送,开始是地址后面跟着数据。块长度为0表示数据结束。HEX2000.exe应用程序可以用于将COFF文件转换为包含引导信息的格式。下述例子的命令句法可以用于将应用软件转换为包含引导装载器信息的ASCII十六进制格式文件。
例14-8 HEX2000.exe命令句法。
C:HEX2000 GPIO34TOG.OUT-boot-gpio8-a
其中:
-boot将所有段转换到引导表形式。
-gpio8使用8位GPIO模式数据格式。eCAN使用与8位GPIO模式相同的数据格式。
-a选择ASCII-Hex作为输出格式。
该例的命令行产生一个被称为GPIO34TOG.a00的ASCII-Hex输出文件。假定主机能够读取ASCII码十六进制文件。每一个装入的数据段与上述映射文件是对应的。装入数据流后,引导ROM将跳转到由数据流读取的入口地址,在这种情况下将从0x3F A0000开始执行。
例14-9 GPIO34TOG数据流。
AA 08 ;0x08AA,8位关键值
00 00 00 00 00 00 00 00 ;8个保留字
00 00 00 00 00 00 00 00
3F 00 00 A0 ;入口地址0x003FA000
02 00; 装入2个字,codestart段
00 00 00 00 ;在0x000000开始装入块
7F 00 9A A0 ;数据块0x007F,0xA09A
16 00 ;装入0x0016字,ramfuncs段
00 00 02 00 ;在0x000002开始装入块
22 76 1F 76 2A 00 00 1A 01 00 06 CC F0 ;数据=0x7522,0x761F等…(www.daowen.com)
FF 05 50 06 96 06 CC FF F0 A9 1A 00 05
06 96 04 1A FF 00 05 1A FF 00 1A 76 07
F6 00 77 06 00
55 01 ;装入0x0155字,.text段
3F 00 00 A0 ;在0x003FA000开始装入块
AD 28 00 04 69 FF 1F 56 16 56 1A 56 40 ;数据=0x28AD,0x4000等…
29 1F 76 00 00 02 29 1B 76 22 76 A9 28
18 00 A8 28 00 00 01 09 1D 61 C0 76 18
00 04 29 0F 6F 00 9B A9 24 01 DF 04 6C
04 29 A8 24 01 DF A6 1E A1 F7 86 24 A7
06....
……
……
FC 63 E6 6F
19 00 ;装入0x0019字,.cinit段
00 00 18 00 ;在0x000018开始装入块
FF FF 00 B0 3F 00 00 00 FE FF 02 B0 3F ;数据=0xFFFF,0xB000等…
00 00 00 00 00 FE FF 04 B0 3F 00 00 00
00 00 FE FF……
……
3F 00 00 00
02 00 ;装入d0x0002字,myreset段
00 00 32 00 ;在0x000032开始装入块
00 00 00 00 ;数据=0x0000,0x0000
00 00 ;块长度0表示数据结束
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。