当前位置:文档之家› 天津工业大学嵌入式期末复习

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

嵌入式期末重点———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寄存器读入R0MSR CONTROL, R0 ;将R0寄存器读入CONTROL§异常处理所有的异常均在handler模式下处理进入异常时,自动压栈,退出异常时,自动出栈什么时候手动??§存储系统CM3支持两种存储模式:小端模式、大端模式(P85)小端模式,高地址存高字节,低地址存低字节大端模式,高地址存低字节,低地址存高字节若存0x12345678,则小端:0x12345678大端:0x78563412位带操作(P75)有两个区(内部的外设和RAM§异常向量表,中断优先级,中断机制(p97,p128)1、异常向量表1、2、3不可编程,不能被除能,不能被屏蔽,优先级不能配置。

4-15可以被除能,但是除能后可以上访到hardfault2、中断优先级定义规则举例:(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, PRIMASKAND R0,~(1<<0) ORR R0,1<<0MSR PRIMASK,R0 MSR PRIMASK,R0清零 CPSIE I 置位 CPSID I进入睡眠:等待中断WFI;等待事件:WFE※操作系统§任务的5种状态,什么时候属于休眠态休眠状态:任务在没有被配备任务控制块或被剥夺了任务控制块时的状态叫做任务的睡眠就绪状态:系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,这时任务的状态叫做就绪状态。

运行状态:处于就绪状态的任务如果经调度器判断获得了CPU的使用权,则任务就进入运行状态等待状态:正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。

中断服务状态:一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。

§任务三要素:从存储结构看, uc/OS-III的任务由三个部分组成:任务程序代码CODE任务堆栈(用来保存任务的工作环境)STK任务控制块(记录了任务的各个属性)OS_TCB第一个程序写main函数,剩下写main中建什么任务,prio等任务的概念任务是实现某种功能的代码段,通常是一个无限循环。

•uc/OS-III的任务有两种:用户任务和系统任务。

用户任务:由应用程序设计者编写系统任务:由系统提供•uc/OS-III定义了5个系统任务:空闲任务、时钟节拍任务、统计任务、定时任务,中断服务管理任务•uC/OS-III 可以管理无限个任务•uC/OS-III 总是运行进入就绪的优先级最高的任务。

•uC/OS-III的一个优先级可以对应多个任务。

从代码看,uc/OS-III的任务就是一个函数。

§优先级:分配(中断最高,空闲最低)•uc/os-III中,每个任务的优先级以0,1,2,……来表示,数字越小,优先级越高。

•用户可以设置需要任务的实际数目,OS_CFG.H中定义的常数OS_CFG_PRIO_MAX控制任务优先级的实际数目•系统总是把最低优先级别OS_CFG_PRIO_MAX-1自动赋给空闲任务。

如果应用程序使用了统计任务,系统还会将OS_CFG_PRIO_MAX-2自动赋给统计任务。

•任务优先级的确定,需要在任务创建函数OSTaskCreate()中指定。

•一个优先级可以对应多个任务,反之不行。

•什么是优先级反转(图3分,文字说明2分)(p174)当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,而这个低优先级任务在访问共享资源时可能又被其它一些中等优先级任务抢先,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。

优先级反转是实时系统中的一个常见问题,仅存在于基于优先级的抢占式内核中。

图13-4 显示了一种优先级反转的情况。

任务H 的优先级高于任务M,任务M 的优先级高于任务L。

怎样解决反转(互斥信号量)(p176)互斥信号量是一种特殊的二进制信号量,是一种被定义为OS_MUTEX数据类型的内核对象,只能被任务使用。

用于解决优先级反转问题。

图显示了优先级反正是如何通过mutex 解决的。

任务H想要访问任务L占用的共享资源。

考虑到任务L占用这个资源,uC/OS-III提升任务L的优先级与任务H相同。

这样就防止了任务L被任务M抢占(被中等优先级的任务抢占)。

任务L继续访问这个资源,但现在任务L的优先级等于任务H的优先级。

注意,任务H被挂起因为它要等待任务L释放mutex。

换句话说,任务H 被插入到mutex 的挂起队列中。

任务L对共享资源的访问执行完毕并释放mutex。

uC/OS-III恢复任务L到原有的优先级。

然后uC/OS-III将这个mutex交给任务H。

注意,并不是任务L已经全部执行完毕,而是当它释放信号量时就会发生调度而转到高优先级任务。

§什么叫基于优先级的调度(P97)▪任务调度:确定下一个要执行的任务。

▪uC/OS-III的两个任务调度器:•任务级任务调度•中断级任务调度▪uC/OS-III的两种任务调度算法:•可剥夺型调度•时间片轮转调度▪可剥夺型调度(preemptive)•“可剥夺型”意味当一个事件发生时,并且使得一个更高优先级的任务就绪时,uC/OS-III就将CPU的控制权交给高优先级任务。

•当一个任务提交信号量、发送消息给一个高优先级的任务,当前的任务就会被停止,更高优先级的任务获得CPU 的控制权。

•类似的,当中断服务程序ISR提交信号量或发送消息给一更高优先级的任务,那么中断返回的时候不会返回到原任务,而是高优先级任务。

§资源独占:全局变量不能完成对资源独占哪种可独占,哪种不可独占共享资源可以是:变量(静态的或全局的)、结构体、内存空间、I/O 等独占共享资源的最快和最简单方法是关中断§同步:两灯同步,灯和中断同步….什么是同步,同步方式(P184第14章任务同步)任务同步:嵌入式系统中的各个任务是为同一个大的任务服务的子任务,不可避免的要共享某些资源或共同协作来完成某些工作。

为了实现各个任务之间的合作和无冲突的运行,在各任务之间必须建立一些制约机制。

相关主题