嵌入式神级复习资料.docx
- 文档编号:13338631
- 上传时间:2023-06-13
- 格式:DOCX
- 页数:19
- 大小:5.23MB
嵌入式神级复习资料.docx
《嵌入式神级复习资料.docx》由会员分享,可在线阅读,更多相关《嵌入式神级复习资料.docx(19页珍藏版)》请在冰点文库上搜索。
嵌入式神级复习资料
2010秋《嵌入式软件开发技术》复习提纲
(版本2010/12/7)
考试时间:
2010年12月21日晚上19:
30-21:
30点,教三212
考试题型:
选择题(25分),每小题1分,共25题。
将会在PPT中的内容及本复习提纲提
及的内容中选出,不会超出以上范围。
简答题(25分)。
将会在本复习提纲范围内选出,不会超出本复习提纲范围。
问答题(25分)。
将会在本复习提纲范围内选出,不会超出本复习提纲范围。
案例分析题(25分)。
部分和所做的实验(实验一、二、三)相关,部分在本复习
提纲中选出。
复习提纲:
以下序列按照PPT的顺序:
1、嵌入式系统导论(本章请参考ppt内容)
·嵌入式系统的定义
“嵌入式系统”(EmbeddedSystem)一般指非PC系统,有计算机功能但又
不称之为计算机的设备或器材。
·嵌入式系统组成(嵌入式硬件与嵌入式软件);
嵌入式系统由嵌入式硬件与嵌入式软件组成。
嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。
嵌入式软件是实时多任务操作系统和各种专用软件,一般固化在ROM或闪存中。
2、程序设计基础(重点,本章请参考课本和ppt相关内容)
·设计高性能程序的必要性(课本P3)
代码量的多少往往和软件的质量、性能、稳定性和健壮性成反比(Page3)
程序员的修养:
热情(兴趣)及责任感
·嵌入式软件的设计范畴(课本P4-5)
嵌入式平台软件:
与硬件紧密结合(Page4)
应用软件:
软件开发,跨平台及硬件(Page4)
产品固件程序:
最常见的是Boot-loader,操作系统定制、驱动编写等(Page4-5)
·嵌入式软件的程序设计要求(重点)
回答下面的代码结果要求和代码形式要求就行了
·嵌入式软件的分层结构(图);
·嵌入式软件体系结构(图);
·代码结果的要求(P9)
通用性、健壮性、高效率
·代码形式的要求(P10)
代码规范、接口规范
·补充:
程序编写规范的重要性(重点;3点)老师说:
记住下面三句话就好了
使团队中的每位成员都形成统一的开发约定
通过规范,可以给各程序员之间起到沟通桥梁的作用
增强程序的可读性
·嵌入式系统程序开发特点(ppt的表,知道两者差异就可以)
·嵌入式软件开发的基本思路和原则(课本4句话,P11,详细解释P11-14)
系统分析,定义接口;
函数实现,优化算法;
清理代码,补充注释;
测试修订,完善文档
·程序实例剖析(课本P14-29,结合ppt内容进行阅读,理解为什么这些情况下要这
样设计程序?
可以结合具体例子阐述“怎么样提高程序的健壮性”等等。
)老师说:
这一点你们睡觉前像看小说一样看看就好,这个考试不出
3、硬件基础-1简要(只需看简单版,不考详细版)
本章只出1、2条选择题。
(基本上就考有下划线的)
·只需了解ARM是RISC处理器,共有37个寄存器等基本知识。
RISC:
reducedinstructionsetcomputer精简指令集计算机ARM微处理器的特点是:
低功耗、低成本、高性能。
ARM处理器支持两种指令集:
ARM指令集合和Thumb指令集。
前者是32位,后者是16位。
在ARM微处理器的七种工作模式除了用户模式之外其他的六种称为特权模式。
ARM体系结构所支持的最大寻址空间为4GB
ARM存储字数据分为大端和小端格式。
大端:
高字节存放于低地址,低字节存放于高地址。
ARM存储器:
ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。
但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。
但在任何时候,通用寄存器R14~R0、程序计数器PC、一个或两个状态寄存器都是可访问的。
其中R0~R7为未分组寄存器,R8~R14是分组寄存器。
R13是堆栈指针,R14子程序连接寄存器,R15程序计数器。
ARM有9种的寻址方式。
3、硬件基础-2程序优化(重点,本章内容请参考ppt)
·ARM编译器优化级别(重点,能具体解释各个级别的内容)注意,这个必考
使用编译器优化级别是可选择
-O0——DEBUG
关闭大多数优化.
最好的调试信息,最少的优化
-O1——DEBUGREL
多数优化选项许可
给一个满意的调试,好的代码密度
-O2——RELEASE(default)
完全的优化
有限的调试信息,最好的代码密度
为代码大小或运行速度的优化,可选择:
-Ospace(默认的)或-Otime.
使用-g选像可包含源码级调试信息
备注:
下面这些是我自己的补充东东而已,可以无视之。
Lr表示R14lr(r14)的作用问题,这个lr一般来说有两个作用:
1.当使用bl或者blx跳转到子过程的时候,r14保存了返回地址,可以在调用过程结尾恢复。
2.异常中断发生时,这个异常模式特定的物理R14被设置成该异常模式将要返回的地址。
另外注意pc,在调试的时候显示的是当前指令地址,而用movlr,pc的时候lr保存的是此指令向后数两条指令的地址,大家可以试一下用movpc,pc,结果得到的是跳转两条指令,这个原因是由于arm的流水线造成的,预取两条指令的结果.
在浮点数的操作中要调用浮点库
·清楚理解自动优化、冗余代码清除、指令编排、嵌套优化、内联例子等概念和实际
应用,能通过阅读例子代码,解释以上优化做了什么事情(重点)
结合以上1、2点,对编程中出现的一些现象进行详细解释
老师说:
记住这几个的名称就可以了(我晕,这就是重点的内涵)
·C和汇编混合编程(直接调用和内嵌汇编)有什么不同
·使用ARM编译器编码参数传递(4、6参数的区别,解释,重点)
·循环终止(实验一的相关内容,重点)
老师举了++--的例子,下课后问他,他说现在的编译器其实都优化得差不多了,所以要用现在的编译器基本上是看不出来的,要比较古老的编译器才可以看出就看他给的那个汇编就好了
·局部和全局数据
全局和静态变量保留在RAM里:
需使用loads/stores访问外部存储器
局部变量通常放在寄存器中,用来快速且高效的处理:
如果编译器的寄存器分配算法认为超过现有的寄存器数量,将把变量压入栈中
对局部变量,用word-sized(int)代替halfword和byte:
为了确保不受其他条件的影响,可特别指定使用32-bit寄存器变量
·堆栈的用法(重点)
⏹C/C++代码的堆栈使用,堆栈用来保留:
⏹子程序的返回地址
⏹‘溢出’的局部变量
⏹局部数组和结构体
⏹注意:
⏹函数越小越好:
(更少的变量,更少的‘溢出‘);
⏹更少数量的‘live’变量(比如:
函数里每个点保存的有用的数据)
⏹避免使用大的局部结构体或数组(使用malloc/free代替)
⏹避免递归
4、多任务操作系统(本章内容请参考课本和ppt)
·OAL、BSP概念(重点)两个会考其中的一个
OAL:
OAL(OEM适配层,OEMAdaptationLayer),用来引导系统核心映像和初始化、管理硬件。
它是BSP驱动的一部分。
BSP板级支持包(BoardSupportPackage),是介于硬件和操作系统中驱动层程序之间的一层,(这是其位置)一般认为它属于操作系统一部分,主要是实现对操作系统的支持,为上层的驱动程序提供访问硬件设备寄存器的函数包,使之能够更好的运行于硬件主板。
(这是其作用)
·BSP在嵌入式系统和Windows系统中的不同
运行在PC机上的Windows或Linux系统也是有BSP的。
只是PC机均采用统一的X86体系架构,这样一定操作系统(Win、Linux……)的BSP相对x86架构是单一确定的,不需要做任何修改就可以很容易支持OS在x86上正常运行,所以在PC机上谈论BSP这个概念也没什么意义了。
而对嵌入式系统来说情况则完全不同,目前市场上多种结构的嵌入式CPU(RISC)并存(PPC、ARM、MIPS...),为了性能的需要,外围设备也会有不同的选择和定义。
一个嵌入式操作系统针对不同的CPU,会有不同的BSP,即使同一种CPU,由于外设的一点差别(如外部扩展DRAM的大小,类型改变),BSP相应的部分也不一样。
所以根据硬件设计编写和修改BSP,保证系统正常的运行是非常重要的
·BSP在嵌入式开发中的位置和作用(重点)
下面这些是我复习时copyppt的东东,可以无视之,答案在上面
BSP开发处于整个嵌入式开发的前期,是后面系统上应用程序能够正常运行的保证。
大概步骤如下:
1.硬件主板研制,测试。
2.操作系统的选定,BSP编程。
3.上层应用程序的开发。
BSP部分在硬件和操作系统,上层应用程序之间。
所以这就要求BSP程序员对硬件,
软件和操作系统都要有一定的了解。
这样才能做好BSP编程。
熟悉工具方面:
电表,示波器,逻辑分析仪。
硬件仿真器,仿真调试环境
语言方面:
汇编语言,C语言
·何时需要多任务(阅读课本P44-50)
·什么是“共享资源”
资源:
程序运行时可使用的软、硬件环境统称为资源。
资源可以是输入输出设备,例如打印机、键盘、显示器。
资源也可以是一个变量、一个结构或一个数组等。
共享资源:
可以被一个以上任务使用的资源叫做共享资源。
为了防止数据被破坏,每个任务在与共享资源打交道时,必须独占该资源,这叫做互斥。
注意:
在嵌入式系统中,不区分线程和任务的区别。
·优先级反转问题(重点)看一下ppt那张图,能有文字说明清楚就行了
WindowsCE默认的时间片大小是100ms,时间片的大小可以由用户定义。
优先级反转问题:
简单地说,就是高优先级任务必须等待低优先级任务的完成。
如果任务之间由于有共享资源出现了竞争或者死锁,是会严重影响系统安全的。
因此OS对共享资源提供了保护机制。
一般情况下使用的是信号量方法。
创建一个信号量并对他进行初始化,当一个任务需要使用一个共享资源时,他必须先申请得到这个信号量。
在这个过程中即使有优先权更高的任务进入了就绪态,因为无法得到信号量,也不能使用该资源。
在OS中称为优先级反转。
5、嵌入式操作系统——uCLinux(本章内容请参考ppt)
·嵌入式uClinux系统概况(特点、优点,了解)
uClinux是一个完全符合GNU/GPL公约的操作系统。
适用于没有虚拟内存或内存管理单元(MMU)的处理器。
它通常用于具有很少内存或Flash的嵌入式系统。
虽然它的体积很小,uClinux仍然保留了Linux的大多数的优点:
稳定、良好的移植性、优秀的网络功能、完备的对各种文件系统的支持、以及标准丰富的API等
·uClinux的基本架构(重点,了解BootLoader、内核初始化、系统调用函数/捕获函
数、设备驱动、文件系统等各部分内容)所谓重点,就是知道其名称,我懂了
BootLoader:
负责Linux内核的启动,它用于初始化系统资源,包括SDRAM。
这部分代码用于建立Linux内核运行环境和从Flash中装载初始化ramdisk。
内核初始化:
Linux内核的入口点是start_kernel()函数。
它初始化内核的其他部
分,包括捕获,IRQ通道,调度,设备驱动,标定延迟循环,最重要的是能够fork“init”进程,以启动整个多任务环境。
系统调用函数/捕获函数:
在执行完“init”程序后,内核对程序流不再有直接的控制权,此后,它的作用仅仅是处理异步事件(例如硬件中断)和为系统调用提供进程。
设备驱动:
设备驱动占据了Linux内核很大部分。
同其他操作系统一样,设备驱动为它们所控制的硬件设备和操作系统提供接口。
文件系统:
Linux最重要的特性之一就是对多种文件系统的支持。
这种特性使得Linux很容易地同其他操作系统共存。
文件系统的概念使得用户能够查看存储设备上的文件和路径而无须考虑实际物理设备的文件系统类型。
Linux透明的支持许多不同的文件系统,将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户。
uClinux的特点:
因为uClinux是支持没有存储管理单元的微处理器,因此多任务处理的能力变得很微妙。
绝大部分在uClinux上执行的应用程序,并不需要多任务处理的能力。
除此之外,大部分的二进制执行码和原始码都会被重新写过以便更紧缩和减少程序码,这意味着uClinux和Linux2.0的核心比起来将是非常非常的小
·其他部分只出选择题,阅读ppt就可以了
5、嵌入式操作系统——WinCE(本章内容请参考ppt)
·WinCE5系统架构(图,重点)这里会在选择题出,请看清那个系统API的调用机制的图,就是那个显示app.exeNK.exesystem.exe之间调用关系的图,下面我的东东就无视之吧
NK.EXE=NK.LIB+CAL.LIB其实就相当于微内核,有系统分发的功能,当程序来到这里时,会进行分发调用。
GWES.EXE:
图形窗口系统。
DEVICE.EXE:
提供所有与驱动有关的函数实现(快设备),在启动的时候通过注册表加载驱动程序。
SERVICE.EXE:
与DEVICE.EXE分开,后者是硬件驱动,所有服务的宿主过程,是针对软件的,比如闹钟、网络服务。
服务管理的程序是在os启动时运行的。
文件系统:
单根“\”,没有像“C:
\”一样的盘符。
包括三个组件:
对象存储:
被FILESYS.EXE管理的一个堆,包括Registry、Database、RAM文件系统;RAM文件系统通常位于根目录Ex:
“\myfile.txt”存在于RAM中
存储管理器:
负责:
Storagedevicedriver、Partitiondevicedriver、FileSystemdevicedriver、FileSystemfilter
ROM文件系统:
被映射成“\Windows”目录“\Windows”目录中所有的文件都是只读的通常是nk.bin或nk.nb0中的文件
WinCE5支持32个进程、256个线程。
默认的时间片是100毫秒,OEM可以在OAL中重新设置
·了解WinCE各模块的功能,特别是文件系统下的组件
·WinCE6系统架构,以及采用此架构的优点(重点)
WinCE6.0新内核:
每个进程都有2GB的虚拟内存、32K进程、统一内核(关键的OS组件都移到了kernel空间)、改进的系统性能、增强的安全性和健壮性、高度的向后兼容性
·WinCE5与WinCE6的内存管理区别老师说,知道前者是所有进程共享2G空间,后者是每个进程拥有2G空间就行了
新的os布局:
把关键的驱动程序,文件系统和图形窗口管理器移到内核
益处:
极大的减少了这些组件间的系统调用开销
减少了所有从用户空间到内核空间的调用的开销
增加了基本OS服务间的代码共享
·WinCE6下驱动程序两种不同模式的区别
支持两种类型的驱动程序:
追求性能的内核模式、追求健壮性的用户模式
用户模式的驱动程序:
由udevices.exe来装载
大多数API和内核模式一样
没有权限访问内核的数据结构和内存(无SetkMode)
例子:
扩展总线,例如USB;键盘和触摸屏
性能要求不是很严的驱动程序可以考虑移到用户模式:
被调用次数比较少但是做得工作比较多
内核模式的驱动程序:
驱动程序经由device.dll加载到内核空间
对内核的数据结构和内存有完全的访问权限
能够使用的APIs没有改变:
内核模式的驱动程序不能显示UI
使用CeCallUserProc来调用用户模式下的DLL:
网络
·其他部分只出选择题,阅读ppt就可以了
6、驱动程序开发(本章内容请参考ppt)
·设备驱动程序的概念
设备驱动程序是与硬件设备进行通信的系统程序。
一个设备可以是物理设备,也可以是一个逻辑实体。
通常,这些实体需要操作系统对其进行控制,资源管理。
设备驱动程序就是管理这些物理设备或者虚拟设备、协议或者系统服务的软件模块。
对于每一个
的设备,设备驱动程序都是必不可少。
·了解WinCE驱动程序概述的内容
对于UNIX/Linux或者是Windows9x,设备驱动程序是与操作系统映像连接的,并运行于系统内核态。
对于WindowsCE,大多数的设备驱动程序运行于用户态,简单的来说就是一个DLL文件。
·WinCE设备驱动的分类(内置驱动、总线、流接口)知道括号的三个东东就行了
WindowsCE整体上将设备驱动分为三种:
内置驱动:
硬件所必须的驱动程序,这些驱动程序通常由设计OEM厂商进行计。
如:
键盘,触摸屏,音频设备;内置驱动通常需要针对具体的操作系统进行小幅改动
总线驱动:
管理系统总线如PCI总线等,PCMCIA与CompactFlash也在其列。
负责处理总线上硬件的询问,以及资源的分配。
同时也请求设备管理器为总线上的硬件安装适当驱动程序。
流接口
·了解WinCE下驱动的安装、加载过程
大多数的设备驱动由设备管理器(Device.exe),进程在系统启动时进行加载。
另一方面,其中一部分内置驱动程序由GWES.exe进行加载。
这些驱动包括显示器驱
动(DDI.dll)、键盘驱动、鼠标驱动、触摸屏驱动等。
驱动的加载过程:
1.当Device.exe对设备驱动程序进行安装时将在注册表的[HKEY_LOCAL_MACHINE]\Drivers项下检查一个字符串,其值为RootKey。
2.然后设备管理器在进行初始化时使用注册信息检查器为它需要安装的各个驱动读取值为RootKey的键。
3.安装DLL,给每一个驱动创建一个Active键,然后调用ActivateDevice或者
ActivateDeviceEx将DLL注册为系统中的一个设备驱动程序。
4.ActivateDevice在[HKEY_LOCAL_MACHINE\Drivers\Active下创建一个新的键值。
·Linux下设备的分类知道有哪三种设备就ok啦
字符设备:
串口、终端、触摸屏
块设备:
FLASH、RAMDISK、硬盘
网络设备
·设备文件与设备号;设备驱动的功能
用户通过设备文件访问设备,每个设备用一个主设备号和次设备号标识。
设备驱动的功能:
管理I/O设备
上层软件的抽象操作与设备操作的转换
7、嵌入式软件开发(本章内容请参考ppt)
·开发工具划分(集成开发环境;调试、跟踪、分析工具;软件仿真技术;图形化开
发工具;高效编译工具)老师说,这个在选择题出·问题1-问题5,了解
开放的集成开发环境——Eclipse
全系统实时跟踪调试——CoreSight、SW
软件仿真分析——Simulator
性能分析——Profile
可视化设计——RVDS、MDK
编译优化——RVCT
·嵌入式系统设计流程(重点;分为系统需求分析、体系结构设计、硬件/软件设计、
系统集成、系统测试)这个估计也是记住名称就好了
可以把嵌入式系统的开发看作对一个项目的实施。
项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4个阶段。
嵌入式系统项目开发也是如此。
1.需求分析
识别需求是项目生命周期的最初阶段。
当需求被客户确定时,项目就产生了。
这个阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
2.体系结构设计
主要由各厂商向客户提交标书、介绍解决方案。
这个阶段是赢得项目的关键,公司既要展示实力又要合理报价。
如果竞标成功则签定合同,厂商开始承担项目成败的责任。
这个阶段的主要工作是系统规划与设计
3硬件/软件设计
基于体系结构,对系统的软件,硬件进行详细设计。
为了缩短产品开发周期,设计往往并行的。
应该说嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术,软件组件技术,模块化设计是现代软件工程经常采用的方法。
4.系统集成
把系统的软件,硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。
5.系统测试
对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。
8、实验内容(实验一到三)
涉及一些概念:
交叉编译(了解)、skyeye、uClinux等;会在选择题中出1、2题。
实验一:
++之所以比—效率低是因为在++中用到了cmp指令,每次都要对比一下当前计数变量与边界值,而—中与0的比较是系统本身设计上就有指令实现的,所以—快点。
实验二:
编译有:
1.有os支持的,意味着可以直接使用c的标准函数库,如将程序直接打包到uClinux中2.无os支持的,在编译时要打入Start.s引导头,还要查表写,比较复杂。
下面是可以无视之的东东
?
什么是代码密度
代码的聚集程度
?
下面这句代码有什么意义:
LDRr0,[r0,#0]
加载,将存储器地址里的数据加载到寄存器中。
实现存储的改变。
指令编排的例子不是很懂
?
什么是源码级的调试
记得linux中-g的调试,并且用调试命令run来运行
·arm汇编语言调用C函数之参数传递:
·ARM中LDR伪指令与LDR加载指令:
·arm中的asrlsr等移位指令:
算术右移和逻辑右移的区别:
1.汇编语言中的逻辑右移(SHR)是将各位依次右移指定位数,然后在左侧补0,算术右移(SAR)是将各位依次右移指定位数,然后在左侧用原符号位补齐。
2.高级语言右移运算符(>>)是将一个数的二进位全部右移若干位,低位移出部分舍弃,左补0。
3.高级语言右移和汇编语言中的逻辑右移功能一样,但不同于算术右移。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 复习资料