推荐星级:
- 1
- 2
- 3
- 4
- 5
ARM处理器启动代码的分析与编程
资料介绍
文档为ARM处理器启动代码的分析与编程总结文档,是一份不错的参考资料,感兴趣的可以下载看看,,,,,,,,,,,,,
部分文件列表
文件名 | 大小 |
ARM处理器启动代码的分析与编程.pdf | 99K |
部分页面预览
(完整内容请下载后查看)处理器启动代码的分析与编程
T<
!"#
!"# 处理器启动代码的分析与编程
孙 昊 曹玉强 杜秀芳 (山东大学控制科学与工程学院,济南 (T**Y))
摘
要
优秀的启动代码的编写可以保证程序的稳定高效运行。首先介绍了
(
!"# !LFQ6G4L "-/’ #QG78642
)启动代码中中断
芯片,却可以
向量表的定义、堆栈初始化、系统硬件初始化,然后重点分析了分散加载的目的与实现。虽然是针
对
%&’(()*
推广到一般
嵌入式系统的启动代码的分析与设计中去。
!"#$
,
关键词: ,启动代码,分散加载
!"# %&’(()*
$%&’()*’
!LFQ6G4L RHH3 GHL4 GH6N8I52 9IHZIQ554 23QR[4 Q6L 4NN4G38F4\@782 9Q9QI 863IHL]G42 374 9[QG4 HN F4G3HI 3QR[4D374 86838Q[
HN 374 23QG^ Q6L 4294G8Q[[1 374 9]I9H24 Q6L I4Q[8_Q38H6 HN 2GQ334I [HQL86Z\@74 Q6Q[1282 HN 23QI3 E]9 GHL4 82 RQ24L H6
%&’(()* G789DR]3 83 GQ6 R4 29I4QL 3H Z464I8G !"#$ 45R4LL4L 212345\
+,-./(0&‘!"#D%&’(()*DRHH3 GHL4D2GQ334I[HQL86Z
由于
芯片的复杂性,在用户程序运行之前需要有一段
当普通外部中断发生时,系统会跳到
去执行程序。
!"#
*;)B
启 动 代 码 来 初 始 化 程 序 的 运 行 环 境 , 本 文 就
系 列 的
中断向量表中,
*;**E*;)’
的这段程序只存放每个中断的
!"#$
芯片的启动代码部分做一些简单的分析。
入口,程序从这个入口跳转到各自的内存去处理异常。
程序如下:
%&’(()*
启动代码简介
位的
!
;
模式
’.A? +(
!"#
在
芯片的程序开发中,大多采用 语言编
’
+(
!"#
;定义代码段,段名
,属性
!"?!F4G3HI2D’.A?D"?!A.J%K
F4G3HI2
程,在运行 程序之前,要对系统进行初始化,就像是
’
机的
&’
".?J@"K
"4243
一样,这部分的初始化就是启动代码。因为
公司只
,-./
!"#
做
的内核,其他公司在获得
的内核后自行生产自己
!"#
!"#
;跳转到程序复位
;跳转到未定义指令
;跳转到软件中断
%A"
&’D "4243!LLI
&’D M6L4N864L!LLI
&’D /O-P!LLI
的
芯片,所以不同厂家生产的芯片,启
/.’0/12345 .6 ’789:
%A"
%A"
%A"
%A"
动代码也不尽相同,但是启动代码大都实现以下功能:异常向量
表的定义、堆栈初始化、系统变量初始化、中断系统初始化、地址
重映射等。
;跳转到指令预取异常
;跳转到数据异常
;保留
&’D &I4N43G7!LLI
&’D AQ3Q!RHI3!LLI
*;RS(*TNB*
&’D U&’D VE*;NN*W
&’D >-XP!LLI
A’A
A’A
芯片
的内存资源如下:
*;<*******=*;<***+>>>
%&’(()*
A’A
内部
;
"!# *;$>>>?***=*;$>>>>>>> ,..@%.!A?"
;
*;B*******=
;跳转到软件中断
;跳转到外部快速中断
"4243-683
%A"
外部
。
*;B)******
>%!/C
%A"
一般来说,对于嵌入式系统,上电复位后,总是会从一段
"4243!LLI
M6L4N864L!LLI
里 开 始 执 行 程 序 , 对 于
,从
来 说 这 个
就 是
M6L4N864L
".#
%&’(()*
".#
⋯ ⋯
程序正常复位后,首先执行
/O-P!LLI
重映射到外部
后,
,..@%.!A?"
,..@%.!A?"
>%!/C
,
%A" &’ "4243!LLI
,这条指令
就开始了用户汇编代码的编写,这部分代码实现异常向量表的
的含义是把
的值加载到 ,而
&’
的值通过
"4243!LLI
"4243!LLI
定义、堆栈初始化、系统硬件初始化、 程序运行环境初始化,最
’
后面的一条伪指令“
条指令即为将行号
”得到了定义(本
)。使用
"4243!LLI A’A "4243-683
后跳转到用户 语言主程序。
’
所在的地址值给
"4243!LLI
"4243-683
建立中断向量表
"
指令而不使用 指令跳转的原因有两个:
指令可以全
%A"
地址范围跳转,而 指令不行;芯片具有
)为 逻
,
%A"
系统上电复位后,首先执行
码的结果是将外部
执行这部分代
,..@%.!A?"D
功能,当向量表
,
"?#!&
重 映 射(
>%!/C*;B*******
"?#!&
位于
中时,用 指令不能跳转到正确的位置。
,
>%!/C
辑地址
,简单说
*;********
初始化堆栈
#
就 是 当 执 行 逻 辑 地 址
有
种工作模式,如表 所示。
)
!"#
$
处 的 程 序 的 时
*;********
表
七种工作模式简介
)
候 , 系 统 会 到 实 际 地 址 的
去寻址。以下如
*;B*******
不特别说明,提到的地址都看
作逻辑地址。对
*;B*******
处程序的编写,是我们编程的
开始。这部分开始的
个字
+(
节就是中断向量表(图 ),当
)
异常发生时,系统自动跳转到
相应的异常执行程序。例如,
图
)
中断向量表
全部评论(0)