首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

uCOS II在SkyEye上的移植分析 02

uCOS II在SkyEye上的移植分析 02

1.处理器模式: ( cpu mode )
  arm 的处理器可以工作在 7 种模式,如图1所示。

图1
 这里除 usr 模式以外的其他模式都叫做特权模式,除 usr 和 sys 外的其他5种模式叫做异常模式。在 usr 模式下对系统资源的访问是受限制的,也无法主动地改变处理器模式。异常模式通常都是和硬件相关的,例如中断或者是试图执行未定义指令等。这里需要强调的是和移植相关的两种处理器模式:svc态和 irq 态,分别指操作系统的保护模式和通用中断处理模式。这两种模式之间的转换可以通过硬件的方式,也可以通过软件的方式。uC/OS-II内核在执行过程中,大部分时间都是工作在 svc 态,当有硬件中断,例如时钟中断到来时,cpu 硬件上会自动完成从svc态进入 irq态,在中断处理程序的结束处,则需要通过编程的方法使得 cpu 从irq 态恢复到 svc 态,这个在移植代码中可以找到。

2.程序状态寄存器: ( PSR:Program status register )
 在任何一种处理器模式中,都使用同一个寄存器来标识当前处理器的工作模式:这个寄存器叫做CPSR ( Current Program Status Register ),它的 [0--4] 位用来表示cpu mode,如图2、图3所示。

图2
 每一种处理器异常模式,都有一个对应的SPSR ( Saved Program Status Register )寄存器,用来保存进入异常模式前的CPSR。SPSR的作用就是当从异常模式退出时,可以通过一条简单的汇编指令就能够恢复进入异常模式前的CPSR,而这个值都是保存在当前异常模式的SPSR中的。例如:当从usr态进入中断irq 态时,原先的 CPSR_all 将被保存在当前的 SPSR_irq中,类似的异常模式下的 SPSR 还有SPSR_fiq、SPSR_svc、SPSR_abt、SPSR_und。非异常模式的 usr和sys模式下没有 SPSR,只有CPSR。不能显式的指定把 CPSR 保存到某个异常模式下的 SPSR,比如 SPSR_irq,而必须是变更到 irq态之后cpu自动完成的,不能在其他态下硬性赋值,因为SPSR_irq是其他状态下不可见的。

图3
返回列表