2024年1月1日发(作者:)

四川师范大学成都学院实验中心 龚名茂

Cortex-M3在MDK下汇编程序分散加载文件出错的解决方法

1.对于汇编调试,不需要添加启动,仅设置堆栈即可

2.默认分散加载文件如下(LM3S615,其实其他也差不多,都是自动生成):

LR_IROM1 0x00000000 0x00008000 { ; load region size_region

ER_IROM1 0x00000000 0x00008000 { ; load address = execution address

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

}

RW_IRAM1 0x20000000 0x00002000 { ; RW data

.ANY (+RW +ZI)

}

}

需要注意的是,自己写的程序的入口必须是RESET,如下程序所示:

STACK_TOP EQU 0x20002000

AREA RESET,CODE,READWRITE

DCD STACK_TOP

DCD START

ENTRY

START

MOV R0, #10

MOV R1, #0

loop

ADD R1, R0

SUBS R0, #1

BNE loop

deadloop

B deadloop

END

然后在编译的时候linker选项下如下图所示:

四川师范大学成都学院实验中心 龚名茂

编译之后输出结果如下所示:

Build target 'Target 1'

assembling

(8): warning: L6314W: No section matches pattern *(InRoot$$Sections).

Program Size: Code=24 RO-data=0 RW-data=0 ZI-data=0

"" - 0 Error(s), 1 Warning(s).

此时,会出现这个警告。据网友们说是无关紧要的。虽然如此,但是看着不爽。后来查看了帮助文档,找到了消除这个警告的方法,在linker选项中加上如下一行:

虽然现在警告已经消除了,但是仍然不明白为什么。也就是没有搞懂这个分散加载文件中的

*.o (RESET, +First)

*(InRoot$$Sections)

.ANY (+RO)

这几行是什么意思,有待高人指点!