工具/软件:TI C/C++编译器
您好,
我正在使用C6713辅助阶段引导加载程序。以下是 来自http://www.ti.com/lit/an/spra999a/spra999a.pdf的代码 :
;************************************************************************ ;复制章节 ;****************************************************** mvkl copyTable, A3;加载表指针 mvkh copyTable,A3 COPY_SECT_TOP: LDW * A3++,b0 ;字节计数 LDW * A3++,b4 ;加载闪存起动(加载)地址 LDW * A3++,A4 ; ram起始地址 不执行部分第2段 [!b0] b copy_done ;我们是否复制了所有章节? NOP 5 COPY_LOOP: LDB * b4++,B5 子b0,1,b0 ;递减计数 器[ b0] b copy_loop ;设置分支(如果未完成 )[!b0] b COPY_SECT_TOP 零A1 [!b0]和3,A3,A1 STB B5,*A4++ [!b0]和-4,A3,A5 ;将地址舍入为4 的下一个倍数[ A1]添加4,A5,A3 ;将地址舍入到4的下一个倍数
从逻辑上讲,从加载地址复制到运行地址将在以下循环中发生。
复制循环: LDB * b4++,B5 子b0,1,b0 ;递减计数 器[ b0] b copy_loop ;设置分支(如果未完成)
- 字节被加载到B5中,计数器递减,循环再次重复(分支指令),直到计数器值变为零。 我的问题是,当从ROM加载字节时,存储从加载地址到存储地址的加载字节的存储指令在哪里? 指令"STB B5,*A4++"完全不循环,那么这种拷贝是如何发生的?
- 在同一文档中,修改的链接程序脚本:
-
部分 { /*当使用十六进制转换器生成复制表时,加载 地址以及load_start,run_start和Size链接器选项 无需指定。 只能指定运行地址*/ .boot_load:load = flash_boot,run = boot_ram .text:load = flash_rest,run = IRAM load_start(_text_ld_start), run_start(_text_rn_start), 大小(_text_size) /*load_start,run_start和size仅在使用链接程序时需要 用于生成复制表*/的选项 const > FLASH_REST .cinit > FLASH_REST .Pinit > FLASH_REST .switch > FLASH_REST 数据 > IRAM 首席信息官 > IRAM BSS > IRAM 远 > iRAM }
-
为什么需要为.text节创建复制表,其他节(.data,.bss ...)如何?谁会将它们复制到IRAM? 我们不能仅仅提到.text > IRAM 和复制其他部分的代码也会将.text复制到IRAM中吗?
此致,
Kowalski