找回密码
 注册
关于网站域名变更的通知
查看: 413|回复: 2
打印 上一主题 下一主题

Cortex-M/R 内核启动过程 / 程序启动流程之内核规范

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-10-21 17:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
内核规范

  ARM Cortex-M/R 内核的复位启动过程也被称为复位序列(Reset sequence)。ARM Cortex-M/R内核的复位启动过程与其他大部分CPU不同,也与之前的ARM架构(ARM920T、ARM7TDMI等)不相同。大部分CPU复位后都是从 0x00000000 处取得第一条指令开始运行的,然而在ARM Cortex-M/R内核中并不是这样的。其复位序列为:

  • 从地址 0x0000_0000 处取出 MSP 的初始值;
  • 从地址 0x0000_0004 处取出PC的初始值,然后从这个值对应的地址处取指。事实上,地址 0x00000004 开始存放的就是默认中断向量表
    1 s8 G) L" b5 x! K: b* Y) d' K7 Q1 u+ F   [7 r) J/ b8 E2 v- P1 N. y
    ARM Cortex-M/R 内核的中断向量表布局情况如下图所示:
    ; N, R* e# D- N. c 4 K* F. @% \) E# M, E0 P- W9 J

注意:中断向量表的位置可以改变,此处是默认情况下的设置。

  在 ARM Cortex-M/R 内核中,发生异常后,并不是去执行中断向量表中对应位置处的代码,而是将对应位置处的数据存入PC中,然后去此地址处进行取指。简而言之,在ARM Cortex-M/R的中断向量表中不应该放置跳转指令,而是该放置 ISR 程序的入口地址。另外还有两个细节问题需要注意:

  • 0x00000000 处存放的 MSP 初始值最低三位需要是 0;
  • 0x00000004 处存放的地址最低位必须是 1。
    ) ?" s. `" z# W# G

  第一条是因为在ARM上编程,但凡涉及到调用,就需要遵循一套规约AAPCS ——《Procedure Call Standard for the ARM Architecture》。AAPCS 中对栈使用的约定是这样的:

5.2.1.1. T& m; z! {8 s/ K) e& u
Universal stack constraints  F8 B" G" r7 [; l. n( l. F
At all times the following basic constraints must hold:
: D. ~! x* K& m9 d0 wStack-limit < SP <= stack-base. The stack pointer must lie within the extent of the stack.
0 d( z4 b3 k! [1 {SP mod 4 = 0. The stack must at all times be aligned to a word boundary.
( }4 }7 n2 o3 {+ n+ i5.2.1.2
, Y2 D9 q+ N8 x' X% c* x: k- PStack constraints at a public inteRFace
: ?$ y: J  D$ RThe stack must also conform to the following constraint at a public interface:
3 o9 T  v" L  S0 m9 I+ \) [# jSP mod 8 = 0. The stack must be double-word aligned.

简而言之,规约规定栈任何时候都必须 4 字节对齐,在调用入口需8字节对齐,而且 SP 的最低两位在硬件上就被置为 0 了。' x% w) |+ Q/ L7 q% [7 {1 D
  第二条与 ARM 模式与 Thumb 模式有关。ARM 中 PC 中的地址必须是 32 位对齐的,其最低两位也被硬件上置 0 了,故写入PC 中的数据最低两位并不代表真实的取址地址。ARM中使用最低一位来判断这条指令是 ARM 指令还是 Thumb 指令,若最低位为 0,代表 ARM 指令;若最低位为 1,代表 Thumb 指令。在 Cortex-M/R 内核中,并不支持 ARM 模式,若强行切换到 ARM 模式会引发一个 Hard Fault。

3 z5 Z0 r/ D! z& k' t7 w: n, Y: M

该用户从未签到

2#
发表于 2020-10-21 19:09 | 只看该作者
Cortex-M/R 内核启动过程 / 程序启动流程之内核规范
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 21:29 , Processed in 0.203125 second(s), 29 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表