嵌入式中堆栈的应用

嵌入式中堆栈的应用
嵌入式中堆栈的应用

《嵌入式系统中堆栈的运用》

班级:20091271班学号:2009127127 姓名:张永成

栈(操作系统):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈栈使用的是一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。堆则是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些堆(数据结构):堆可以被看成是一棵树,如:堆排序栈(数据结构):一种后进先出的的数据结构。下面我们来简单介绍一下堆栈。

1.堆栈的逻辑结构和基本运算

从数据的逻辑结构角度看,堆栈(Stack)是一种运算上受限的线性表,在堆栈这样的线性表结构上仅允许从表的一端做插入或删除运算,被允许进行运算的一端称之为栈顶,而栈顶的位置是随插入或删除运算动态变化的,表中不允许操作的一端称为栈底。现实生活中类似堆栈这样的逻辑结构很多,例如,子弹夹、货物仓库中的货物叠放等。这种结构的最显著特点是“后进先出”,因此,堆栈又被称作后进先出表。

设栈为S,栈中有一个元素序列:S=(a1,a2,……an),在这个栈中a1为栈底,an为栈顶,堆栈的逻辑形态如图10.13(a)所示

设有A、B、C三列火车须按顺序进入一单站台的车站,且进站过程中允许已进站的火车出站,进站顺序如图10.13(b)所示,则A、B、C可能的出站序列有五个,具体如下:

(1) C,B,A 进出站操作序列:A(I)->B(I)->C(I)->C(O)->B(O)->A(O);

(2) A,C,B 进出站操作序列:A(I)->A(O)->B(I)->C(I)->C(O)->B(O);

(3) A,B,C 进出站操作序列:A(I)->A(O)->B(I)->B(O)->C(I)->C(O);

(4) B,A,C 进出站操作序列:A(I)->B(I)->B(O)->A(O)->C(I)->C(O);

(5) B,C,A 进出站操作序列:A(I)->B(I)->B(O)->C(I)->C(O)->A(O);

特别提示:C、A、B不可能是一个出站序列!为什么?请你自己分析。

基于栈的逻辑结构的基本运算有如下几种:

(1)Inistack(S) 栈的初始化,即构造一个空栈S;

(2)Push(S ,x) 进栈(又称压栈);将一个数据元素压入一个未满的栈;(3)Pop ( S ) 出栈(又称退栈);将一个非空栈的栈顶元素取出赋予一变量;(4)StackLength( S ) 统计一个已存在的堆栈中实际拥有的元素个数;

(5)StackEmpty( S ) 判断栈是否非空,若S为空,则函数以真值“true”返回;

(6)Destroystack(S ) 将一个已存在的栈S销毁。

2.栈的顺序存储结构及基本算法

既然堆栈是一种操作受限的线性表,那么将这样的逻辑结构映射到内存中的一个简单的方法可以沿用顺序线性表的存储结构。用C语言描述顺序栈结构如下:#define MAXSIZE <栈中允许的最大元素个数>

Elem Stack[MAXSIZE];

int top,base; /? top为栈顶指示器,base为栈底指示器 ?/

用C语言描述的顺序栈的基本操作算法如下:

(1)压栈算法:

#define MAXSIZE 20

typedef char Elem;

Elem Stack[MAXSIZE];

int top=-1;

……

void Push( Elem x )

{ if( top == MAXSIZE - 1)

{printf(“\n 堆栈已满,无法执行压栈操作”);

exit(0);}

top ++;

Stack[top]=x;}

(2)出栈算法:

顺序栈结构定义同压栈算法。

Elem Pop( )

{ Elem x;

if( top ==-1)

{printf(“\n 栈已空,无元素可出栈!”);

exit(0);}

x = Stack[top];

top ――;

return x;}

事实上栈的应用十分广泛,例如程序设计中的函数嵌套调用和函数的递归调用都会大量用到栈来存放函数的返回地址,因此,栈空间的大小往往事先无法予估,通常采用两个栈共用一段连续空间的做法来弥补某些不足。两个堆栈共享同一连续空间的情况如图10.14所示:

用C语言描述这样的结构如下:

#define MAXSIZE <两个栈中共允许容纳的最大元素个数>

Elem DStack[MAXSIZE];

int Ltop =-1;Rtop = MAXSIZE ;

(3)两栈共享空间的压栈操作算法:

设栈结构已如前所定义,另设一变量WStack为判断压入左右栈标识。

void PushDStack(char WStack,Elem x)

{ if( Ltop +1==Rtop||Rtop-1==Ltop)

{ printf(“\n 栈空间已满,无法入栈!”);

exit(0);}

if( WStack !=‘L’&& WStack !=‘R’)

{ printf(“\n 参数错误!”);

exit(0);}

if(WStack ==‘L’)

{ Ltop ++;

DStack[Ltop] = x;}

else{ Rtop ――;

DStack[Rtop] = x;}

(4)两栈共享空间的退栈操作算法:

/?从左栈(WStack =’L’)或右栈(WStack =‘R’)出栈并按栈顶元素返回?/ Elem PopDStack(char WStack)

{ Elem x;

if( WStack !=‘L’&& WStack !=‘R’)

{ printf(“\n 参数错误!”);

exit(0);}

if( WStack ==‘L’)

{ if( Ltop < 0)

{ printf(“\n 左栈已空,不能进行退左栈操作!”);

exit(0);}

x = DStack[Ltop];

Ltop ――;

return x;}

else { if( Rtop > MAXSIZE -1)

{ printf(“\n 右栈已空,不能进行退右栈操作!”);

x = DStack[Rtop];

Rtop ++;

return x;}}

3.堆栈的链式存储结构及算法

如果说两个顺序栈共享一个连续的存储空间,在很大程度上提高了空间的利用率和算法的灵活性的话;那么栈的另一种存储结构━━链式存储(简称链栈),则使得多个栈共享某一连续空间成为可能,而且建立在这样的链栈上的操作算法也具备链式操作的普遍性。一个带头结点的链栈如图10.15所示:

用C语言描述的链栈的数据结构定义如下:(设数据元素类型为整型)

typedef int Elem;

typedef struct snode{

Elem data;

struct node ?link;}SNODE;

(1)链栈的压栈操作算法:

/?设链栈中结点结构已如上定义,且链栈初始化已完成?/

void PushLstack(SNODE ?top,Elem x)

{ SNODE ?s;

s = (SNODE ?) malloc (sizeof(SNODE));

if( s == NULL)

{ printf(“\n 内存已满,无法进栈!”);

exit(0);}

s ->data = x;

s ->link = top ->link;

top ->link = s;

}

(2) 链栈的退栈操作算法:

/? 弹出栈顶元素赋予变量x,释放栈顶结点空间,按x元素返回 ?/

Elem PopLstack( SNODE ?top)

{ Elem x;

SNODE *p;

p = top –>link;

if( p = = NULL)

{ printf(“\n 堆栈已空,无法退栈!”);

top –>link = p –>link;

x = p –>data;

free (p);

return x;}

所以无论是顺序栈还是链栈,从存储结构和操作上来讲都类似于线性表,尽管操作上有所限制,但其算法都是较为容易实现的,因此在现实生活中有较为广泛的应用。下面深入了解一下堆栈在操作系统中的作用。

堆栈作用的就是用来保存局部变量,从本质上讲也就是将CPU寄存器的值保存到RAM中。在uCOS中,每一个任务都有一个独立的任务堆栈。为了深入理解任务堆栈的作用,不妨分析任务从“出生”到“消亡”的整个过程,具体就是分析任务的建立,运行,挂起几种状态中任务堆栈的变化情况。

现在假设系统运行着一个由用户创建的用以完成打印工作的任务TPrint。TPrint最初通过OSTaskCreate()函数创建,在该函数中与任务堆栈有关的第一段代码是大家比较熟悉的函数OSTaskStkInit(),这个函数是在uCOS移植过程中必须实现的,其作用是“初始化堆栈”,其实就是预先在RAM中的一块区域中把任务将来运行开始时CPU寄存器应处的状态(正确值)准备好,之后,任务第一次被内核调度器调度运行时,将这些准备好的数据(寄存器的值)推到CPU的寄存器中,如果数据设计的合理,CPU便会按照我们预先设计好的思路运行。所以,“初始化堆栈”实际上是做了一个“未雨绸缪”的工作。这个过程中有两点是必须慎重考虑的,一是PC该如何定位,二是CPU的其它寄存器(除PC之外)该怎么处理。先说第一点,因为任务是第一次运行,而任务从本质上将就是一段代码,所以PC指针应该定位到这段代码的第一行处,即所谓的入口地址(Entry Point)处,这个地址由任务指针保存着,所以把该指针值赋给PC即可。第二,这段代码还未被执行过,所以代码中的变量与CPU的其它寄存器一点关系也没有,因此R0-R12,R14可随便给值,或者不赋值也可,让这些寄存器保持原来的值,显然后者更为简单。最后再给CPSR赋值,用户可以根据实际需要使系统运行于系统模式或管理模式。经过入栈和出栈,此时SP指向任务堆栈的最底端(就是已经定义好的任务堆栈数组的最后一个元素)。

之后任务代码开始正式运行,因为CPU的寄存器是有限的,所以在运行时不可避免地要把一些临时变量暂时保存到堆栈中。具体应保存到哪个地址呢,不用担心,SP知道(任务第一次运行时,这个地址就是任务堆栈数组的最后一个元素的地址)。任务堆栈的大小和任务代码中临时变量的数目有关,如果这段代码临变量特别多,堆栈就应设计的大一些。

然后,TPrint任务由于某种原因将要被挂起,所以应把任务的运行现场放

到堆栈里保护起来,TPrint任务再次运行时再把这个现场还原,任务就能从上次断点处紧接着运行。那么,这个现场是什么呢?从本质上讲,TPrint任务的运行过程就是CPU在执行一段特定的代码,所以这个现场就是CPU的现场,也就是寄存器的值。这些寄存器的值包含了代码执行时的所有信息,包括当前运行到了这段代码的哪个位置处(由PC值指明)。因此,把CPU的寄存器的值推入堆栈,然后记住栈顶指针的位置(SP由OSTCBCur->OSTCBStkPtr保存),当任务再次将要运行前,从SP指向的地址处依次把先前保存的CPU寄存器的值放到CPU的寄存器中,任务就可以从上次中断的地方准确无误地执行。这个过程就像突然把任务冻结了,与任务有关的任何东西都不能动了,一段时间之后又把任务解冻,与它有关的东西又变得可用,于是任务又可以跑起来了。

从以上分析可以看出,任务堆栈至始至终伴随着任务,与之生死与共,它的作用可以概括为两点:第一,当任务运行时,它用来保存一些局部变量;第二,当任务挂起时,它负责保存任务的运行现场,也就是CPU寄存器的值。有些朋友正是忽视了第一点,产生了“任务堆栈大小应是固定值的疑问”。这可能与对函数OSTaskStkInit()的理解有关,我们都称之为堆栈初始化函数,但此处的“初始化”与我们理解的初始化不太一样,平时讲的(变量的)初始化似乎指的是将变量的所有成员都一一初始化。而此处的堆栈的初始化仅仅是初始化了很大一个堆栈的一小部分,因为当前只有这部分是有用的,而剩余的大部分用不到,所以不用初始化,就像有些变量不用初始化一样(有默认值或随机值)。更深入一点考虑,当任务挂起时,任务堆栈中保存任务挂起前CPU寄存器的这一连续的区域肯定在整个堆栈的最上面;当任务重新开始运行时,SP弹出寄存器的值,这段区域变成空白的区域。而且,任务每次挂起前用来保存当前CPU寄存器这一连续区域在整个任务堆栈空间中是浮动的。

嵌入式技术基础与实践_习题参考答案

单片机习题参考答案 第1章概述习题参考答案 1.嵌入式系统的基本含义是什么?为什么说单片机是典型的嵌入式系统? 答:即MCU的含义是:在一块芯片上集成了中央处理单元(CPU)、存储器(RAM/ROM 等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。大部分嵌入式系统以MCU为核心进行设计。MCU从体系结构到指令系统都是按照嵌入式系统的应用特点专门设计的,它能很好地满足应用系统的嵌入、面向测控对象、现场可靠运行等方面的要求。因此以MCU为核心的系统是应用最广的嵌入式系统。 简述嵌入式系统的特点以及应用领域。 答:嵌入式系统属于计算机系统,但不单独以通用计算机的面目出现;嵌入式系统开发需要专用工具和特殊方法;使用MCU设计嵌入式系统,数据与程序空间采用不同存储介质;开发嵌入式系统涉及软件、硬件及应用领域的知识;嵌入式系统的其他特点,比如紧张的资源,较高稳定性要求,低功耗,低成本等。一般用于工业控制,智能家电,日常电子等领域。 3.比较MCU与CPU的区别与联系。 答:CPU是一个单独的PC处理器。而MCU,则有微处理器,存储器(RAM/ROM等)、定时器/计数器及多种输入输出(I/O)接口的比较完整的数字处理系统。所以可以这么说,MCU 是一个包含微处理器的嵌入式系统,而CPU紧紧是一个处理器而已。 4.举例说明嵌入式系统在日常生活中的应用。 答:日常数码产品:手机,MP3,U盘,相机等。 日常工业类:冰箱,空调,微波炉,汽车等。 5.C语言的那些特性使得它成为嵌入式系统中使用频率最高的高级语言。 答:相比底端汇编,更简单易学;与高级语言如(C++,C#,java等)相比,执行效率高,编译后的编码体积小,而且支持好的编译器还支持嵌入汇编代码;对位的操纵能力很强。6.阅读光盘中【第01章(概述)阅读资料】中的“嵌入式C语言工程简明规范”,用一页纸给出嵌入式C语言工程简明规范的要点。 答:此规范主要针对单片机编程语言和08编译器而言,包括命名、注释、编码规范性等内容。建议在一个工程或者一个项目中尽量遵循相同的代码规范,而不是说你只能拥有一个代码规范。 (1)命名规则:命名清晰明了,有明确含义,使用完整单词或约定俗成的缩写。通常,较短的单词可通过去掉元音字母形成缩写;较长的单词可取单词的头几个字母形成缩写。即"见名知意";命名风格要自始至终保持一致;命名中若使用特殊约定或缩写,要有注释说明;为了代码复用,命名中应避免适用与具体项目相关的前缀;应使用英语命名。 (2)注释:注释基本原则就是有助于对程序的阅读理解,说明程序在"做什么",解释代码的目的、功能和采用的方法。一般情况源程序有效注释量在30%左右。注释语言必须准确、易懂、简洁。边写代码边注释,修改代码同时修改相应的注释,不再有用的注释要删除。汇编和C中都用"//",取消";" 不使用段注释" /* */ "(调试时可用)。 使用文件注释必须说明文件名、项目名称、函数功能、创建人、创建日期、版本信息等相关信息。修改文件代码时,应在文件注释中记录修改日期、修改人员,并简要说明此次修改的目的。所有修改记录必须保持完整。文件注释放在文件顶端,用"/*……*/"格式包含。

arm堆栈操作(DOC)

arm堆栈操作 arm堆栈的组织结构是满栈降的形式,满栈即sp是要停留在最后一个进栈元素,降:就是堆栈的增长方向是从高地址向低地址发展。 arm对于堆栈的操作一般采用LDMFD (pop)和STMFD (push) 两个命令。 以前困惑的就是STMFD 命令对于操作数是按照什么顺序压栈的 比如:STMFD sp!{R0-R5,LR} 进栈顺序是: 高地址(1方式) LR R5 R4 ``````` R0 <-sp 低地址 还是: 高地址(2方式) R0

R1 ``` R5 LR <-sp 低地址 现在通过下表,可以轻松的解决这个问题:

按照图表,可知STMFD对应的是STMDB,根据arm指令手册,可知STMDB入栈顺序是(1方式) 而LDMFD对应的是LDMIA,这样这两个操作就可以成功配对: 以下是我在学习ARM指令中记录的关于堆栈方面的知识 1、寄存器R13 在ARM 指令中常用作堆栈指针 2、对于R13 寄存器来说,它对应6 个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的

记号来区分不同的物理寄存器: R13_ 其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。 3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。 4、有四种类型的堆栈: 堆栈是一种数据结构,按先进后出(First In Last Out,FILO)的方式工作,使

孟祥莲嵌入式系统原理及应用教程部分习题答案

习题1 1. 嵌入式系统的概念的是什么?答:嵌入式系统是以应用为中心,以计算机技 术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。(嵌入式系统是嵌入式到对象体系中的,用于执行独立功能的专用计算机系统。) 2. 嵌入式系统的特点是什么? 答:系统内核小;专用性强;运行环境差异大;可靠性要求高;系统精简和高实时性操作系统;具有固化在非易失性存储器中的代码嵌入式系统开发和工作环境 4. 嵌入式系统的功能是什么?答:提供强大的网络服务小型化,低成本,低 功能;人性化的人机界面;完善的开发平台 5. 嵌入式系统的硬件平台由哪些部分组成?答:嵌入式系统的硬件是以嵌入式处理器为核心,由存储器I/O 单元电路,通信模块,外部设备必要的辅助接口组成的。 7. 嵌入式操作系统的主要特点是什么?答:体积小;实时性;特殊的开发调试环境。 8. 叙述嵌入式系统的分类。答:按嵌入式微处理器的位数分类可以分为4 位、 8 位、16 位、32 位和64 位等;按软件实时性需求分类可以分为非实时系统(如PDA), 软实时系统(如消费类产品)和硬实时系统(如工业实时控制系统)按嵌入式系统的复杂程度分类可以分为小型嵌入式系统,中型嵌入式系统和复杂嵌入式系统。 习题2 处理器和工作状态有哪些?

答:ARM犬态:此时处理器执行32位的的字对齐的ARS旨令。 Thumb犬态:此时处理器执行16位的,半字对齐的Thumb旨令 2.叙述ARM9内部寄存器结构,并分别说明R13 R14 R15寄存器的 作用。 答:共有37个内部寄存器,被分为若干个组(BANK,这些寄存器包括31个通用寄存器,包括程序计数器(PC指针)6个状态寄存器。R13用作堆栈指针,R14称为子程序链接寄存器,R15用作程序计数器。处理器的工作模式有哪些? 答:用户模式:ARM处理器正常的程序执行状态。 快速中断模式:用于高速数据传输或通道处理 外部中断模式:用于通用中断处理管理模式:操作系统使用的保护模式数据访问终止模式:当数据或指令预期终止时进入该模式,可用于虚拟存储器及存储保护 系统模式:运行具有特权的操作系统任务 未定义指令终止模式:当未定义的指令执行时进入该模式,可用 于支持硬件协处理器的软件仿真。 微处理器支持的数据类型有哪些? 答:ARM微处理器中支持字节(8位)、半字(16位),字(32 位)

嵌入式系统原理及应用题目要求+程序代码

《嵌入式系统原理及应用》作业题目 作业1 一、调试下面的程序,并回答问题。 .global _start .text _start: LDR SP, =src LDMFD SP!,{R0-R6} STMFD SP!,{R0-R6} LDMFD SP!,{R3} LDMFD SP!,{R4} LDMFD SP!,{R5} LDMFD SP!,{R6} LDMFD SP!,{R0} LDMFD SP!,{R1} LDMFD SP!,{R2} stop: b stop .ltorg src: .long 1,2,3,4,5,6,7 .end 问:该程序完成了什么功能? 答: 该程序完成的功能:先把数据区堆栈中的1~7这七个数据送给R0~R0寄存器,然后又把寄存器列表中的R0~R7存入堆栈,然后又依次把堆栈中的1~7这七个数送给R3~R6,R0~R2,然后程序就结束了,在取数和存数的过程中。堆栈指针sp由0x0000变到0x8030再到0x804c,然后到0x8030,然后依次加4,最后到0x804c;程序计数器R15(PC)由0x8000地址依次加4 。 二、LDMFD,STMFD伪代码实现的原理。 答: 指令STMFD和LDMFD分析: 根据ATPCS规则,我们一般使用FD(Full Descending)类型的数据栈!所以经常使用的指令就有STMFD和LDMFD, 通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD 的地址计算方法:

STMFD指令的寻址方式为事后递减方式(DB) 而DB寻址方式实际存地址为: start_address = Rn - (Number_Of_Set_Bits_In(register_list)*4) end_address = Rn - 4 STM指令操作的伪代码: if ConditionPassed(cond) then address = start_address for i = 0 to 15 if register_list[i] == 1 Memory[address] = Ri address = address + 4 有上面两个伪代码可以得出STMFD SP!,{R0-R7,LR} 的伪代码如下:SP =SP -9×4; address =SP; for i = 0 to 7 Memory[address] = Ri; address= address + 4; Memory[address] = LR; LDMFD指令的寻址方式为事后递增方式(IA) IA存的实际地址的伪代码 start_address = Rn end_address = Rn + (Number_of_set_bits_in(register_list)*4) - 4 LDM指令操作的伪代码(未考虑PC寄存器): if ConditionPassed(cond) then address = start_address for i = 0 to 15 if register_list[i] == 1 Ri =Memory[address,4] address = address + 4 所以LDMFD SP!,{R0-R7,PC}^ (;恢复现场,异常处理返回)伪代码是: address = SP; for i = 0 to 7 Ri = Memory[address ,4] address = address + 4; SP = address; 作业2 一、用移位操作完成(R0)*10运算。 参考程序: .text .global _start

孟祥莲--嵌入式系统原理及应用教程-部分习题答案20150618

孟祥莲--嵌入式系统原理及应用教程-部分习题答案20150618

习题1 1.嵌入式系统的概念的是什么? 答:嵌入式系统是嵌入式到对象体系中的,用于执行独立功能的专用计算机系统。 2.嵌入式系统的特点是什么? 答:系统内核小;专用性强;运行环境差异大;可靠性要求高;系统精简和高实时性操作系统;具有固化在非易失性存储器中的代码嵌入式系统开发和工作环境 4.嵌入式系统的功能是是什么? 答:提供强大的网络服务小型化,低成本,低功能;人性化的人机界面;完善的开发平台 5.嵌入式系统的硬件平台由哪些部分组成? 答:嵌入式系统的硬件是以嵌入式处理器为核心,由存储器I/O单元电路,通信模块,外部设备必要的辅助接口组成的。 7.嵌入式操作系统的主要特点是什么? 答:体积小;实时性;特殊的开发调试环境。8.叙述嵌入式系统的分类。 答:按嵌入式微处理器的位数分类可以分为4位、8位、16位、32位和64位等;按软件实时性需求分类可以分为非实时系统(如PDA),软

实时系统(如消费类产品)和硬实时系统(如工业实时控制系统);按嵌入式系统的复杂程度分类可以分为小型嵌入式系统,中型嵌入式系统和复杂嵌入式系统。 习题2 1.ARM9处理器和工作状态有哪些? 答:ARM状态:此时处理器执行32位的的字对齐的ARM指令。 Thumb状态:此时处理器执行16位的,半字对齐的Thumb指令 2.叙述ARM9内部寄存器结构,并分别说明R13、R14、R15寄存器的作用。 答:共有37个内部寄存器,被分为若干个组(BANK),这些寄存器包括31个通用寄存器,包括程序计数器(PC指针)6个状态寄存器。R13用作堆栈指针,R14称为子程序链接寄存器,R15用作程序计数器。 4.ARM处理器的工作模式有哪些? 答:用户模式:ARM处理器正常的程序执行状态。 快速中断模式:用于高速数据传输或通道处

嵌入式原理与应用复习题

一.单项选择题 1. 下面哪项为错误的说法(A) A. 冯·诺依曼结构共用数据存储空间和程序存储空间,不共享存储器总线 B. 哈佛结构有分离的数据和程序空间及分离的访问总线 C. 哈佛结构在指令执行时,取址和取数可以进行并行操作 D. 哈佛结构指令执行时效率更高 2. 下列关于/etc/fstab文件描述,正确的是(D) A. fstab文件只能描述属于linux的文件系统 B. CD_ROM和软盘必须是自动加载的 C. fstab文件中描述的文件系统不能被卸载 D. 启动时按fstab文件描述内容加载文件系统 3. ARM9和ARM7的重要区别是(A) A . ARM9带有MMU功能 B . ARM9支持Thumb指令集 C . ARM9带有Cache功能 D . ARM9是哈佛结构 4. 如果数据的存储格式是大端模式,32bit宽的数0x在大端模式下的CPU内存中 的存放(假设从地址0x4000开始)。内存地址为0x4001的内容是(A) 5. 文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户 的写权限,下列命令正确的是(A) a+x g+w e x e r1765e x e r 1 o+x e x e r1g+w e x e r1 6. NAND FLASH和NOR FLASH的区别正确的是(D) A. NOR的读速度比NAND稍慢一些 的擦除速度远比NOR的慢 的写入速度比NOR慢很多 D.大多数写入操作需要先进行擦除操作。 7. gcc使用下列哪个选项可以查看编译的详细过程(B) A. -o B. -v D. -g 8. Boot Loader 的stage2通常使用C语言实现,以完成复杂的功能,并增加可读 性和可移植性,以下哪一步骤属于stage2的内容(D) A.为加载Boot Loader 的stage2 准备RAM 空间 B.设置好堆栈 C.硬件设备初始化 D.将kernel 映像和根文件系统映像从flash 上读到RAM 空间中 9. 怎样新建一个新文件:(A) 10. 在vi编辑器的命令模式中,删除一行的命令是:(B)

(完整版)嵌入式系统原理及应用复习知识点总结

第一章 1、嵌入式系统的应用范围:军事国防、消费电子、信息家电、网络通信、工业控制。 2、嵌入式系统定义:嵌入式系统是以应用为中心,以计算机技术为基础,软件与硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。(嵌入式的三要素:嵌入型、专用性与计算机系统)。 3、嵌入式系统的特点:1)专用性强;2)实时约束;3)RTOS;4)高可靠性;5)低功耗;6)专用的开发工具和开发环境;7)系统精简; 4、嵌入式系统的组成: (1)处理器:MCU、MPU、DSP、SOC; (2)外围接口及设备:存储器、通信接口、I/O接口、输入输出设备、电源等;(3)嵌入式操作系统:windows CE、UCLinux、Vxworks、UC/OS; (4)应用软件:Bootloader 5、嵌入式系统的硬件:嵌入式微处理器(MCU、MPU、DSP、SOC),外围电路,外部设备; 嵌入式系统的软件:无操作系统(NOSES),小型操作系统软件(SOSES),大型操作系统软件(LOSES)注:ARM处理器三大部件:ALU、控制器、寄存器。 6、嵌入式处理器特点:(1)实时多任务;(2)结构可扩展;(3)很强的存储区保护功能;(4)低功耗; 7、DSP处理器两种工作方式:(1)经过单片机的DSP可单独构成处理器;(2)作为协处理器,具有单片机功能和数字处理功能; 第二章 1、IP核分类:软核、固核、硬核; 2、ARM处理器系列:(1)ARM7系列(三级流水,thumb指令集,ARM7TDMI); (2)ARM9系列(DSP处理能力,ARM920T)(3)ARM/OE(增强DSP)(4)SecurCone 系列(提供解密安全方案);(5)StrongARM系列(Zntle产权);(6)XScale系列(Intel产权);(7)Cortex系列(A:性能密集型;R:要求实时性;M:要求低成本) 3、ARM系列的变量后缀:(1)T:thumb指令集;(2)D:JTAG调试器;(3)快

一个故事看懂单片机中的堆栈

一个故事看懂单片机中的堆栈 因为单片机有CPU、存储器、IO等等,使他(人性化一点以配合下文)看起来就像一个比较小的计算机,所以在理解单片机的时候如果能把你之前有的那些也许仅仅是直 觉上的对计算机的理解融入进来的话,可能会对你学习 单片机的概念有极大的帮助,至少对于我是这样的。 我想在关于单片机的众多让你头晕脑胀、摸不着头脑甚 至想撞墙的概念里面,“堆栈”可能是其中 最可恶的一个,因为即使单单是从汉语的角度来理解这 个词就已经让你很晕了,其实我最初也想不通这是哪位 大侠的创意,不过不用担心,这里我们完全不去讨论关 于这个词的问题(这个词用得其实很好“堆”和“栈”都有他们各自思,准确的概括了这 个区域的功能,有兴趣可以Baidu一下),这里我会打一个比较有趣的比方,以此来绕过那些令你想撞墙的概念,并使你在直觉上对“堆栈”这个概念有一个 深刻的理解。你基本上应该清楚,单片机里面是有存储 区和CPU的,如果你不清楚,那么我刚刚告诉你了,请 记住。现在,请你把单片中的CPU想成一个人(你完全可以把他想成是你宿舍的那个天天和你吵嘴的同学,一会 你就会发现这会非常有趣)在这里就叫他C哥吧,不过这

个人不同于常人,有一些特点,一会我们会慢慢说清楚,现在要告诉你的关于这个人的第一个特点 是:他的记忆能力很差。下面,请你把存储区想象成一 个一个排好的小盒子,这些盒子的作用大致可以分成两类:1、保存写有你命令的纸条,比如你在某个盒子里面的纸条上写着:去洗我的袜子!;2、保存你的一些东西,比如你那双正在污染宿舍空气的臭袜子。因为C哥是一 个记忆力不怎么好的人,所以,这些盒子都有自己的编号,以方便他查找。那么,现在,我们可以来说明一下单片机是如何工作的了。首先,你要把所有的命令还有 需要处理的东西放进那些小盒子,比如刚才提到的你那 双待洗的袜子还有那张纸条,这时你应该发现C哥另一 个特点:笨——他只会做你明确告诉他的事情,也就是说,如果你没有在纸条上写“去洗我的袜子!”,那么C哥极有可能会无动于衷地看着你的袜子直到他被熏晕倒,当然,更可能的情况是他根本 找不到你的袜子…好了,当你把要做的事情和该 怎么做写到盒子里之后,下面的任务就交给C哥了。C哥做事真的很讲原则,他会按照你给定的顺序或者 ——如果你没有给定的话,根据盒子上面的 编号按照从小到大的顺序——一个一个地打 开盒子,读取里面的命令、处理相应的事件,直到所有

嵌入式系统应用与学习心得体会

μC/OS嵌入式实时操作系统的应用和学习心得μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化。它是一个完整的、可移植、可固化、可裁剪的抢占式实时多任务内核。μC/OS-II 绝大部分的代码是用ANSII的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。至今,从8位到64位,μC/OS-II已在超过40种不同架构上的微处理器上运行。μC/OS-II已经在世界范围内得到广泛应用,包括很多领域,如手机、路由器、集线器、不间断电源、飞行器、医疗设备及工业控制上。实际上,μC/OS-II已经通过了非常严格的测试,并且得到了美国航空管理局的认证,可以用在飞行器上。这说明μC/OS-II是稳定可靠的,可用于与人性命攸关的安全紧要系统。除此以外,μC/OS-II 的鲜明特点就是源码公开,便于移植和维护。 我们在学习μC/OS嵌入式实时操作系统时用的教科书是任哲编著的《嵌入式实时操作系统μC/OS-Ⅱ原理及应用》,这本书介绍了嵌入式实时操作系统μC/OS-Ⅱ内核的任务管理和调度、系统时钟和节拍服务、时间管理、中断、任务的通信和同步、内存的简单管理原理,同时给出了实例。最后,还介绍了μC/OS-Ⅱ的移植方法。 在多任务系统中,内核负责管理各个任务,或者说为每个任务分配CPU时间,并且负责任务之间的通讯。内核提供的基本服务是任务切换。之所以使用实时内核可以大大简化应用系统的设计,是因为实时内核允许将应用分成若干个任务,由实时内核来管理它们。内核本身也增加了应用程序的额外负荷,代码空间增加ROM的用量,内核本身的数据结构增加了RAM的用量。但更主要的是,每个任务要有自己的栈空间,这一块吃起内存来是相当厉害的。内核本身对CPU的占用时间一般在2到5个百分点之间。μC/OS-Ⅱ有一个精巧的内核调度算法,实时内核精小,执行效率高,算法巧妙,代码空间很少,具有如下特点:只支持基于优先级的抢占式调度算法,不支持时间片轮循;64个优先级,只能创建64个任务,用户只能创建56个任务;每个任务优先级都不相同;不支持优先级逆转;READY 队列通过内存映射表实现快速查询;效率非常高;支持时钟节拍;支持信号量,消息队列,事件控制块,事件标志组,消息邮箱任务通讯机制;支持中断嵌套,中断嵌套层数可达255层,中断使用当前任务的堆栈保存上下文;每个任务有自己的堆栈,堆栈大小用户自己设定;支持动态修改任务优先级;任务TCB为静态数组,建立任务只是从中获得一个TCB,不用动态分配,释放内存;任务堆栈为用户静态或者动态创建,在任务创建外完成,任务创建本身不进行动态内存分配;任务的总个数(OS_MAX_TASKS)由用户决定;0优先级最高,63优先级最低;有一个优先级最低的空闲任务,在没有用户任务运行的时候运行。 任务的调度核心主要是在任务就绪表中查找具有最高优先级别的就绪任务及实现任务切换,即将找到的的最高优先级别的任务的“任务号”---> “当前任务的任务号OSPrioCur”;从OSTCBPrioTbl[]取出最高优先级别任务的任务控制块首地址---> “当前任务的任务控制块指针OSTCBCur”,最后调用OS_TASK_SW()完成现场切换(即将CPU的寄存器信息保存到当前正运行任务的私栈中,然后从待运行的高优先级别的任务私栈中弹出原先保存寄存器信息到

孟祥莲嵌入式系统原理及应用教程 部分习题答案

习题 1 1.嵌入式系统的概念的是什么? 答:嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。(嵌入式系统是嵌入式到对象体系中的,用于执行独立功能的专用计算机系统。) 2.嵌入式系统的特点是什么? 答:系统内核小;专用性强;运行环境差异大;可靠性要求高;系统精简和高实时性操作系统;具有固化在非易失性存储器中的代码嵌入式系统开发和工作环境 4.嵌入式系统的功能是什么? 答:提供强大的网络服务小型化,低成本,低功能;人性化的人机界面;完善的开发平台 5.嵌入式系统的硬件平台由哪些部分组成? 答:嵌入式系统的硬件是以嵌入式处理器为核心,由存储器I/O单元电路,通信模块,外部设备必要的辅助接口组成的。 7.嵌入式操作系统的主要特点是什么? 答:体积小;实时性;特殊的开发调试环境。 8.叙述嵌入式系统的分类。 答:按嵌入式微处理器的位数分类可以分为4位、8位、16位、32位和64位等;按软件实时性需求分类可以分为非实时系统(如PDA),软实时系统(如消费类产品)和硬实时系统(如工业实时控制系统);按嵌入式系统的复杂程度分类

可以分为小型嵌入式系统,中型嵌入式系统和复杂嵌入式系统。 习题2 1.ARM9处理器和工作状态有哪些? 答:ARM状态:此时处理器执行32位的的字对齐的ARM指令。 Thumb状态:此时处理器执行16位的,半字对齐的Thumb指令 2.叙述ARM9内部寄存器结构,并分别说明R13、R14、R15寄存器的作用。答:共有37个内部寄存器,被分为若干个组(BANK),这些寄存器包括31个通用寄存器,包括程序计数器(PC指针)6个状态寄存器。R13用作堆栈指针,R14称为子程序链接寄存器,R15用作程序计数器。 4.ARM处理器的工作模式有哪些? 答:用户模式:ARM处理器正常的程序执行状态。 快速中断模式:用于高速数据传输或通道处理 外部中断模式:用于通用中断处理 管理模式:操作系统使用的保护模式 数据访问终止模式:当数据或指令预期终止时进入该模式,可用于虚拟存储器及存储保护 系统模式:运行具有特权的操作系统任务 未定义指令终止模式:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 5.ARM微处理器支持的数据类型有哪些? 答:ARM微处理器中支持字节(8位)、半字(16位),字(32位)三种数据类型。其中,字需要4字节对齐,半字需要2字节对齐。

嵌入式作业题答案概要

第1章嵌入式系统概述 1.什么是嵌入式系统?嵌入式系统的组成? 答:嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。组成:嵌入式处理器、外围设备、操作系统、应用软件。 2.典型的嵌入式处理器有哪些? 3.答:微处理器、微控制器、DSP处理器、片上系统SOC。 4.典型的RTOS操作系统有哪些? 5.答:嵌入式Linux、μCLinux、Windows Embedded CE、Windows Embedded Compact 7、μC/OS-II、μC/OS-III、VxWorks、eCos等。 6.列举身边的嵌入式应用产品? 7.嵌入式系统的设计可以分成四个阶段:需求分析、架构设计和概要设计、详细设计和开发、测试反馈。 第2章 Cortex-M体系结构 8.ARM Cortex系统的处理器分为:____A_____、____R_____、_____M_____。 9.ARM Cortex-M3为32位微控制器,请问32位指的是CPU字长。 10.3、Cortex-M3 处理器能够以小端格式或大端格式访问存储器中的数据字,而访问代码时始使用小端格式。 11.ARM Cortex-M3体系结构采用哈佛总线结构,拥有独立的指令总线和数据总线,可以让取指与数据访问并行进行。 12.CM3寄存器分为通用寄存器,包括R0~R15。和特殊功能寄存器,包括程序状态寄存器、异常屏蔽寄存器、控制寄存器。 13.寄存器R13是堆栈指针寄存器。 14.寄存器R14是程序连接寄存器。 15.寄存器R15是程序PC。 16.CM3的堆栈指针分为__MSP__、__PSP_。存储器堆栈堆栈分为:向上生长(即向高地址方向生长)的递增堆栈;向下生长(即向低地址方 向生长),称为递减堆栈。堆栈指针指向最后压入堆栈的有效数据项,称为满堆栈;堆栈指针指向下一个数据项放入的空位置,称为空堆栈。试判断CM3属于递减堆栈堆栈和满堆栈堆栈。 17.在CM3中记录程序状态的寄存器是___xPSR____。都分别有些什么状态_应用状态、中断状态、可执状态。 18.PRIMASK寄存器的作用是___中断屏蔽寄存器____。 19.寄存器CONTROL的作用是控制处理器工作级别及堆栈切换。 20.CM3支持的4GB存储空间被划分成:CODE、片上RAM、片上外设、片外RAM、片外外设、内核私有6个区域。 21.CM3中有一个位绑定区分别位于片上RAM和片上外设区,其大小为1M字节,由32M字节空间的位绑定别名区来访问。 22.CM3支持16种系统异常,和240种外设中断。 23.SysTick是一个___24_____位的系统定时器。通常的功能是_作为操作系统时钟__。 第3章STM32基础及最小系统设计 24.STM32F103RBT7芯片的在片Flash存储器有128KB 字节,在片SRAM存储器有20KB 字节。 25.STM32F103RBT7芯片工作时电源电压是 3.3 V。 26.STM32最小系统电路包含:MCU芯片、电源电路、时钟电路、复位电路和启动设置电路。 27.连接在APB1上的设备有:电源接口、备分接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、WatchDog、Timer2、Timer3和Timer4。 28.连接在APB2上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、I/O(PA~PE,第二功能I/O)。 29.假定STM32F103单片机外部振荡器是8MHz。执行下列程序。 void BSP_Init(void) { RCC_HSEConfig(RCC_HSE_ON); HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus == SUCCESS) { RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK=72MHz RCC_PCLK1Config(RCC_HCLK_Div2); // PCLK1 = HCLK/2 =38MHz RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK =72MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); // PLLCLK = 8 * 9 = 72MHz RCC_PLLCmd(ENABLE); // Enable PLL

2015年本科期末考试《嵌入式系统原理及应用》最终版整理复习要点

嵌入式复习大纲 第一章 1、嵌入式系统定义及概念: 嵌入式系统是以应用为中心、以计算机技术为基础、软硬件可裁减、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统 2、嵌入式系统的特点:(3个) 1)嵌入式系统通常是面向特定应用的; 2)嵌入式系统功耗低、体积小、集成度高、成本低; 3)嵌入式系统具有较长的生命周期; 4)嵌入式系统具有固化的代码; 3、嵌入式处理器的分类: 1)嵌入式微处理器(EMPU); 2)嵌入式微控制器(EMCU); 3)嵌入式DSP处理器(EDSP); 4)嵌入式片上系统(ESoC)。 4、嵌入式系统的组成: 由硬件层、中间层、系统软件层和应用软件层组成。 (1)硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等) (2)硬件层与软件层之间为中间层,也称为硬件抽象层,该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。BSP具有以下两个特点。 (3)系统软件层由实时多任务操作系统、、文件系统、图形用户接口、网络系统及通用组件模块组成。 5、嵌入式操作系统: 嵌入式实时操作系统μC/OS-II、嵌入式Linux、Windows Embedded、VxWorks、pSOS、等,以及应用在智能手机和平板电脑的Android、iOS等 6、嵌入式系统的设计方法:(需交叉编译和调试环境) (1)系统定义与需求分析 (2)系统设计方案的初步确立 (3)初步设计方案性价比评估与方案评审论证 (4)完善初步方案、初步方案实施 (5)软硬件集成测试 (6)系统功能性能测试及可靠性测试 第二章 1、ARM的CISC、RISC ARM7~ARM9 (1)CISC特点:复杂指令、各种类型的内存寻址方式、微程序结构、效率高 (2)RISC特点:固定指令长度、指令流水线处理、简化内存管理、硬件接线式控制、单周期执行、复杂度存于编译程序内 (3)冯诺依曼结构:输入输出设备、运算器、控制器、存储器 主要贡献:提出并实现了“存储程序”的概念 2、ARM7:采用3级流水线结构,采用冯诺依曼结构(程序存储与数据存储统一编址) ARM9:采用5流水线结构,采用哈弗体系结构(程序存储器与数据存储器分开独立编址) ARM10:采用6流水线结构,采用哈弗体系结构

孟祥莲 嵌入式系统原理及应用教程 部分习题答案20150618

习题1 1.嵌入式系统的概念的是什么? 答:嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。(嵌入式系统是嵌入式到对象体系中的,用于执行独立功能的专用计算机系统。) 2.嵌入式系统的特点是什么? 答:系统内核小;专用性强;运行环境差异大;可靠性要求高;系统精简和高实时性操作系统;具有固化在非易失性存储器中的代码嵌入式系统开发和工作环境 4.嵌入式系统的功能是什么? 答:提供强大的网络服务小型化,低成本,低功能;人性化的人机界面;完善的开发平台5.嵌入式系统的硬件平台由哪些部分组成? 答:嵌入式系统的硬件是以嵌入式处理器为核心,由存储器I/O单元电路,通信模块,外部设备必要的辅助接口组成的。 7.嵌入式操作系统的主要特点是什么? 答:体积小;实时性;特殊的开发调试环境。 8.叙述嵌入式系统的分类。 答:按嵌入式微处理器的位数分类可以分为4位、8位、16位、32位和64位等;按软件实时性需求分类可以分为非实时系统(如PDA),软实时系统(如消费类产品)和硬实时系统(如工业实时控制系统);按嵌入式系统的复杂程度分类可以分为小型嵌入式系统,中型嵌入式系统和复杂嵌入式系统。 习题2 1.ARM9处理器和工作状态有哪些? 答:ARM状态:此时处理器执行32位的的字对齐的ARM指令。 Thumb状态:此时处理器执行16位的,半字对齐的Thumb指令 2.叙述ARM9内部寄存器结构,并分别说明R13、R14、R15寄存器的作用。 答:共有37个内部寄存器,被分为若干个组(BANK),这些寄存器包括31个通用寄存器,包括程序计数器(PC指针)6个状态寄存器。R13用作堆栈指针,R14称为子程序链接寄存器,R15用作程序计数器。 4.ARM处理器的工作模式有哪些? 答:用户模式:ARM处理器正常的程序执行状态。 快速中断模式:用于高速数据传输或通道处理 外部中断模式:用于通用中断处理 管理模式:操作系统使用的保护模式 数据访问终止模式:当数据或指令预期终止时进入该模式,可用于虚拟存储器及存储保护 系统模式:运行具有特权的操作系统任务 未定义指令终止模式:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 5.ARM微处理器支持的数据类型有哪些? 答:ARM微处理器中支持字节(8位)、半字(16位),字(32位)三种数据类型。其中,字需要4字节对齐,半字需要2字节对齐。 7.叙述CPSR寄存器及其各位数据位的作用? 答:CPSR是当前程序状态寄存器,是在任何模式下都可以访问的通用状态寄存器,它包括

孟祥莲嵌入式系统原理及应用教程部分习题答案

习题1 1.嵌入式系统的概念的是什么? 答:嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。(嵌入式系统是嵌入式到对象体系中的,用于执行独立功能的专用计算机系统。) 2.嵌入式系统的特点是什么? 答:系统内核小;专用性强;运行环境差异大;可靠性要求高;系统精简和高实时性操作系统;具有固化在非易失性存储器中的代码嵌入式系统开发和工作环境 4.嵌入式系统的功能是什么? 答:提供强大的网络服务小型化,低成本,低功能;人性化的人机界面;完善的开发平台 5.嵌入式系统的硬件平台由哪些部分组成? 答:嵌入式系统的硬件是以嵌入式处理器为核心,由存储器I/O单元电路,通信模块,外部设备必要的辅助接口组成的。 7.嵌入式操作系统的主要特点是什么? 答:体积小;实时性;特殊的开发调试环境。 8.叙述嵌入式系统的分类。 答:按嵌入式微处理器的位数分类可以分为4位、8位、16位、32位和64位等;按软件实时性需求分类可以分为非实时系统(如PDA),软实时系统(如消费类产品)和硬实时系统(如工业实时控制系统);

按嵌入式系统的复杂程度分类可以分为小型嵌入式系统,中型嵌入式系统和复杂嵌入式系统。 习题2 处理器和工作状态有哪些? 答:ARM状态:此时处理器执行32位的的字对齐的ARM指令。 Thumb状态:此时处理器执行16位的,半字对齐的Thumb指令2.叙述ARM9内部寄存器结构,并分别说明R13、R14、R15寄存器的作用。 答:共有37个内部寄存器,被分为若干个组(BANK),这些寄存器包括31个通用寄存器,包括程序计数器(PC指针)6个状态寄存器。R13用作堆栈指针,R14称为子程序链接寄存器,R15用作程序计数器。处理器的工作模式有哪些? 答:用户模式:ARM处理器正常的程序执行状态。 快速中断模式:用于高速数据传输或通道处理 外部中断模式:用于通用中断处理 管理模式:操作系统使用的保护模式 数据访问终止模式:当数据或指令预期终止时进入该模式,可用于虚拟存储器及存储保护 系统模式:运行具有特权的操作系统任务 未定义指令终止模式:当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。 微处理器支持的数据类型有哪些? 答:ARM微处理器中支持字节(8位)、半字(16位),字(32位)

一文让你彻底明白“应用工程的堆与栈”

应用工程的堆与栈 一、基本知识 C语言因其高效率而成为目前嵌入式微控制器(MCU)编程中使用最多的编程语言,堆栈是C语言区别于汇编语言的最大特点,也是其高效运行的基础。1、定义 1)基本含义 事实上,堆栈包括堆(heap)和栈(s tack)两个不同的概念,只是因为其二者都占用MCU的片上RAM空间并对系统内存进行分配和管理,而被习惯性放在一起说。 在单片机应用中,堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。 可以理解成堆栈是位于MCU片上RAM空间上的一个特殊存储区。 小注: ?堆:队列优先,先进先出(FIFO—first in first out) ?栈,先进后出(FILO—First-In/Last-Out)。 2)详解介绍 ①堆(heap)是用于动态分配内存的RAM区域,heap的空间是用户手动申请和释放的:C语言中的malloc(size),calloc(num,size)函数分配heap,释放使用free(*heap)函数; ②栈(stack)用于分配函数临时变量、在函数调用或中断产生时保存内核CPU 运行时上下文(run time context—包括内核CPU通用寄存器、SP和PC寄存器、状态寄存器(如S12内核的CCR寄存器,存放内核CPU的计算状态)及函数当前的临时变量)以及函数参数传递;其占用的RAM大小与CPU架构(不同的内核CPU其位宽和CPU寄存器数量各不相同)和编译器采用的嵌入式应用程序二进制接口(Embedded Application Binary Interface)有关。 小注: ?栈(Stack)是CPU根据程序运行需求自动分配(也叫push,即压栈)和释放 (也称作pop,即出栈)的,无需用户自己维护,但需要在C工程的链接文件

ARM9在嵌入式中的应用实例

ARM9在嵌入式中的应用实例 ——启动程序的实现 【摘要】:本文给出了基于ARM9嵌入式系统的启动程序的实现流程,并针对存储器控制单元的使用以及目标文件的分布装载等技术难点进行详细分析。 【关键词】嵌入式系统、启动程序、ARM9 嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。嵌入式系统的核心部件是各种类型的嵌入式处理器,随着嵌入式系统不断深入到人们生活中的各个领域,嵌入式处理器得到前所未有的飞速发展。 典型的32位RISC芯片──ARM处理器,不论是在PDA,STB,DVD等消费类电子产品中,还是在GPS,航空,勘探,测量等军方产品中都得到了广泛的应用。越来越多的芯片厂商早已看好ARM的前景,如Intel,NS,Ateml,Philips,NEC,CirrusLogic等公司都有相应的产品。在1999年,ARM突破1.5亿个,市场份额超过了50%,已经成为业界的龙头。 在基于ARM9的嵌入式系统过程中,发现技术难点主要在于系统启动程序的编写,为此本文详细论述了在ARM9基础上开发嵌入式系统时启动程序的实现。 1.启动程序流程 嵌入式系统的资源有限,程序通常都是固化在ROM中运行。ROM中程序执行前,需要对系统硬件和软件运行环境进行初始化,这些工作由用汇编语言编写的启动程序完成。 启动程序是嵌入式程序的开头部分,应与应用程序一起固化在ROM中,并首先在系统上运行。它应包含进各模块中可能出现的所有段类,并合理安排它们的次序。 写好启动程序是设计好嵌入式程序的关键,系统启动程序所执行的操作依赖于正在开发其软件的系统,一般流程如下: 2.详细步骤 (1)设置入口指针 启动程序首先必须定义入口指针,而且整个应用程序只有一个入口指针。 (2)设置中断向量 ARM7要求中断向量表必须设置在从0地址开始,连续8×4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令错误、数据存取错误、IRQ、FIQ和一个保留的中断向量。

堆栈在树形结构中使用的实例

'================================================================== ============= ' 堆栈在树形结构中使用的实例 ' By Lee1892, 2012.12.09 '------------------------------------------------------------------------------- ' 本实例实现一下功能: ' (1) 树形结构中,按级数汇总数量,即每级汇总该级下全部数量 ' (2) 按树形结构设置Excel的数据分组及分级显示 ' (3) 使用方框与连接线绘制树形,类似TreeView效果 '------------------------------------------------------------------------------- ' 原始数据中,有全部数形结构数据,各节点唯一的编号、能指示节点所在级数的符号、 ' 节点的名称、需要统计的数量。该树形结构各分支的级数不确定,仅在各分支的末梢节点有 ' 待统计的数量数据。 '------------------------------------------------------------------------------- ' 本代码采用字典对象模拟堆栈,对原始数据循环一次扫描完成统计计算并绘制树形图, ' 可学习到堆栈、字典对象、结构图绘制、数据分组分级显示、代码操控单元格公式等多方面 ' 内容。 ' 本实例可应用于材料清单(BOM)的统计、公司结构绘制等多种实践。 '================================================================== ============= Const TR_LEVEL_MARK = "+" Const TR_COL_INDEX = "A" Const TR_COL_LEVEL = "B" Const TR_COL_NAME = "C" Const TR_COL_COUNT = "D" Const TR_COL_TREE_START = "F" Const TR_ROW_HEIGHT = 23 Const TR_COL_LINE_WIDTH = 3 Const TR_COL_BOX_MARGIN = 4 Sub CalculationAndDrawTree() Dim iMaxRow&, i&, j&, dic, aKeys, iLevelLast%, iLevelNow% '全部恢复 'Undo_All Application.ScreenUpdating = False '最大行号

相关文档
最新文档