在使用时,我们要对上面程序中的
user_size .equ 0x00001798 user_ld_start .equ 0x90000400 user_rn_start .equ 0x00000400
进行修改,user_size表示用户程序段的字节大小,user_ld_start表示用户代码的Flash起始地址(我默认使用0x90000400,一般不改),user_rn_start表示用户代码要存放到RAM的起始地址(从之前的图看,这个我也一般不改)。小程序我一般只修改用户程序段的字节大小。大程序可能要对copyTable(复制表)进行调整。
要满足上面的地址的分布,修改用户应用程序的cmd文件如下:
-c
-x
-l rts6700.lib
-heap 100h
-stack 200h
MEMORY
{
BOOT_RAM : o=00000000h,l=00000400h
IRAM : o=00000400h,l=00040000h
FLASH_BOOT : o=90000000h,l=00000400h
FLASH_REST : o=90000400h,l=000FFB00h
}
SECTIONS
{
.boot_load:> BOOT_RAM
/* Initialized User code section */
.text :> IRAM
.cinit :> IRAM
.vectors :> IRAM
.bss :> IRAM
.far :> IRAM
.stack :> IRAM
.const :> IRAM
.switch :> IRAM
.sysmem :> IRAM
.cio :> IRAM
}
注意其中的.boot_load段,与二级引导程序的.sect ".boot_load"对应。如果用户应用程序定义了其它的段,可对cmd文件做相应修改,但.boot_load:> BOOT_RAM不能改,且不要把其它段放在BOOT_RAM存储区中。
将以上3个汇编文件盒一个cmd文件加到用户程序的工程中重新编译工程。
3 提取要烧写的二进制数据
这部分是纯手工活,如果你会使用VIM,那数据处理起来就简单多了。
首先,将Jtag连接上TMS320C6713开发板,下载用户应用程序,使用CCS V3.3的File->Data->Save...功能,将内存中的二进制的代码数据保存到.dat文件。
Address都是上面的cmd文件设定好的。
要保存的*.dat包括两个文件:一个存放二级Bootloader的机器二进制码(boot.dat),一个存放用户应用程序的二进制码(text.dat)
boot.dat: Address=0x00000000, Length=0x00000100
text.dat: Address=0x00000400, Length=?
喔?用户代码的长度怎么知道?还有,不是说一级Bootloader会拷贝1KB长度吗,上面怎么是Length=0x00000100?
请到CCS工程的Debug目录下打开.map文件(如下图),详细的解答在下图的注释中。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-34190-4.html
以战应战才能避免战争
目标清晰
并应对任何可能出现的问题