天津工业大学嵌入式期末复习
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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种状态,什么时候属于休眠态