自定义的分散加载模式-成功修改STM32启动程序

标签:
it |
分类: 经典文档及MATLAB问题处理 |
原子的开发板,用跑马灯程序的工程来改的,DOWNLOAD和DEBUG效果都能跑起来,当然这只是用个简单小程序试试,我也就抛砖引玉,了解MDK启动代码的前辈也来讨论讨论最好。
话说启动代码,没什么神秘的,往简单里说不外乎3个功能部分
1,做个AREA放置向量表,异常/中断跳转的地址表。
2,初始化SP的值,初始化内核的状态(比如工作在用户模式或超级模式,STM启动默认在高权限模式)
3,如果使用的是简单的分散加载,IMAGE(映像文件)也就由1个RO,1个RW,1个ZI组成,并且RO的load
region和execution region相同,那么只需要COPY
RW区到RAM,然后再RW区后面创建ZI区,只部分可以用汇编代码自己实现。当然库里的__main函数就包含这些功能,但是如果不用__main,那就要自己写这部分了。
何为简单的分散加载?
MDK的HELP文档里有很详细的说明。
首先编译器设置要改
要是勾了,编译器要报错,问你启动库函数找不到。
勾了就是使用默认的分散加载描述文本,.SCT文件是不让改的,所以想改就不要勾。
贴上启动代码,我用红字做解释,后面有附近下载的。
上面这几个符号并不神秘,他们是编译器根据分散加载描述文本产生的全局标号,在.MAP文件里能找到他们对应的值,因此我们可以用IMPORT来引用他们,注意名字不能乱起,这个是根据你的.SCT文件产生的标号
LR_IROM1
0x08000000 0x00020000
}
这就是我的.SCT文本
记得MDK原.SCT文本里含有 *(InRoot$$Sections)
; Vector Table Mapped to Address 0 at Reset
Vectors