1 / 5
文档名称:

嵌入式 知识点总结.pdf

格式:pdf   大小:531KB   页数:5页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

嵌入式 知识点总结.pdf

上传人:青山代下 2024/5/21 文件大小:531 KB

下载得到文件列表

嵌入式 知识点总结.pdf

相关文档

文档介绍

文档介绍:该【嵌入式 知识点总结 】是由【青山代下】上传分享,文档一共【5】页,该文档可以免费在线阅读,需要了解更多关于【嵌入式 知识点总结 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..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/,包括寄存器和存储器的读写操作、移位操作、ALU操作等,这导致在执行阶段往往需要多个时钟周期,从而成为系统性能的瓶颈。ARM9采用5级流水线技术,分别是FETCH/DECODE/EXECUTE/MEMORY/,即从指令存储器中取值;DECODE阶段除了译码之外,还读取寄存器操作数;EXECUTE阶段执行运算,产生ALU运算结果或产生存储器地址;MEMORY阶段进行存储器的读写操作;WRITE阶段将结果写回寄存器;11、ARM9使用一个统一的TLB来缓存页表信息,TLB主页分为两个部分:主TLB和锁定TLB;12、ARM总共有7种处理器异常:复位异常、未定义指令异常、软件中断异常、指令预取终止异常、数据访问终止异常、外部访问终止异常、快速中断请求异常13、(1).复位异常和软件中断异常时,处理器进入管理模式;(2).未定义指令异常时,处理器进入未定义模式;(3).指令预取终止异常和数据访问终止异常时,处理器进入中止模式;(4).外部中断请求时,处理器进入外部中断模式;(5).快速中断请求时,处理器进入快速中断模式;:..:ARM状态和Thumb状态;ARM指令必须在ARM状态下执行,同样,Thumb指令也必须处于Thumb状态下执行。。:LSL:逻辑左移;LSR:逻辑右移;ASR:算术右移;ROR:循环右移;RRX:带扩展的循环右移;,在立即数寻址中,分配给立即数的空间是12位,8位用于保存一个常数,4位用于保存循环右移基数,而循环右移每次需要移动偶数位,即右移的位数是基数*2;假设常数为A,循环右移位数为N,则最后得到的立即数=A循环右移(N*2位);:(1)立即寻址;(2).寄存器偏移寻址;(3).寄存器偏移寻址;(4).寄存器间接寻址;(5).基址变址寻址;(6).多寄存器寻址;(7).堆栈寻址:满递增堆栈、空递增堆栈、满递减堆栈、空递减堆栈;:从内存读取数据装入寄存器;STR指令:将寄存器中的数据存入内存;:是协处理器数据处理指令:用来执行特定的数据操作;MCR:将ARM寄存器中的数据传输到协处理器寄存器中;MRC:数据传输方向与MCR指令相反,它将协处理器寄存器中的数据传送到ARM处理器寄存器中;:小范围的地址读取伪指令,主要用来读取基于PC相对偏移的地址或基于寄存器相对偏移的地址;LDR:大范围伪地址读取伪指令,用于加载32位的立即数或是一个地址值;:B:是Thumb指令中唯一可以条件执行的指令;BL:带链接的长跳转;BX:指令在跳转的同时,会选择性的切换指令集;BLX:带链接的跳转,并选择性的切换指令集;:其作用主要有2个方面:一是地址映射,负责将虚拟地址映射成物理地址;二是对地址访问的保护和限制;提供硬件机制的内存访问授权,大多数使用虚拟存储器的系统都使用一种称为分页机制,虚拟地址空间划分成大小相同的一组页,每个页有一个用来标记它的页号,而相应的物理地址空间也被进行划分,单位帧、页和页帧的大小必须相同,虚拟地址被送往MMU,MMU将虚拟地址转化为物理地址。:“抢占式调度”和”非抢占式调度”;,进程是由进程标识符(PID)表示的,一个PID在进程的整个生命期间不会更改,但PID可以在进程进行销毁后重新使用;对用户来说,PID是唯一标识一个进程的数字值;;:(1).分时调度策略;:..(2).先到先服务的实时调度策略;(3).时间片轮的实时调度策略;:(1).基于Flash的文件系统:JFFS2文件系统;YAFFS文件系统;Cramfs;Romfs;其他文件系统;(2).基于RAM的文件系统:RamDisk;Ramfs/Tmpfs(3).::;;;;-Linux内存管理原理:从两方面入手:一是Linux内核对内存的管理(包括最重要的地址映射、内存空间的分配以及地址访问的限制,即保护机制);二是体系对内存管理方面的特殊性;:地址映射机制、请求页机制、内存分配回收机制、缓存和刷新机制、交换机制和内存共享机制;:地址映射机制----请求页机制----内存分配和回收机制---交换机制----,又称作任务,是一个动态的执行过程,是处于执行期的程序,进程是系统资源分配的最小单位。,所有的进程都是fork出来的,它们有个共同的祖先:0号进程;,也是系统的第一个真正的进程,是其他所有进程的父进程,所以init内核线程(或进程)的标识符为1,init有很多重要的任务,负责完成系统的一些初始化设置任务,以及执行系统初始化程序,init程序使用/etc/inittab作为脚本文件来创建系统中的新进程;:正常的进程结束、信号、exit函数的调用;:主动调度和被动调度;按细分的话:(1)进程状态转换;(2)当前进程的时间片用完;(3)设备驱动程序;(4)进程从中断、异常以及系统调用返回到用户态;:policy、priority、counter、rt_priority;,是Linux内核向外部提供的一个插口,简称为模块;:第一种是通过insmod命令手工将module载入内核;第二种是根据需要载入module;kerneld的主要功能是module载入内核和将它卸载出内核;,一般经过三个环节:中断相应、中断处理、中断返回;-Linux的系统调用原理:系统调用的过程和中断有类似之处,当CPU遇到自陷指令后,跳转到内核态,操作系统首先保存当前运行的信息,然后根据系统调用号来查找相应的函数去执行,执行完了以后恢复原先保存的运行信息返回,比如通常应用程序所用的fork()函数,它是经过包装的函数,其最终的实现是系统调用;:通过经过封装的C库或者直接调用;,当CPU遇到自陷指令后,跳转到内核态,操作系统首先保存当前运行的信息,然后根据系统调用号查找相应的函数去执行,执行完了以后恢复原先保存的运行信息返回;通过不同的向量索引可以使CPU立即转入不同的处理程序;,内核在完成核内参数init=XXX来设置init进程,init进程需要读取/etc/inittab文件作为其行为指针,inittab是以行为为单位的描述性(非执行性)文本;:..(块设备);,所以这些设备API都有open().close().read().write().lseek()和ioctl()等与文件API类似的接口;,但是它的文件管理器使用了VFS(虚拟文件系统),正是VFS让Linux能够支持目前多种文件系统。VFS具备访问各种各样的文件系统的能力,也是因为VFS在内部去适应各种不同文件系统的差异,而提供给用户进程的是统一的文件API。:首先JFFS2是一个日志结构文件系统,包含数据和元数据的节点在闪存上顺序存储。JFFS2定义了三种节点类型:JFFS2_NODETYPE_INODE,JFFS2_NODETYPE_DIRENT,JFFS2_NODETYPE_CLEANMARKER。JFFS2中I节点的信息并没有全部存放在内存,mount操作时,会为节点建立映射表,但是这个映射表并不全部存放在内存中,存放在内存中的节点信息是一个缩小尺寸的结构体。JFFS2使用了多个级别的待回收块队列。JFFS2写平衡策略是在垃圾收集中实现的,垃圾收集的时候会读取系统时间,使用这个系统时间产生一个伪随机数。利用这个伪随机数结合不同的待回收链表选择要进行回收的链表。:(1).使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度;(2).支持数据压缩;(3).提供了”写平衡”支持;(4).支持多种节点类型(数据I节点,目录I节点等);(5).提高了对闪存的利用率,降低了内存的消耗;,而设备驱动程序则是操作系统内核和机器硬件之间的接口;:字符设备、块设备、网络设备;:目的:设备模型提供独立的机制表示设备,并表示其在系统中的拓扑结构,这样使系统具有以下优点:代码重复最小;提供如引用计数这样的统一机制;列举系统中所有设备,观察其状态,查看其连接总线;用树的形式将全部设备结构完整、有效地展现,包括所有总线和内部连接;将设备和对应驱动联系起来,将设备按照类型分类;从树的叶子向根的方向依次遍历,确保以正确顺序关闭各个设备的电源;初衷是为了节能,有助于电源管理,通过建立表示系统设备拓扑关系的树结构,能够在内核中实现智能的电源管理;功能:将系统中的设备组织成层次结构,然后向用户程序提供内核数据结构信息;:(1).同步锁:适用于保持时间段的情况,可以在任何上下文使用,不可以睡眠,任何时候,只能有一个持有者;(2).信号量:不能用在内核之外,是一种睡眠锁,适用于锁会被长期持有的情况,允许多个持有者;(3).原子操作:在执行完毕前绝不会被任何其他任何或时间打断,是最小的执行单位,主要用在资源计数上;(4).完成事件:适用于需要睡眠和唤醒的情景,不会引起资源竞争;”ls-l”命令输出的第一列中的“c”来识别,而块设备则用“b”标识;,其高12位用来表示主设备号,低20位用来表示次设备号;Register_chrdev_region()函数和alloc_chrdev_region()函数用于分配设备号,这两个函数最终:..都会调用_register_chrdev_region()函数来注册一组设备的编号范围,它们的区别是后者是以动态的方式分配的,unregister_chrdev_region()函数则用于释放设备号。Alloc_chrdev_region()函数用于动态申请设备号范围,通过指针参数返回实际分配的起始设备号;Dev_ti_rdev:对于设备文件而言,此成员包含实际的设备号;Structcdev*i_cdev:字符设备在内核中是用cdev结构来表示的,此成员是指想cdev结构的指针;。通常在ARM里,所有I/O都是通用的,称为GPIO(通用输入输出);GPIO接口一般至少会有两个寄存器,即控制寄存器和数据寄存器;、全双工、同步的串行总线;:主模式和从模式;,而块设备则以块为单位,块设备的I/O请求都有对应的缓冲区并使用了请求队列对请求进行管理,块设备还支持随机访问,而字符设备只能顺序访问。Linux中每一个块设备里请求都有一个I/O请求队列,每个请求队列都有调度器的插口。,其包含了驱动程序执行请求所需的全部信息,通常一个I/O请求对应一个bio。I/O调度器可将联系的bio合并成一个请求。:;;;;