要设置而已。
,每块 用户的程序分为多个数据块(因为 DSP 开发软件生成的目标文件是 COFF 格式)数据块起始都包含一个程序头,每个又包含两个内容:1、当前数据块大小,即 32 位格式的数据量。
2、当前数据块在 DSP 内部 RAM 存储的起始地址。
程序头之后就是用户的程序内容。
讲到这里问题的关键就出来了:怎样产生这样的程序块呢?程序内容应该为哪种格式.hex、.bin、.out?这也是我当初最头疼的问题。
用 TI 公司的 DSP 开发软件 Code Composer 建立一个项目文件后,要做的第一件事就是编写.cmd 命令文件,命令文件有两个:一个是链接命令文件,另一个是 boot 引导表格式生成命令文件。
链接命令文件作用是分配各个程序段在 DSP 内部 RAM 中的存储位置, 链接命令文件必须和项目文件名相同。
例如项目 online.mak 的链接命令文件 online.cmd 如下所示:-c //ROM 初始化-o online.out //产生 online.out 可执行文件-m online.map //产生 online.map 映象文件online.obj //链接的目标文件-l rts30.lib //链入 TMS320C3X 运行支持库MEMORYVECS: org0x809fc1 len0x3f //定义矢量的起始地址及空间的长度 RAM0: org0x809800 len0x7c1 //定义堆栈起始地址及空间的长度 RAM2: org0x800000 len0x8000 //定义用户程序数据空间SECTIONS vectors: loadVECS //将中断向量块安排在 VECS 空间.text: loadRAM2 //将程序代码、常量、变量等数据块安排在 RAM2 空间.cinit: loadRAM2.const: loadRAM2 .bss: loadRAM2 .stack: loadRAM0 //将堆栈块安排在 RAM0 空间 建立链接命令文件后,开发软件在对用户程序汇编链接生成目标文件的过程中,就会按照链接命令文件对输出的 COFF 格式的数据块自动选择存储器地址。
boot 引导表格式生成命令文件,这个文件名可以随意取,例如可取名为 hex.cmd。
先头讲到 TMS320VC33 的 bootloader 程序加载用户程序是有一定格式,boot 引导表格式生成命令文件就是将用户的目标文件转换成符合要求的格式,举例如下:hex.cmdonline.out //要进行转换的目标文件-map hex.map //生成映象文件-boot //产生装载程序-image //输出文件去掉地址映象-i //建立 INTEL 十六进制文件的输出-memwidth 8 //用户程序存储器的数据宽度-cg 10e8h //总线控制字-e 00803f86h //程序装载完成后的执行地址即为_c_int00 的地址,可查看 online.map 文件/ROMS //ROM 的映射范围,及用户程序在外部 FLASH 中的地址空间 FLASH1: org0len10000hromwidth8filesonline1.hex FLASH2: org10000hlen10000hromwidth8filesonline2.hex 写好格式转换命令文件后,在 WINDOWS 的命令提示符工具下用cd命令进入用户程序目标文件所在目录,然后运行 hex30 hex.cmd 即可根据格式命令文件 hex.cmd 的要求产生两个 hex 格式的文件 online1.hex 和 online2.hex。
其中 hex30 是 DSP 开发软件自带的程序。
因为 Intel 格式中除了数据之外还有起始符、字节个数、起始地址、类型以及校验位等各种信息,并非纯粹数据的 HEX 格式表示。
所以还不能直接烧进 FLASH 芯片,同样在命令提示符下运行 hexbin 程序,将 online1.hex 和 online2.hex 分别转换成 online1.bin 和 online2.bin,就可得到纯粹数据格式的烧写文件,好了,只要把刚才两个文件烧进 FLASH 芯片,重启系统,OK终于可以脱机运行程序了.
上一篇:
gdb的调试方法
下一篇:
谈初中数学“一元二次方程”的几种常见题型