第一篇:嵌入式 知识点总结
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)嵌入式系统是面向特定应用的。嵌入式系统中的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;
第三篇:ARM嵌入式基础教程知识点总结
1、举出书本中未提到的嵌入式在每种异常模式下都有一个对统:嵌入式μCLinux、Windows 系统的例子:红绿灯控制,数字应的物理寄存器——程序状态CE、VxWorks、μC/OS-II 空调,机顶盒、键盘、鼠标、扫保存寄存器SPSR。当异常出现
18、ARM是什么样的公司?它是描仪 时,SPSR用于保存CPSR的状态,一家微处理器行业的知名企业,2、嵌入式系统:嵌入到对象体以便异常返回后恢复异常发生该企业设计了大量高性能、廉系中的专用专用计算机应用系时的工作状态。价、耗能低的RISC处理器。特统。特点:嵌入性、内含计算机、12、ARM7TDMI 产生异常的条点是只设计芯片,而不生产。它专用性。件?ARM的异常有哪几种,各进将技术授权给世界上许多著名
3、嵌入式处理器:为完成特殊入何种工作模式?他们退出各的半导体、软件和OEM厂商,并的应用而设计的特殊目的的处采用什么指令? 提供服务。理器。嵌入式处理器分为三类:答:当正常的程序被暂时中止,19、RISC是精简指令集计算机的1)注重尺寸,能耗,价格2)关处理器就进入异常模式。1)复缩写。CISC是复杂指令集计算机注性能3)关注全部四个需求。位异常(管理模式);2)未定的缩写。集体分为四类:嵌入式微处理义指令异常(未定义模式);3)20、ARM处理器核:ARM7系列、器、嵌入式微控制器、嵌入式DSP 软件中断异常(管理模式);4)ARM9系列、ARM10系列、ARM1130、寄存器CPSR,SPSR的功能
各是什么?
答:1)CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。所有处理器模式下都可以访问当前的程序状态寄存器CPSR。2)在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器SPSR。当异常出现时,SPSR用于保存 CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
31、LPC2000系列ARM7微控制器具有哪两种低耗模式?如何降处理器、嵌入式片上系统
4、嵌入式操作系统:是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的发展而来的。首先,嵌入式实时操作系统提高了系统的可靠性。其次,提高了开发效率,缩短了开发周期。再次,嵌入式实时操作系统充分发挥了 32 位 CPU 的多任务潜力。
5、ARM7TDMI中的T高密度 16 位的Thumb指令集扩展、D支持片上调试、M64 位乘法指令、Embedded ICE 硬件仿真功能模块
6、ARM7TDMI采用三级流水线(取指 译码 执行)。存储器编址方式:使用了冯·诺依曼结构,指令和数据共用一条32 位总线。
7、处理器模式指的是处理器在执行程序时在不同时刻所处的不同状态,处理器状态指的是处理器当前所执行的指令集。
8、ARM的处理器模式:用户模式(usr)-正常程序执行的模式。快中断模式(fiq)-FIQ异常响应时进入此模式。中断模式(irq)-IRQ异常响应时进入此模式。、管理模式(svc)-系统复位和软件中断响应时进入此模式。中止模式(abt)-用于虚拟存储及存储保护。未定义模式(und)-未定义指令异常响应时进入此模式。系统模式(sys)-与用户类似,但有直接切换到其它模式等特权。状态:ARM状态,32 位,这种状态下执行的是字方式的ARM 指令。Thumb状态,16 位,这种状态下执行半字方式的 Thumb 指令。
9、堆栈指针R13(SP):用于保存堆栈的出入口地址,保存待使用寄存器的内容。链接寄存器R14(LR):当使用BL指令调用子程序时返回地址将自动存入R14中;当发生异常时,将R14对应的异常模式版本设置为异常返回地址,其他时候为通用寄存器。程序计数器R15(PC):R15总是指向正在“取值”的指令。
10、ARM状态和Thumb状态的寄存器之间的关系:1)R0-R7相同;2)CPSR相同,Thumb状态无SPSR。Thumb状态下不能更新CPSR中的ALU标志位。Thumb指令对R8-R15寄存器访问受限。
11、ARM7TDMI(-S)寻址方式: 1)寄存器寻址2)立即寻址3)寄存器移位寻址4)寄存器间接寻址5)基址寻址6)多寄存器寻址7)堆栈寻址8).相对寻址.寄存器CPSR,SPSR的功能各是什么?答:1)CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。所有处理器模式下都可以访问当前的程序状态寄存器CPSR。2)指令预取中止异常(中止模式);系列、Intel的XScale系列和5)数据访问中止(中止模式);MPCore系列。6)快速中断请求(FIQ模式);
21、LPC2000系列器件有几种常7)外部中断请求(IRQ模式)。见的封装形式和其封装特点?异常返回指令:1)SWI,未定义常见的封装有64脚封装,144脚的返回:MOVS PC,R14;2)IRQ,FIQ,封装,功耗低,有多个32位定预取中止的返回:SUBS 时器,多达9个外部中断,16KPC,R14,#4;3)数据中止返回并字节静态RAM,1/128/256k字节重新存取:SUBS PC,R14,#8异常片Flash存储器,128为宽度接中断的优先级:复位(最高优先口加速器,4路10位ADC或8路级)--> 数据异常中止--->FIQ 10位ADC(64脚和144脚封装),---> IRQ--->预取指异常中止46或76~112个GPIO(64脚和--->SWI---->未定义指令(包括144脚封装)。缺协处理器)。
22、简要说明一下LPC2000系列
13、小端存储器组织是较高的有器件片内存储器的特点?片内效字节存放在较高的存储器地存储器分为片内Flash和片内静址,较低的有效字节存放在较低态RAM。片内Flash通过128位的存储器地址(同同小)。大端宽度的总线与ARM内核相连,具存储器组织是较高的有效字节有很高的速度,特有的存储器加存放在较低的存储器地址,较低速功能,可以将程序直接放在的有效字节存放在较高的存储Flash上运行。SRAM支持8位、器地址(正反大)。16位和32位的读写访问。
14、描述一下LPC2210的PO.14、23、存储器重映射是为了实现引P1.20、P1.26、BOOT1和BOOT0导块和异常向量表地址的固定。引脚在芯片复位时分别有什么重映射引导块,有利于用户调用作用?并简单说明LPC2000系列其中的某些程序,增加代码的可ARM7微控制器的复位处理流程。移植性;异常向量表重映射为了 P0.14的低电平强制片内引能让ARM内核通过访问0x0000~导装载程序复位后控制器件的0x003F地址访问到其他存储区操作,即进入ISP 状态。P1.20域的向量表。的低电平使 P1.25~P1.16复
24、LPC2000系列ARM7微控制器位后用作跟踪端口。P1.26的对向量表有什么要求(向量表中低电平使 P1.31~P1.26复位的保留字)? 后用作一个调试端口。当RESET 向量表中有一个空隙以确保软为低时,BOOT0 与BOOT1 一同控件能与不同的ARM结构兼容;表制引导和内部操作。引脚的内部中异常入口地址处放置的是跳上拉确保了引脚未连接时呈现转指令,已转向中断子程序。FIQ高电平。外部复位输入:当该引地址要放在向量表的最后。脚为低电平时,器件复位,I/O25、FLASH是128位宽度的接口,口和外围功能进入默认状态,处通过存储器加速模块提高其访理器从地址0 开始执行程序。复问速度。位信号是具有迟滞作用的TTL
26、FIQ、IRQ有什么不同?向量电平。IRQ和非向量IRQ有什么不同?
15、LDR/STR指令的偏移形式有FIQ是快速中断,具有最高优先哪4种?LDRB和LDRSB有何区级,中断处理转入FIQ模式;IRQ别? 是普通中断,优先级低于FIQ,1)零偏移;2)前索引偏移;3)中断处理转入IRQ模式。向量IRQ程序相对偏移;4)后索引偏移。支持16个向量IRQ中断,16个LDRB:读出指定地址的数据并存优先级,能为每个中断源设置服入指定寄存器,LDRSB:读出指务程序地址;非向量IRQ支持一定地址的数据,并高24位用符个非向量IRQ中断,所有中断都号位扩展,再存入指定寄存器。共用一个相同的服务程序入口
16、ARM7TDMI指令集包括1)ARM地址。指令集:指令32位,效率高,27、LPC2000系列芯片共有共有代码密度低,所有ARM指令都是4个外接中断输入,它们既可以可以有条件执行的。Thumb指令是IFQ也可以是IRQ。集:指令16位,代码密度高,28、LPC2000系列芯片常用的开Thumb指令仅有一条指令具备条发工具:ADS、IAR、JATG、ISP 件执行功能保持ARM的大多数性
29、嵌入式处理器的最小系统是能上的优势,是ARM指令集的子指提供嵌入式处理器运行所必集。须的条件的电路与嵌入式处理
17、广泛使用的三种类型的操作器共同构成的系统。嵌入式处理系统:多道批处理操作系统、分器的最小系统的基本电路包含:时操作系统以及实时操作系统。时钟系统、供电系统、复位及其常见的4种嵌入式实时操作系配置系统、存储器系统(可选)、调试测试系统(可选)。
低系统的功耗?空闲和掉电。目前大多数电路采用CMOS工艺,静态功耗很小,可以忽略,起主要作用的是动态功耗,因此降低功耗主要从降低动态功耗入手。低功耗设计技术:低功耗器件、低功耗电路形式、降低或动态改变处理器的时钟频率、降低持续工作电流、减少处理器工作时间、采用快速算法。
32、内部寄存器特点:ARM7TDMI处理器内部有37个用户可见的寄存器,31个通用32位寄存器,6个状态寄存器。这些寄存器不能在同一时间被访问,究竟何时才能访问上述寄存器完全取决于处理器状态和模式。
33、用户模式CPSR模式位的值:1000034、系统模式CPSR模式位的值:1111134、列举异常向量的向量地址。复位 0x00000000未定义 0x00000004软件中断 0x00000008
中止 0x0000000c中止(数据)0x00000010保留 0x00000014IRQ 0x00000018FIQ0x0000001c35、异常优先级顺序:复位数据中止FIQIRQ中止未定义 SWI36、最大中断延时27个周期,最小中断延时4个周期 N负标志位、运算结果的第31位值,记录标志设置的结果Z零标志位、如果标志设置操作的结果为0,则置位。C进位标志位、记录无符号加法溢出,减法无错位,循环移位。V溢出标志位、记录标志设置操作的有符号溢出。控制位:I、F、T、M【4:0】中断禁止位:I、F(I=1:禁止IRQ中断F=0:禁止FIQ中断)标志位:T反映处理器的运行状态。T=1时,程序运行Thumb状态,否则运行于ARM状态。模式控制位:M【4:0】决定了处理器的运行模式
总线就是各种信号线的集合,是计算机各部件之间传送数据、地址和控制信息的公共
路。总线的主要参数有:总线的带宽、总线的位宽、总线的工作时钟频率。
预分频功能:通过设置某个常量来控制pclk(定时器的时钟源)的分频。匹配功能:当定时器值等于预设的匹配值时,从引脚输出特定的信号。捕获功能:如果输入信号满足设定的要求,将触发捕获动作,将定时器的计数值保存到捕获寄存器中。
。除了用户模式外,其他模式均可视为特权模式。后五个为异常模式。
第四篇:嵌入式系统设计的最后知识点总结
系统概念
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的运行权。
若
是
第五篇:嵌入式总结
一、嵌入式系统原理与应用课程总结
这个学期我学习了《嵌入式原理与应用》这门课程,虽然这个学期马上就要结束了,对嵌入式的学习也要告一段落了,但是我觉得收获还是很大的。学期开始,我开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,真是茫然无从下手。虽然一个学期的学习时间不是很长,但是我觉得对嵌入式系统也已经有了一个大致的概念。对它的历史发展与今后展望都有了一定的了解。嵌入式技术的掌握是需要一个过程的,对嵌入式技术的全面掌握是有相当难度的。如果要真正掌握的话还是需要一步步积累才能熟练掌握的,所以我们还要自己多加学习,不断地回顾以前学到的知识,也要吸收新的概念与技术,使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的乐趣,更加清楚的认识到自己在软件开发学习上的一些不足之处,并且不断改进以提高自己。
通过这门课程的学习,我了解到了嵌入式系统是一种为特定设备服务,软硬件可裁剪的计算机系统,其英文名称是Embedded System。嵌入式系统的范围很广,特点是形式变化多样、体积小,可以灵活地适应各种设备的需求。嵌入式系统的一些例子:手机、汽车、ATM、数字电视、医疗仪器等等。嵌入式系统本身是一个相对模糊的定义,一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是“用于控制,监视或者辅助操作机器和设备的装备”。一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。内核之上是C库,负责把POSIX API转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。嵌入式系统的发展是从电子计算机诞生以来,计算机的发展有两个方向:一个方向是体积大型化、处理能力超强的大型计算机;另一个是向体积小型化,功能多样化的方向发展。嵌入式微控制器,即传统意义上的单片机,是目前嵌入式系统的前身。一般都是8位或者16位。嵌入式微处理器,单片机的发展时间较早,处理能力很低,只能应用在一些相对简单的控制领域。嵌入式微处理器是近几年随着大规模集成电路发展同步发展起来的。与单片机相比,嵌入式微处理器的处理能力更强,主流的嵌入式微处理器都是32位的。嵌入式微处理器在一个芯片上集成了复杂的功能,有的还把常见的外部设备控制器也集成到芯片内部。未来嵌入式系统的发展方向,随着微电子技术的发展和电子制造工艺的进步,嵌入式系统硬件的体积会不断缩小,系统稳定性也在不断增强,可以把更多功能集成到一个芯片上;同时功耗方面也不断降低。随着网络的普及和IPv6技术的应用,IPv6技术主要解决了IPv4的IP地址数目紧缺的现状,越来越多的嵌入式设备也会加入到网络中。典型的嵌入式系统的组成,嵌入式系统包括硬件和软件。硬件包括了嵌入式微处理器和嵌入式微控制器以及一些外围元器件和外部设备;软件包括了嵌入式操作系统和应用软件。嵌入式系统硬件种类繁多,有许多硬件和软件的解决方案,不同嵌入式系统软硬件很难兼容,软件必须修改而硬件必须重新设计才能使用。不仅如此,我们还要对软件硬件都有所了解才可以逐渐有所领悟。软件和硬件都是学习嵌入式系统必不可少的方面。其实我现在仍旧觉得在嵌入式系统这个博大精深的领域,我还有太多太多不懂的地方,需要学习的还有很读。嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在未来能够得到更加广泛的应用。学好嵌入式,C语言很重要,所以感觉自己有必要在学习、积累一下这方面的知识。很多东西的学习不死一帆风顺也是比较耗时的,嵌入式也不例外,要想学好还必须下大力气,还必须坚持。这次的课程让我明确了一点:嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。,平时上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,跟着问题就来了。有些即使老师讲了很多遍的问题,我们不会,老师还是会走进我们给我们耐心的指导,还给我们讲一些学习的方法,一些软件开发需要注意的细节,让我们知道自己在哪方面不足,需要加强,也让我们了解到哪些需要认真的学习,那些是重点,不是没有方向的乱学一通,结果什么也学不好。经过这次的课程,我真真确确地感受到了嵌入式在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的水平根本检查不出来是哪里出了错。这时候,老师都会耐心的过来帮助我们一起去解决。在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。
在了解了基础知识的情况下,我们还同步地进行了上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有很多的指导操作,主要还是要凭借自己去摸索练习。其中的困难可想而知。然而坚持就是胜利,只要坚持做下去。通过这学期的实验课程,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获”。没有付出,何谈回报呢?再者,通过这学期的实验课程,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。
其实,我觉得最大的收获不仅仅是我学习到了多少知识,还有学习给我的感悟。首先是心态。一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。不要什么东西都感觉跟简单,很多东西可能是看似简单,就不去做了或者不屑一做,以至于性网上搜搜就可以了,这样很不好。有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。要时刻牢记态度决定一切。其次是兴趣,感觉学习工作中兴趣很关键,只是一个引发人积极性的问题,有了兴趣就自觉了,效率自然就高了。再次要敢于尝试和挑战。不要安于现成的程序,而且不要害怕失败,在程序调试的过程中这点尤为重要,“发现出问题然后解决问题”是一个积累经验的过程,而且很高效。最后要不懈追求。对于源代码进行不断的完善,要尽可能的实现课题所要求的功能。对于初学者或者开发较少的人来说,大量大写程序还是有必要的,但同时要注意思考,理解其实现的内在意义。还可以自己添加一些有意义的功能来实现。当看到自己编写的程序正常运行时,兴趣也会随之而来,乐此不疲,形成一个良性循环。我相信在以后的学习工作中,我也会端正自己的学习态度,一丝不苟的去对待每一件事。只有做好足够的准备,才能事半功倍!