[TOC]
操作模式和特权级别
两种操作模式
用以区分普通应用程序的代码和异常中断服务例程的代码
处理者模式 : Handler模式。异常服务例程所在的模式。这个模式永远是使用MSP堆栈指针。
线程模式 : 主应用程序所在的模式
两种特权分级
提供一种存储器访问的保护机制,使得普通的用户程序代码不能执行涉及到要害的操作。
特权级别 : 在特权级别下,程序可以访问所有范围的存储器,并且可以执行所有指令。
用户级别 : 一般模式
异常服务例程必须在处理者模式下,以特权级执行
主应用程序必须在线程模式下执行,但既可以使用特权级,也可以使用用户级
复位后,处理器默认进入线程模式以及特权级访问
从用户级进入特权级的唯一方法是触发异常,比如软中断。
系统寄存器
通用功能寄存器
R0-R7 : 低组寄存器。所有指令都能访问。它们的字长是32位。复位后初始值是不可预料的。
绝大数16位指令只能使用低组,部分16位指令能够访问高组。32位Thumb-2指令可以使用所有通用寄存器。
通过专用的指令来访问特殊功能寄存器
R8-R12 : 高组寄存器。他们也是32位字长。复位后初始值不可预料。
R13 : 堆栈指针,sp,双堆栈机制,有两个堆栈指针。
- 主堆栈指针,MSP,SP_main,它由OS内核、异常服务程序、所有需要特权访问的应用程序代码来使用。简单的应用程序只使用MSP就够了。 - 进程堆栈指针,PSP,SP_process,用于非异常服务程序的常规应用程序。 - 堆栈指针用于访问堆栈,执行PUSH指令和POP指令,
R14 : 连接寄存器,LR
用于在调用子程序之前,存储返回地址。
R15 : 程序计数器,PC,可读
读PC时返回的值是当前读指令的