天津工业大学嵌入式期末复习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式期末重点

———J_x_T

一、单选题(1分*15)

二、填空题(1分*15)

三、简答题(5分*5)

四、程序题(12分+13分)(来自操作系统实验)

五、综合题(20分)(实验,给图和功能进行分析和编程,任务、

优先级、中断…写代码。)

嵌入式系统的整体架构

※硬件

§操作模式和特权极别

两种操作模式分别为:处理者模式(handler mode)和线程模式(thread mode)。两种特权等级分别为:特权级和用户级。

1、操作模式转换

1、复位后,CM3默认进入特权级线程模式;

2、从特权级切换到用户级,置位CONTROL[0];

3、用户级切换回特权级,必须执行指令SVC,触发SVC异常,在异常服务例程

中清零CONTROL[0]才能回到特权级;

4、处理异常服务例程必须使用特权级HANDLEER模式;

5、由特权级线程模式触发异常,异常处理完成后依然回到特权级线程模式;

由用户级线程模式触发异常,异常处理完成后依然回到用户级线程模式。

2、R13栈指针与处理模式

MSP(主栈指针):默认栈指针,被操作系统(OS)内核以及异常处理使用。 PSP(进程栈指针):被用户应用程序代码使用。

3、特殊寄存器与处理模式

Cortex-M3 中的特殊功能寄存器包括:

程序状态寄存器组(xPSR)(APSR、IPSR、EPSR)

中断屏蔽寄存器组(PRIMASK, FAULTMASK,以及 BASEPRI)

控制寄存器(CONTROL)

CONTROL寄存器只有最低两位[1:0]有意义。

CONTROL寄存器主要用来定义特权等级、选择堆栈指针。

特殊寄存器只能被专用的 MSR/MRS 指令访问,而且它们也没有与之相关联的访问地址,即存储器地址。

MRS 通用寄存器, 特殊寄存器; 读特殊功能寄存器的值到通用寄存器

MSR 特殊寄存器, 通用寄存器 ; 写通用寄存器的值到特殊功能寄存器

CONTROL 寄存器也是通过 MRS 和 MSR 指令来操作的:

MRS R0, CONTROL ;将CONTROL寄存器读入R0

MSR CONTROL, R0 ;将R0寄存器读入CONTROL

§异常处理

所有的异常均在handler模式下处理

进入异常时,自动压栈,退出异常时,自动出栈

什么时候手动??

§存储系统

CM3支持两种存储模式:小端模式、大端模式(P85)

小端模式,高地址存高字节,低地址存低字节

大端模式,高地址存低字节,低地址存高字节

若存0x12345678,则小端:0x12345678大端:0x78563412

位带操作(P75)有两个区(内部的外设和RAM

§异常向量表,中断优先级,中断机制(p97,p128)

1、异常向量表

1、2、3不可编程,不能被除能,不能被屏蔽,优先级不能配置。

4-15可以被除能,但是除能后可以上访到hardfault

2、中断优先级定义规则

举例:

(1)2位有效

优先等级:

0x00、 0x40、 0x80 、0xc0

(2)3位有效

优先等级:

0x20、 0x40、 0x60 、0x80 、 0xc0、 0xe0

(3)4位有效

优先等级:

0x10 、0x20、 0x30、0x40、0x60 、0x60 、0x70、0x80 、0x90 、0xA0、0xB0、0xC0、 0xD0、0xE0

§咬尾中断(128)

当处理器在响应某异常时,如果又发生其它异常,但它们优先级不够高,则被阻塞。在当前的异常执行返回后,系统处理悬起的异常时,倘若还是先POP,然后又把POP出来的内容PUSH回去,白白浪费CPU时间,因此,uc/os-III继续使用上一个异常已经PUSH好的成果,消除了压栈和出栈时间,前后只执行了一次入栈/出栈操作。如图9.2所示。

§晚到(的高优先级)异常

CM3的中断处理还有另一个机制,它强调了优先级的作用,这就是“晚到的异常处理”。当CM3对某异常的响应序列还处在早期:入栈的阶段,尚未执行其服务例程时,如果此时收到了高优先级异常的请求,则本次入栈就成了为高优先级中断所做的了——入栈后,将执行高优先级异常的服务例程。可见,它虽然来晚了,却还是因优先级高而受到偏袒,低优先级的异常为它“火中取栗”。

比如,若在响应某低优先级异常#1的早期,检测到了高优先级异常#2,则只要#2没有太晚,就能以“晚到中断”的方式处理——在入栈完毕后执行ISR #2,如图9.3所示。如果异常#2来得太晚,以至于已经执行了ISR #1的指令,则按普通的抢占处理,这会需要更多的处理器时间和额外32字节的堆栈空间。

在ISR #2执行完毕后,则以刚刚讲过的“咬尾中断”方式,来启动ISR #1的执行。

§vector可以于哪两个区?

为了支持动态重分发中断,CM3 允许向量表重定位——从其它地址处开始定位各异常向量。这些地址对应的区域可以是代码区,但更多是在RAM 区。

§流水线(p88)

M3为三级流水线架构

取指(Fetch)——用来计算下一个预取指令的地址,从指令空间中取出指令,或者自动加载中断向量。(处理指令并将结果写回寄存器)

译码(Decode)——译码指令,产生操作数的地址,产生LR寄存器值。(识

执行(Execute)——执行指令,产生回写与执行结果,以及进行逻辑运算并产生分支跳转。(从寄存器装载一条指令PC总是指向正在取指的指令)

§指令集

开关中断指令,访问寄存器指令,CPU进入睡眠指令。

清零(开中断)置位(关中断)

MRS R0, PRIMASK MRS R0, PRIMASK

AND R0,~(1<<0) ORR R0,1<<0

MSR PRIMASK,R0 MSR PRIMASK,R0

清零 CPSIE I 置位 CPSID I

进入睡眠:等待中断WFI;等待事件:WFE

※操作系统

§任务的5种状态,什么时候属于休眠态

相关文档
最新文档