第一篇:嵌入式系统相关知识点总结
嵌入式系统的定义及特点
定义:嵌入式系统是以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应于应用系统对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系统。
特点:(1)嵌入式系统是面向特定应用的。嵌入式系统中的CPU是专门为特定应用设计的,具有低功耗、体积小、集成度高等特点,能够把通用CPU中许多由板卡完成的任务集成在芯片内部,从而有利于整个系统设计趋于小型化。
(2)嵌入式系统涉及先进的计算机技术、半导体技术、电子技术、通信和软件等各个行业。是一个技术密集、资金密集、高度分散、不断创新的知识集成系统。
(3)嵌入式系统的硬件和软件都必须具备高度可定制性。
(4)嵌入式系统的生命周期相当长。嵌入式系统和具体应用有机地结合在一起,其升级换代也是和具体产品同步进行的。
(5)嵌入式系统本身并不具备在其上进行进一步开发的能力。在设计完成以后,用户如果需要修改其中的程序功能,必须借助于一套专门的开发工具和环境。
(6)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机中,而不是存贮于磁盘等载体中。
特点也可答:1.系统内核小。2.专用性强。3.系统精简。4.高实时性的系统软件(OS)是嵌入式软件的基本要求。5.嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。6.嵌入式系统开发需要开发工具和环境。7.嵌入式系统与具体应用有机结合在一起,升级换代也是同步进行,所以具有较长的生命周期。8.为了提高运行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片中。
操作系统在嵌入式系统中所起的作用(四个)
嵌入式操作系统(嵌入式linux学习)的功能
嵌入式操作系统除具备了一般操作系统(嵌入式linux系统)最基本的功能,如任务调度、同步机制、中断处理、文件处理等外,还有以下两个方面的功能:
1.构成一个易于编程的虚拟机平台
嵌入式操作系统构成一个虚拟机平台,EOS把底层的硬件细节封装起来,为运行在它上面的软件(如中间件软件和各种应用软件)提供了一个抽象的编程接口。软件开发在这个编程接口的上进行,而不直接与机器硬件层打交道。
2.系统资源的管理者
嵌入式操作系统是一个系统资源的管理者,负责管理系统当中的各种软硬件资源,如处理器、内存、各种I/O设备、文件和数据等,使得整个系统能够高效、可靠地运转。
嵌入式操作系统负责嵌入式系统的全部软、硬件资源的分配、调度、控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
嵌入式操作系统是嵌入式系统应用的核心.嵌入式操作系统,大大地提高了嵌入式系统硬件工作效率,并为应用软件开发提供了极大的便利。
操作系统的作用主要体现在两方面:
1.屏蔽硬件物理特性和操作细节,为用户使用计算机提供了便利 2.有效管理系统资源,提高系统资源使用效率
Linux与嵌入式使用的uclinux操作系统的关系
Linux与UNIX系统兼容,开放源代码。现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。所以uClinux就是Micro-Control-Linux,字面上的理解就是“针对微控制领域而设计的Linux系统”。
uClinux是针对控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性。uClinux同标准Linux的最大区别就在于内存管理。标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU,MMU把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟—物理地址转换映射,支持不同任务之间的保护。对于uCLinux来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术,仍然采用存储器的分页管理。
什么是内核?
内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核,是一个操作系统的核心。是基于硬件的第一层软件扩充,提供操作系统的最基本的功能,是操作系统工作的基础,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。
什么是Bootlonder? 答案一搜狗百科:启动程序(英语:boot loader,也称启动加载器,引导程序)位于电脑或其他计算机应用上,是指引导操作系统启动的程序。引导程序启动方式及程序视应用机型种类而不同。BIOS开机完成后,bootloader就接手初始化硬件设备、创建存储器空间的映射,以便为操作系统内核准备好正确的软硬件环境。BootLoader是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。
答案二百度百科:Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。尽管如此,我们仍然可以对 Boot Loader 归纳出一些通用的概念来,以指导用户特定的 Boot Loader 设计与实现。
使用带uclinux操作系统的嵌入式系统应该注意什么问题?
uClinux的内存管理
uClinux同标准Linux的最大区别就在于内存管理。对于uCLinux来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术,仍采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。这一点影响了系统工作的很多方面。
uClinux系统对于内存的访问是直接的,所有程序中访问的地址都是实际的物理地址。操作系统对内存空间没有保护,各个进程实际上共享一个运行空间。由于应用程序加载时必须分配连续的地址空间,而针对不同硬件平台的可一次成块,分配内存大小限制是不同,所以开发人员在开发应用程序时必须考虑内存的分配情况并关注应用程序需要运行空间的大小。另外由于采用实存储器管理策略,用户程序同内核以及其它用户程序在一个地址空间,程序开发时要保证不侵犯其它程序的地址空间,以使得程序不至于破坏系统的正常工作,或导致其它程序的运行异常。
从内存的访问角度来看,开发人员的权利增大了(开发人员在编程时可以访问任意的地址空间),但与此同时系统的安全性也大为下降。uClinux的多进程处理
uClinux没有MMU管理存储器,在实现多个进程时(fork调用生成子进程)需要实现数据保护。uClinux的这种多进程实现机制同它的内存管理紧密相关。uClinux针对没有mmu处理器开发,所以被迫使用一种flat方式的内存管理模式,启动新的应用程序时系统必须为应用程序分配存储空间,并立即把应用程序加载到内存。缺少了MMU的内存重映射机制,uClinux必须在可执行文件加载阶段对可执行文件reloc处理,使得程序执行时能够直接使用物理内存。
编程实现五个点的中值滤波和均值滤波
clear all;t=0:0.01:1;f2=5;%生成一个正弦信号y; y1=1*sin(2*pi*f2*t);%y1=square(2*pi*f2*t);%向y中加入噪声信号生成x;x1=y1+0.1*randn(1,101);figure(1)subplot(2,1,1);plot(t,y1,'r');title('生成一个正弦信号y');grid;legend y;subplot(2,1,2);plot(t, x1,'r');title('向y中加入噪声信号生成x');grid;legend x;X=1:length(x1)for X=1:length(x1)z2=smooth(x1,5);%M=5时的均值滤波 end for X=1:length(x1)figure(2)plot(t,z1,'r');title('M=5时的均值滤波处理后的信号');grid;legend y;for X=1:length(x1)L2= median(x1,5);end figure(3)plot(t,L2,'r');title('M=5时的中值滤波处理后的信号');grid;legend y;
第二篇:嵌入式 知识点总结
1、嵌入式系统的特点:
(1).嵌入式系统的个性化很强,软件系统和硬件在不同的应用中均有差异;(2).由通用计算机系统发展而来,根据应用对软硬件进行裁剪;(3).高的可靠性,强的实用性;
(4).高的耗电量直接影响系统的成本及电源寿命;
2、什么是嵌入式系统?
嵌入式系统是以应用为中心,以计算机技术为基础,采用可剪裁硬件,适用于对功能,可靠性,成本,体积,功耗等有严格要求的专用计算机系统。
3、采用RISC架构的ARM微处理器一般具有如下特点:(1).体积小、功耗低、成本低、性能高;
(2).支持Thumb(16位)/ARM(3位)双指令集,能很好地兼容8位/16位器件;(3).大量使用寄存器,指令执行速度快;(4).大多数数据操作都在寄存器中完成;(5).寻址方式灵活简单,执行效率高;(6).采用固定长度的指令格式;
4、嵌入式系统开发流程:
选择嵌入式处理器(硬件平台)---选择嵌入式操作系统(软件平台)-----开发嵌入式应用软件-----测试通过---(是)---系统测试-----开发结束
5、嵌入式系统软件设计流程:
代码编程(C/汇编源程序)-----交叉编译(OBJ文件)-----交叉函数库----交叉链接(系统映像文件)---(重定向与下载)---目标板----调试;
6、ARM9E处理器有独立的指令缓存(ICACHE)和数据缓存(DCACHE);
7、ARM9系列处理器共有37个寄存器,其中31个属于通用寄存器,6个为ARM处理器;
8、ARM总共有7种不同的处理器模式,分别是:用户模式,快速中断模式,外部中断模式,管理模式,数据访问中止模式,未定义指令中止模式,系统模式
9、R13一般作为栈指针SP;R14被称为连接寄存器LR,作用:一是在通过BL或者BLX指令调用子程序时存放当前子程序的返回地址;二是在发生异常时用来保存该模式基于PC的返回地址;R15是程序计数器PC,用来保存处理器取值的地址;
10、流水线技术的工作原理:
ARM7采用的是3级流水线:FETCH/DECODE/EXECUTE.此时在EXECUTE阶段要完成大量的工作,包括寄存器和存储器的读写操作、移位操作、ALU操作等,这导致在执行阶段往往需要多个时钟周期,从而成为系统性能的瓶颈。
ARM9采用5级流水线技术,分别是FETCH/DECODE/EXECUTE/MEMORY/WRITE.FETCH阶段和之前功能相同,即从指令存储器中取值;DECODE阶段除了译码之外,还读取寄存器操作数;EXECUTE阶段执行运算,产生ALU运算结果或产生存储器地址;MEMORY阶段进行存储器的读写操作;WRITE阶段将结果写回寄存器;
11、ARM9使用一个统一的TLB来缓存页表信息,TLB主页分为两个部分:主TLB和锁定TLB;
12、ARM总共有7种处理器异常:复位异常、未定义指令异常、软件中断异常、指令预取终止异常、数据访问终止异常、外部访问终止异常、快速中断请求异常
13、(1).复位异常和软件中断异常时,处理器进入管理模式;(2).未定义指令异常时,处理器进入未定义模式;
(3).指令预取终止异常和数据访问终止异常时,处理器进入中止模式;(4).外部中断请求时,处理器进入外部中断模式;(5).快速中断请求时,处理器进入快速中断模式; 14.ARM运行状态:ARM状态和Thumb状态;ARM指令必须在ARM状态下执行,同样,Thumb指令也必须处于Thumb状态下执行。
15.ARM状态和Thumb状态切换可以通过BX指令来实现。
16.ARM指令集有5种形式的位移操作:LSL:逻辑左移;LSR:逻辑右移;ASR:算术右移;ROR:循环右移;RRX:带扩展的循环右移;
17.立即数并不是任意数都是合法的,在立即数寻址中,分配给立即数的空间是12位,8位用于保存一个常数,4位用于保存循环右移基数,而循环右移每次需要移动偶数位,即右移的位数是基数*2;假设常数为A,循环右移位数为N,则最后得到的立即数=A循环右移(N*2位);
18.ARM指令的寻址方式及特点:(1)立即寻址;
(2).寄存器偏移寻址;(3).寄存器偏移寻址;(4).寄存器间接寻址;(5).基址变址寻址;(6).多寄存器寻址;
(7).堆栈寻址:满递增堆栈、空递增堆栈、满递减堆栈、空递减堆栈; 19.LDR和STR LDR指令:从内存读取数据装入寄存器; STR指令:将寄存器中的数据存入内存;
20.CDP:是协处理器数据处理指令:用来执行特定的数据操作; MCR:将ARM寄存器中的数据传输到协处理器寄存器中;
MRC:数据传输方向与MCR指令相反,它将协处理器寄存器中的数据传送到ARM处理器寄存器中;
21.ADR:小范围的地址读取伪指令,主要用来读取基于PC相对偏移的地址或基于寄存器相对偏移的地址;
LDR:大范围伪地址读取伪指令,用于加载32位的立即数或是一个地址值; 22.Thumb跳转指令:
B:是Thumb指令中唯一可以条件执行的指令; BL:带链接的长跳转;
BX:指令在跳转的同时,会选择性的切换指令集; BLX:带链接的跳转,并选择性的切换指令集;
23.MMU:其作用主要有2个方面:一是地址映射,负责将虚拟地址映射成物理地址;二是对地址访问的保护和限制;提供硬件机制的内存访问授权,大多数使用虚拟存储器的系统都使用一种称为分页机制,虚拟地址空间划分成大小相同的一组页,每个页有一个用来标记它的页号,而相应的物理地址空间也被进行划分,单位帧、页和页帧的大小必须相同,虚拟地址被送往MMU,MMU将虚拟地址转化为物理地址。
24.进程调度策略可分为:“抢占式调度”和”非抢占式调度”;
25.在用户空间中,进程是由进程标识符(PID)表示的,一个PID在进程的整个生命期间不会更改,但PID可以在进程进行销毁后重新使用;对用户来说,PID是唯一标识一个进程的数字值;
26.Linux进程还可以通过exec系统调用产生; 27.Linux操作系统有三种进程调度策略:(1).分时调度策略;(2).先到先服务的实时调度策略;(3).时间片轮的实时调度策略; 28.嵌入式文件系统分类:(1).基于Flash的文件系统:
JFFS2文件系统;YAFFS文件系统;Cramfs;Romfs;其他文件系统;
(2).基于RAM的文件系统: RamDisk;Ramfs/Tmpfs(3).网络文件系统NFS 29.Boot Loader 阶段一:1.基本的硬件初始化:a.屏蔽所有中断;b.设置CPU的速度和时钟频率;c.RAM初始化;d.初始化LED;30.ARM-Linux内存管理原理:从两方面入手:一是Linux内核对内存的管理(包括最重要的地址映射、内存空间的分配以及地址访问的限制,即保护机制);二是体系对内存管理方面的特殊性;
31.Linux虚拟内存的实现需要6种机制的支持:地址映射机制、请求页机制、内存分配回收机制、缓存和刷新机制、交换机制和内存共享机制; 32.Linux虚拟内存实现机制间的相互关系:
地址映射机制----请求页机制----内存分配和回收机制---交换机制----缓存和刷新机制
33.进程,又称作任务,是一个动态的执行过程,是处于执行期的程序,进程是系统资源分配的最小单位。
34.在Linux系统中,所有的进程都是fork出来的,它们有个共同的祖先:0号进程;
35.init是内核启动的第一个用户级进程,也是系统的第一个真正的进程,是其他所有进程的父进程,所以init内核线程(或进程)的标识符为1,init有很多重要的任务,负责完成系统的一些初始化设置任务,以及执行系统初始化程序,init程序使用/etc/inittab作为脚本文件来创建系统中的新进程;
36.进程的销毁通过以下三个事件驱动:正常的进程结束、信号、exit函数的调用;
37.进程调度时机可分为:主动调度和被动调度;按细分的话:(1)进程状态转换;(2)当前进程的时间片用完;(3)设备驱动程序;(4)进程从中断、异常以及系统调用返回到用户态; 38.选择进程的依据:policy、priority、counter、rt_priority; 39.内核模块全称为动态可加载内核模块,是Linux内核向外部提供的一个插口,简称为模块; 40.加载模块有两种方法:第一种是通过insmod命令手工将module载入内核;第二种是根据需要载入module;kerneld的主要功能是module载入内核和将它卸载出内核; 41.中断是一个流程,一般经过三个环节:中断相应、中断处理、中断返回;
42.ARM-Linux的系统调用原理:系统调用的过程和中断有类似之处,当CPU遇到自陷指令后,跳转到内核态,操作系统首先保存当前运行的信息,然后根据系统调用号来查找相应的函数去执行,执行完了以后恢复原先保存的运行信息返回,比如通常应用程序所用的fork()函数,它是经过包装的函数,其最终的实现是系统调用;
43.在UNIX系统下有两种方式实现系统调用:通过经过封装的C库或者直接调用;
44.系统调用的过程和中断有类似之处,当CPU遇到自陷指令后,跳转到内核态,操作系统首先保存当前运行的信息,然后根据系统调用号查找相应的函数去执行,执行完了以后恢复原先保存的运行信息返回;通过不同的向量索引可以使CPU立即转入不同的处理程序; 45.init进程是系统所有进程的起点,内核在完成核内参数init=XXX来设置init进程,init进程需要读取/etc/inittab文件作为其行为指针,inittab是以行为为单位的描述性(非执行性)文本; 46.存储文件系统的设备称为block设备(块设备);
47.设备驱动的接口API都是从文件管理器API中继承下来的,所以这些设备API都有open().close().read().write().lseek()和ioctl()等与文件API类似的接口;
48.Linux也使用文件管理器,但是它的文件管理器使用了VFS(虚拟文件系统),正是VFS让Linux能够支持目前多种文件系统。VFS具备访问各种各样的文件系统的能力,也是因为VFS在内部去适应各种不同文件系统的差异,而提供给用户进程的是统一的文件API。49.JFFS2嵌入式文件系统原理:
首先JFFS2是一个日志结构文件系统,包含数据和元数据的节点在闪存上顺序存储。JFFS2定义了三种节点类型:JFFS2_NODETYPE_INODE, JFFS2_NODETYPE_DIRENT,JFFS2_NODETYPE_CLEANMARKER。JFFS2中I节点的信息并没有全部存放在内存,mount操作时,会为节点建立映射表,但是这个映射表并不全部存放在内存中,存放在内存中的节点信息是一个缩小尺寸的结构体。JFFS2使用了多个级别的待回收块队列。JFFS2写平衡策略是在垃圾收集中实现的,垃圾收集的时候会读取系统时间,使用这个系统时间产生一个伪随机数。利用这个伪随机数结合不同的待回收链表选择要进行回收的链表。50.JFFS2克服了JFFS中以下缺点:
(1).使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度;(2).支持数据压缩;
(3).提供了”写平衡”支持;
(4).支持多种节点类型(数据I节点,目录I节点等);(5).提高了对闪存的利用率,降低了内存的消耗;
51.系统调用是操作系统内核和应用程序之间的接口,而设备驱动程序则是操作系统内核和机器硬件之间的接口;
52.Linux支持三类硬件设备:字符设备、块设备、网络设备; 53.Linux内核设备模型的目的和功能:
目的:设备模型提供独立的机制表示设备,并表示其在系统中的拓扑结构,这样使系统具有以下优点:代码重复最小;提供如引用计数这样的统一机制;列举系统中所有设备,观察其状态,查看其连接总线;用树的形式将全部设备结构完整、有效地展现,包括所有总线和内部连接;将设备和对应驱动联系起来,将设备按照类型分类;从树的叶子向根的方向依次遍历,确保以正确顺序关闭各个设备的电源;初衷是为了节能,有助于电源管理,通过建立表示系统设备拓扑关系的树结构,能够在内核中实现智能的电源管理;
功能:将系统中的设备组织成层次结构,然后向用户程序提供内核数据结构信息; 54.同步机制的分类及特点:
(1).同步锁:适用于保持时间段的情况,可以在任何上下文使用,不可以睡眠,任何时候,只能有一个持有者;
(2).信号量:不能用在内核之外,是一种睡眠锁,适用于锁会被长期持有的情况,允许多个持有者;
(3).原子操作:在执行完毕前绝不会被任何其他任何或时间打断,是最小的执行单位,主要用在资源计数上;
(4).完成事件:适用于需要睡眠和唤醒的情景,不会引起资源竞争;
55.表示字符设备的设备文件可以通过”ls-l”命令输出的第一列中的“c”来识别,而块设备则用“b”标识;
56.dev t是一个32位的无符号数,其高12位用来表示主设备号,低20位用来表示次设备号;
Register_chrdev_region()函数和alloc_chrdev_region()函数用于分配设备号,这两个函数最终都会调用_register_chrdev_region()函数来注册一组设备的编号范围,它们的区别是后者是以动态的方式分配的,unregister_chrdev_region()函数则用于释放设备号。Alloc_chrdev_region()函数用于动态申请设备号范围,通过指针参数返回实际分配的起始设备号;
Dev_ti_rdev:对于设备文件而言,此成员包含实际的设备号; Struct cdev *i_cdev:字符设备在内核中是用cdev结构来表示的,此成员是指想cdev结构的指针;
57.I/O接口是微控制器必须具备的最基本外设功能。通常在ARM里,所有I/O都是通用的,称为GPIO(通用输入输出);GPIO接口一般至少会有两个寄存器,即控制寄存器和数据寄存器;
58.同步外设接口是由摩托罗拉公司推出的一种高速的、全双工、同步的串行总线; 59.SPI的工作模式有两种:主模式和从模式;
60.字符设备以字节为单位进行读写,而块设备则以块为单位,块设备的I/O请求都有对应的缓冲区并使用了请求队列对请求进行管理,块设备还支持随机访问,而字符设备只能顺序访问。Linux中每一个块设备里请求都有一个I/O请求队列,每个请求队列都有调度器的插口。
61.Bio是底层对部分块设备的I/O请求描述,其包含了驱动程序执行请求所需的全部信息,通常一个I/O请求对应一个bio。I/O调度器可将联系的bio合并成一个请求。
62.MMC/SD卡驱动结构:a.文件结构;b.块设备驱动;c.MMC/SD核心;d.MMC/SD接口;
第三篇:嵌入式系统设计的最后知识点总结
系统概念
1、嵌入式系统的定义?
以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。“嵌入”、“专用”、“计算机”
2、嵌入式系统的软、硬件组成?以及主要特点?
软件:从底层到上层:bootloader等系统初始化引导程序、设备驱动层(包括驱动程序、板级支持包BSP等)、操作系统、用户应用程序。(底层为上层提供服务)开发软件:即集成开发环境(asemmbler&&compiler&&linker&&debugger&&loader)硬件组成:核心板+外围板+外设(核心板:微控制器(CPU和外设接口、外设控制器)、电源、时钟、复位、SDRAM、flash。外围板面向外围设备,一般是引脚的集合、电平转换电路。外围设备。),当然也可以将核心板和外围板放在一起。
硬件特点:通常由嵌入式处理器和嵌入式外围设备组成,高度集成,常采用SOC设计方法,对功耗、体积等有严格要求,定制性决定了它的可裁剪性,没有像计算机领域的垄断,解决方案不唯一。
软件特点:采用交叉开发方式,系统软件层次分明,操作系统为用户程序提供标准API,提供图形接口和文件系统。用户调用系统服务,系统调用设备驱动从而操纵硬件。
3、嵌入式系统产品设计的基本流程?
需求分析
功能性需求是系统的基本功能,如输入输出信号、操作方式等;
非功能性需求包括系统性能、成本、功耗、体积、重量等因素。规格说明
精确地反映客户的需求并且作为设计时必须明确遵循的要求。体系结构设计
描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型等。
软硬件设计
基于体系结构,对系统的软件、硬件进行详细设计。系统集成
把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。系统测试
对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。
4、处理器及操作系统的选型主要考虑哪些方面?
① 操作系统本身所提供的开发工具。② 操作系统向硬件接口移植难度。
③ 操作系统的内存要求。④ 开发人员是否熟悉此操作系统及其提供的系统API。⑤ 操作系统是否提供硬件的驱动程序,如网卡驱动程序等。⑥ 操作系统的是否具有可剪裁性。⑦ 操作系统是否具有实时性能。
5、交叉开发、交叉开发环境?为何需要交叉开发环境? 在一台通用计算机(宿主机)上进行软件的编辑编译,然后下载到嵌入式设备(目标机)中运行调试的开发方式
交叉开发环境一般由运行于宿主机上的交叉开发软件(assembler&&compiler&&linker&&debugger&&loader)、宿主机到目标机的调试通道组成 需要交叉开发环境是因为目标机一般对体积、功耗等有严格限制,资源也面向应用,较为紧张,要求仅仅能流畅运行代码即可,而将用户开发软件(包括各种库、工具)放置在主机上,而且现在的集成开发环境提供了各种修改好的功能库,用起来也方便。
6、嵌入式集成开发环境的主要功能?
这是由其组成决定的。Assembler将.c源代码汇编,compiler形成目标文件,linker根据链接描述文件将各个目标代码链接定位生成可执行代码。Debugger有些交叉开发工具提供了仿真调试通道。Loader可以将目标文件烧录进设备中(有时需要内部引导代码的配合)
7、嵌入式Linux 开发主要流程?
搭建开发环境--烧写bootloader--烧写内核--烧写根文件系统--烧写应用程序。
开发环境:REDHAT-LINUX、下载相应的GCC 交叉编译器进行安装、配置开发主机(配置MINICOM和配置网络,MINICOM 软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具,配置网络主要是配置IP地址、NFS 网络文件系统,需要关闭防火墙)
烧写bootloader 下载一些公开源代码的BOOTLOADER根据自己具体芯片进行移植修改。下载时,有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上flash 的烧写程序。
或者网络上有免费下载的WINDOWS 下通过JTAG 并口简易仿真器烧写ARM 外围flash 芯片的程序。也有LINUX 下公开源代码的J-FLASH 程序。
下载内核
如果有专门针对你所使用的CPU 移植好的LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改。下载根文件系统
从www.xiexiebang.complete...*/
OSIntExitY
= OSUnMapTbl[OSRdyGrp];
/*...and not locked.*/
OSPrioHighRdy
=
(INT8U)((OSIntExitY
<<
3)
+ OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if(OSPrioHighRdy!= OSPrioCur){
/* No Ctx Sw if current task is highest rdy
*/
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];//找就绪态的最高优先级,并找到相应TCB。
OSCtxIntCtr++;
/* Keep track of the number of context switches */
OSIntCtxSw();
//调用中断级的任务调度函数
/* Perform interrupt level context switch
*/
}
}
OS_EXIT_CRITICAL();}
中断级任务切换函数
执行出栈指令之后还用中断返回指令?没有包含关系?模式(代码分析)?
OSIntCtxSw;post FIQ Context switcher.This is called from OSIntExit when a hooked ISR;wants to return in the context of another task.We load the new tasks context;(from OSPrioHighRdy)and do the return from interrupt.;;Get pointer to stack where ISR_FiqHandler saved interrupted context
;ISR entry only saves
找到异常模式堆栈,它只保存了.first seven regs and LR
#16?
add
r7, sp, #16
;save pointer to register file(point to r0)LDR
sp, =IRQStack;FIQ_STACK;test to del it意义?
;Change ARM CPU to SVC mode for stack operations.将CPU切换至管理模式,以操作不同模式的堆栈。
;This gets the CPU off the interrupt stack and back to the
;interrupted task's stack, which is the one we want to alter.;mrs
r1, SPSR
;get suspended PSR orr
r1, r1, #0xC0
;disable IRQ, FIQ.msr
CPSR_cxsf, r1
;switch mode(shold be SVC_MODE)
;PSR, SP, LR regs are now restored to the interrupted SVC_MODE.;now set up the task's stack frame as OS_TASK_SW does...将进入IRQ异常的时候保存的上下文,从IRQ栈中赋值到SVC栈中
ldr
r0, [r7, #52]
;get IRQ's LR(tasks PC)from IRQ stack
sub
r0, r0, #4
;Actual PC address is(saved_LR-4)STMFD
sp!, {r0}
;save task PC放入管理模式栈中 STMFD
sp!, {lr}
;save LR
mov
lr, r7
;save FIQ stack ptr in LR(going to nuke r7)
ldmfd
lr!, {r0-r12}
;get saved registers from FIQ stack STMFD
sp!, {r0-r12}
;save registers on task stack
;save PSR and PSR for task on task's stack MRS
r4, CPSR
;OSPrioCur = OSPrioHighRdy
// change the current process LDR
r4, addr_OSPrioCur LDR
r5, addr_OSPrioHighRdy bic
r4, r4, #0xC0;leave interrupt bits in enabled mode STMFD
sp!, {r4} MRS
r4, SPSR STMFD
sp!, {r4}
;save task's current PSR;SPSR too
LDRB
r6, [r5] STRB
r6, [r4]
;Get preempted tasks's TCB LDR
r4, addr_OSTCBCur LDR
r5, [r4]
;store sp in preempted tasks's TCB STR
sp, [r5]
;Get new task TCB address LDR LDR LDR
r6, addr_OSTCBHighRdy
r6, [r6]
sp, [r6]
;get new task's stack pointer;OSTCBCur = OSTCBHighRdy STR r6, [r4]
;set new current task TCB address
LDMFD sp!, {r4} MSR
SPSR, r4 LDMFD sp!, {r4} BIC
r4,r4,#0xC0;we must exit to new task with ints enabled MSR
CPSR, r4
LDMFD
sp!, {r0-r12, lr, pc}
时钟节拍中断服务子程序
Void OSTickISR(void){
保存处理器寄存器的值;
调用OSIntEnter(),或是将OSIntNesting加1
if(OSIntNesting==1){
OSTCBCur->OSTCBStkPtr=SP;
}
调用OSTimeTick();
功能根据链表遍历每个TCB,将非零的延时值--,有减到零,若非suspend状态,则置就绪位。
清发出中断设备的中断;
重新允许中断(可选用)
调用OSIntExit();
恢复处理器寄存器的值;
执行中断返回指令;
} 中断节拍函数 void OSTimeTick(void){
OS_TCB *ptcb;
OSTimeTickHook();
/*OS_CFG中#define OS_CPU_HOOKS_EN
1*/
ptcb = OSTCBList;
(2)
while(ptcb->OSTCBPrio!= OS_IDLE_PRIO){
(3)
OS_ENTER_CRITICAL();
if(ptcb->OSTCBDly!= 0){
if(--ptcb->OSTCBDly == 0){
if(!(ptcb->OSTCBStat & OS_STAT_SUSPEND)){
(4)/ SUSPEND,则不能就绪,OSRdyGrp
|= ptcb->OSTCBBitY;
(5)
否则就绪到
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else {
ptcb->OSTCBDly = 1;
}
}
}
ptcb = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
}
OS_ENTER_CRITICAL();
(6)
OSTime++;
(7)累加从开机以来的时间,用的是一个无符号32位变量
OS_EXIT_CRITICAL();}
任务控制块初始化函数OS_TCBInit()在创建任务时调用,它获得TCB控制块并对其进行初始化,并让对应任务就绪,完成任务创建的大部分任务。
Delay()和节拍中断的对应关系
Delay函数是自行挂起,等待延时时间到的函数,它的功能就设置TCB中的延时值,清除自己的就绪位。而在每个节拍中断处理函数中,会将延时值--。减到零时重新就绪。并在中断退出时进行任务切换,有可能再次得到CPU的运行权。
若
是
第四篇:哈工大ARM嵌入式系统考试知识点总结
接VIC部分
一旦产生IRQ中断,微控制器切换到IRQ模式,并跳转到向量表0x0018地址执行指令。一旦产生FIQ中断,微控制器切换到FIQ模式,并跳转到向量表0x001C地址执行指令,然后跳转到FIQ_Handler代码段。
第五篇:嵌入式系统复习总结
嵌入式系统复习总结
一、嵌入式系统的概述
1.嵌入式系统的定义:嵌入到对象中的专业计算机 2.三大特点:嵌入型、专业性、计算机系统 3.组成:软件、硬件
4.结构层次:应用程序、嵌入式系统实时操作系统,硬件抽象层、嵌入式系统硬件工作平台
5.分类:MCU、EMPU、DSP、CPLDFPGA、SoC
二、51单片机
1.单片机的特点:体积小、控制功能强、可靠性高、易扩展易产品化、性能价格比高、需要开发装置
2.51单片机的组成:CPU、64KB数据存储器、4KB程序存储器、两个16位定时计数器、5个中断源、P0~P3 4个并行IO口、4个串行
3存储其结构特点:内、外数据存储器,内、外程序存储器 程序存储器,内外统一编制,地址重合区由EA决定,EA=1访问外部,EA=0访问内部,内部数据存储器:00H~20H由32个寄存器组成,每八个一组,21H~2FH位寻址区,30H~FFH用户存储区,内外存储地址有指令区分MOVSMOV SFR特殊功能寄存器:ACC、B、SP、DPTR、PSW、IO宿存器 4.CPU时序电路:振荡周期(1)、状态周期(2)、机器周期(12)、指令周期、CPU访问指令时两次读指令,访问外部程序存储器是ALE两次有效,S1P2S4P2,4.单片机的引脚功能:PSEN,ALEPROG,EA 5.输入输出口结构:p0准双向口,每位可带8个LSTTTL负载,输出需要上拉电阻(准双向原因:作为输出口,要给锁存器1,屏蔽两个二极管)
p1、p2均为准双向口,带四个负载,p1也需要上拉电阻,p2自带电阻,p2控制信号为1时输出高八位地址 p3每个位有特殊定义 6.单片机的寻址方式:
直接寻址:SFR寻址均为直接寻址
寄存器寻址:乘法指令中B寄存器为寄存器寻 立即数寻址:
寄存器间接寻址:R0,R1 变址寻址:注意PC变址不改变PC值,DPTR变址可以随意到任意位置取数
相对变址寻址:调转指令 位寻址 7.单片机指令:(1)数据传送类指令:MOVMOVXMOVC,XCHXCHDSWAP,PUSHPOP(2)数据传送类指令:
ADDADDCINC,SUBBDEC,MUL(低位A,高位B),DIV(商A,余数B)
(3)逻辑类指令:
ANL,ORL,XRL, RL,RR,RLC,RRC, CPL(按位取反),CLR(请位)
(4)转移类指令
AJMP,LJMP,SJMP,JMP.JZ.JNZ,CJNE,CJE,DJNZ(5)位转移指令
JC rel ;若CY=1,则PC ←PC+ 2 + rel ;若CY=0,则PC ←PC+ 2 JNC rel ;若CY=0,则PC ←PC+ 2 + rel ;若CY=1,则PC ←PC+ 2 JB bit,rel ;若(bit)=1,则PC ←PC+ 3 + rel ;若(bit)=0,则PC ←PC+ 3 JNB bit,rel ;若(bit)=0,则PC ←PC+ 3 + rel ;若(bit)=1,则PC ←PC+ 3 JBC bit,rel ;若(bit)=1,则PC ←PC+ 3 + rel,bit←0 ;若(bit)=0,则PC ←PC+ 3 8.程序设计:
冒泡法,BCD转2进制,2进制转BCD,ASCALL转2进制 9.伪指令:ORG,EQU 10.中断系统
两个外部中断INT0、1,两个定时器中断TI0、TI1,串口中断
中断系统的组成:TCON,SCON,IE,IP
中断响应的条件:
有中断请求; EA=1;
IE相应的中断位为1;CPU执行指令最后一个周期;
CPU没有执行同级或者更高级的中断指令; CPU不执行RET,RETI或者读取IEIP的指令
中断响应的过程:
①置位相应的优先级状态触发器,清除相应的中断请求标志(TI和RI除外);
②由硬件自动生成一条长调用指令LCALL,将断点地址(当前PC值)压入堆栈加以保护;
③将中断入口地址装入PC,使程序转向执行中断服务程序。中断响应时间为3~8个机器周期
中断相应返回时: 将优先状态触发器置0; 将返回地址送至PC返回
定时器中断自动清除标志位 外部中断:
(1)电平触发外部清除,或者软件清除(2)边缘触发自动清除 串行口中断软件清除
10.定时器中断:TCON,80H设置(T0低位,T1高位)
工作方式0:13位计数TH位高八位TL低五位表示低五位,工作方式1:16位计数
工作方式2:8位计数,TL方初值,TH计数
工作方式3: TL0不变可做定时计数,用T0的一套,TH0只能定时用T1的一套。T1为方式3时不工作 11.利用定时中断溢出编程
(1)产生方波信号(方波信号的嵌套)
①设置TMOD控制字,确定工作方式;
②计算计数初值并装入计数值寄存器TH0(1)、TL0(1); ③若使用中断系统,则开中断EA=
1、ET0或ET1=1; ④启动定时器/计数器工作(置TR0或TR1)。(2)外部中断的扩展(查询方式,将初值设置为最大)
禁止中断;JBC 12.串行口波特率的计算
方式0:固有频率的12分之一
方式1、3:与三相同与T
1fOSC2SMOD的益处时间有关 32122nx 方式2:固有频率的64分之一
三、ARM单片机
(1)两种工作状态:ARM状态(32位)、THUM状态(16位)
工作状态的切换:BX RN 寄存器最后一位是0切换ABM状态,最后一位是1切换到THUM状态
(2)七种工作模式:用户模式、系统模式、管理模式、外部中断模式、快速中断模式、未定义指令模式、数据访问中止模式
后五个属于“异常模式”,后六属于“特权模式”
(3)ARM7的流水式作业:取指——译码——执行
采用冯诺依曼存储结构 ARM9流水式作业:取指——译码——执行——访存——回写 采用哈佛结构
(4)存储其结构(37个寄存器)
31个通用寄存器、6个标志位寄存器 1.R0~R7八个通用寄存器(7种模式通用)2.R8~R12前六种公用,最后一种自己用一组 3.R13:堆栈指针
R14:子程序连接寄存器(子程序调用时自动将下一条地址送给R14),这两个寄存器用户模式、系统模式公用一组,异常模式每种各一组 4.R15,:PC计数器
5.CPSR:程序状态寄存器 N.V.C.Z.Q.I.F.T.M4~M0 6.SPSR:程序状态备用寄存器,调用子程序将当前CPSR复制给SPSR,用户模式与系统模式没有,异常模式每种一组。
(5)存储类型;
数据类型三种:8位字节、16位半字、32位字
指令类型:16位THUM、32位ARM 大端格式:与正常存储方式相反
小端格式:高字节对应高地址,低字节对应低地址(6)多级存储形式:寄存器组、片上RAM、CASHE、主存储器
(7)异常:(其中异常模式类似于中断)1.种类:按优先级排列
复位、数据中止、FIQ、IRQ、指令预取终止、未定义指令终止、SWI(软件中止)2.异常的相应过程:
保护返回地址:将下一条地址复制到LR子程序连接寄存器中;
保护当前状态寄存器的值:复制CPSR至将要执行模式的SPSR;
强行设置异常模式下CPSR的值;
强制PC从中断向量地址取出指令执行;
可以设置中断禁止位;
3.中断的返回
将返回的值写入PC中
恢复CPSR的值
清除冲断禁止位
4.异常返回地址的确定(LR 在复制时已自动减4)
(1)软件中止:直接返回(2)未定义指令:直接返回
(3)FIQ、IRQ、指令预取中止:均减四返回
(4)数据中止:减八返回
(8)寻址方式
立即寻址:MOV R0, #0xFF00(8位位图)寄存器寻址:MOV R2, R3 寄存器移位寻址:MOV R0, R1, LSL#4(6种类型的移位操作)
寄存器间接寻址:LDR R1,[R2] 变址寻址:LDR R0, [R1,#8](前变址寻址);
LDR R0, [R1,#8]!(自动变址寻址); LDR R0, [R1], #2(后变址寻址)
堆栈寻址:STMFD SP!, {R4-R7, LR}(4种类型的堆栈操作)块复制寻址:LDMIA R1!,{R2-R4,R5}(4种块复制寻址操作)
相对寻址:BL SUBR(9)指令集: 数据传送:MOV、MVN 算术运算:ADD、ADC、SUB、SBC、RSB、RSC、MUL、MLA、UMULL、UMLAL、SMULL、SMLAL 逻辑运算:AND、ORR、EOR、BIC 比较和测试:CMP、CMN ARM程序状态访问指令:MSR ARM存储器访问指令
单一数据:LDR、STR、LDRB、STRB 批量数据:LDM、STM(IA、IB、DA、DB)数据交换:SWP ARM分支指令:B、BL、BX(10)伪指令与程序设计 1.伪指令
ADR:小范围加载指令,将相对偏移量加载到某个寄存器中,只能用一条指令来实现,若不能用一条指令来实现则编译错误
ADRL:中范围加载指令,将PC的相对偏移量加载到某个寄存器中,必须用两条指令来实现,LDR:将某个32位偏移量加载到寄存器中
声明变量:
全局变量:GBLA,GBLL,GBLS 局部变量:LCLA,LCLL,LCLS 变量赋值:SETA,SETL,SETS 声明寄存器列表:RLIST 数据定义伪指令:DCB DCDU DCWU 分配一块字节内存单元伪操作SPACE(%)格式:标号 SPACE expr 或 标号 % expr 声明数据缓冲池(文字池)伪操作LTORG 格式: LTORG 段指示伪操作AREA 格式:AREA 段名 {,属性1} {,属性2}… 程序入口伪操作ENTRY 格式:ENTRY(11)基本ATPCS规则
1.子程序调用过程中寄存器的使用规则
子程序间通过寄存器R0~R3来传递参数
在子程序中,使用寄存器R4~R11来保存局部变量 寄存器R12用作子程序内部调用的scratch寄存器 寄存器R13用作数据栈指针,记作sp或SP 寄存器R14用作链接寄存器,记作lr或LR 寄存器R15是程序计数器,记作pc或PC。2.数据栈的使用规则;
数据栈为满递减FD类型,并对数据栈的操作是8字节对齐的
3.参数的传递规则。
(a)参数个数可变的子程序参数传递规则
(b)参数个数固定的子程序参数传递规则(c)子程序结果返回规则
四、存储器与接口技术
1.SRAM:静态随机访问存储
(1)组成:地址线、数据线、读写控制、片选信号线(2)工作原理:读写均先输送地址,在进行数据的输入和输出
(3)SRAM与CPU的链接: 2.DRAM:
有行地址和列地址,工作时有地址锁存器,先输送行地址在输送列地址,选中单元后输送单元,读数据时需要刷新电路
3.SDRAM:与SRAM相比多了同步时钟信号,同时增添了BLOCK,地址分行地址、列地址,也需要刷新电路,BLOCK为最大读写单元,引脚BA选择块儿 4.FLASH:
(1)NOR FLASH:存储容量绞小,读速度较快,采用线性寻址,可直接找到存储位置
(2)HAND FLASH:存储密度大,写入和擦除速度较快,有BLOCK存储单元,有块儿地址,页地址,页内地址,数据地址线复用,传送地址需要四个周期
5.MCS-51单片机
P0口作为地址线低八位和数据线,所以需要地址锁存器,p0口分时复用,由ALE管理,P2输出地址高八位,PSEN接程序存储器使能端OE 进行存储其扩展时可用与门或者先选来链接存储器片选信号进行扩展。
链接程序存储器数据存储器复用时,将PSEN 与RD相与和选通相连连 6.ARM(S3C2410)存储机制:
(1)与SRAM、DRAM相连(2)高速存储机制:CASHE(3)NMUI 接口设计:
(1)HAND FLASH启动:将地址前4KB 的代码作为启动代码
(2)ROM启动: 可选择16位或者32位的存储器,通过M1、M0进行选择 在与存储器进行连接时,注意地址线,若存储器为8位直接位位对应,16位是错开一位,32位时错开两位 7.接口 1.RS-232C 信号电平与逻辑
RS-232C信号采用负逻辑,即以+12V电平视为逻辑“0”,-12V电平视为逻辑“1”
串行接口电路中需要在TTL标准与RS-232C标准之间进行电平转换 2.SPI接口
总线定义及信号线构成 传输技术:同步、全双工
SPI采用同步、全双工串行传输技术,也称为同步串行总线接口;SPI总线(Serial Peripheral Interface)称为串行外围设备接口 3.USB 总线定义及信号线构成,半双工传输 三种设备Host、Device和HUB USB(Universal Serial Bus)即通用串行总线,主要用于PC与外围设备互连。USB的输出特性是差分驱动、支持半双工方式,接收采用差分接收 USB体系结构中包括三种设备 Host(即主控制器)Device(设备)
HUB(集线器,也是设备)4.I2C总线
总线定义及信号线构成,信号线连接方式 总线仲裁
I2C总线定义了两根传输线:SDA(串行数据)和SCL(串行时钟),都是双向传输线,通过电阻上拉到正电源,总线空闲时都是高电平5.I2S总线
总线定义及信号线构成 数据传输格式
I2S总线(Inter-IC Sound Bus集成电路内置音频总线 串行数据高位MSB在先,发送器和接收器可以有不同的字长无论有多少位有效数据,最高位MSB总是出现在IISLRCK变化后的第二个IISCLK脉冲处。MSB位置固定,LSB位置取决于字长。这就使得接收端与发送端可以不同的有效位数。如果接收端能处理的有效位数少于发送端的,则可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端的,则剩余低位自行补0。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位