您好!
我打算为上述处理器构建 Tiva 引导加载程序。 加载程序已构建、但代码不会从闪存复制到 SRAM。 我有一个非常类似于 TivaWare 2.1.4.178的引导加载程序的项目。
我使用的是 CCS 版本:10.3.1.00003、编译器版本为 TI v20.2.4.LTS。
对处理器进行编程后、我可以在闪存矢量表中找到、但以下数据看起来与汇编代码不同。 复位矢量指向未初始化的闪存。 我怀疑闪存中不存在要复制的部分代码。
如果我采用 BL_STARTUP_CCS.s 的这一部分:
;
;
;;文件的这一部分进入文本部分。
;
;
.word 0x12345678
.text
;
;
;;通过将引导加载程序从闪存复制到 SRAM,零来初始化处理器
;填充.bss 段,并将矢量表移动到的开头
;SRAM。 修改返回地址以指向引导的 SRAM 副本
;;加载而不是闪存副本,导致现在在中对该副本进行分支
;SRAM。
;
;
.ref BSS_run
bss_start .word bss_run
.ref __stack_top
bss_end .word __stack_top
thumbfunc ProcessorInit
ProcessorInit:.asmfunc
;
;;将代码映像从闪存复制到 SRAM。
;
MOV r0、#0x0000
MOV R1、#0x0000
MOVt R1、#0x2000
LDR R2、BSS_START
我将与闪存转储进行比较:
0000003a: 2000 MOV r0、#0
0000003c: 06A3 lsls R3、R4、#0x1a
0000003E: 2000 MOV r0、#0
00000040: 06A3 lsls R3、R4、#0x1a
00000042: 2000 MOV r0、#0
00000044: 5678 ldrsb r0、[r7、r1]
00000046: 1234 ASR R4、R6、#8
00000048: F1AD0D08 sub.w R13、R13、#8
0000004c: 9000 str r0、[R13]
0000004e: BA00 rev r0、r0
00000050: 4770 BX r14
00000052: 9800 LDR r0、[R13]
00000054: 1C40 添加 了 r0、r0、#1
00000056: B002 添加 R13、#8
00000058: 4770 BX r14
0000005a: B508 推 送{R3、r14}
可以看到我的".word.word."值为12345678 (粗体)、但以下代码应为"MOVs..."
编译器发出有关此初始化的警告:
警告#10278-D:为段指定了负载位置
".text:rtsv7M4_T_le_v4SPD16_eabi.lib "。 本部分
包含链接器生成的复制表所需的解压缩例程
和 C/C++自动初始化。 必须确保将此段复制到
在执行 C/C++引导代码或使用单个引导代码之前运行地址
分配说明符(例如、">"存储器")。
但我不知道如何解决这个问题。 是否有要更改的 cmd 文件? (我使用原始文件)
存储器
{
闪存(RX):origin = 0x00000000,length = 0x00010000
SRAM (rwx):origin = 0x20000000,length = 0x00010000
}
/*内存中的段分配*/
部分
{
组
{
.intvecs
.text
.const
.data
} load = FLASH、run = 0x20000000、load_start (init_load)、run_start (init_run)、size (init_size)
组
{
.bss
堆栈
}run = SRAM、run_start (bss_run)、run_end (bss_end)、size (bss_size)、run_end (__stack_top)
}