嵌入式程序设计温习总结_第1页
嵌入式程序设计温习总结_第2页
嵌入式程序设计温习总结_第3页
嵌入式程序设计温习总结_第4页
嵌入式程序设计温习总结_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式程序设计课程总结第一章(嵌入式系统基础)1.嵌入式系统概念普遍的嵌入式系统的概念:嵌入式系统是指以应用为中心,以运算机技术为基础,软件硬件可剪裁,适应应用系统对功能、靠得住性、本钱、体积、功耗严格要求的专用运算机系统。特点:1)面向特定应用的特点。2)嵌入式系统的硬件和软件都必需进行高效地设计,量文体衣、去除冗余,力争在一样的硅片面积上实现更高的性能。3)嵌入式系统是将先进的运算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。4)为了提高执行速度和系统靠得住性,嵌入式系统中的软件一般都固化在存储器芯片中或单片机本身,而不是存储于磁盘中。5)嵌入式开发的软件代码尤其要求高质量、高靠得住性。6)嵌入式系统本身不具有二次开发能力。.交叉编译嵌入式软件开发所采用的编译为交叉编译。所谓交叉编译就是在一个平台上生成能够在另一个平台上执行的代码。.交叉调试调试器和被调试进程运行在不同的机械上,调试器运行在PC机(宿主机),而被调试的进程则运行在各类专业调试板上(目标板)。调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。.Bootloader的作用简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。通过这段程序,能够完成硬件设备的初始化,并成立内存空间的映射关系,从而将系统的软硬件环境带到一个适合的状态,为最终加载系统内核做好预备。第二章(程序开发工具)1.Vi四种模式:标准模式、插入模式、命令行模式、可视模式。2.Gcc编译流程:(4个步骤)预处置、编译、汇编、链接。常常利用选项:团员含文山只编诱不幽建,生成目标艾■件只编包不汇编,生成汇编代直却E只进行洵弧译.不置其他处理」嘈J在可机行程序中包含标准调试信息「-Gfill指定均取文件作为输出文件J打印出痂耳器由码译客过程的命令行信息和纲译器的版本,-Idii在头文件的拽塞耨役列表中添加曲目录,库相关选项:捷11-含L-static*进行除出明深,即犍超静志序,禁止使用动态庠,• |一।,可以生成初存库文件一1-进行制需编译「年可能地抵推动态库,只有装有动春库时才会摄播同名的群春库《默认选耳b叩可皙畸>「-Ldir-3生庠文件的搜索路役列君中季E曲目录一-luanic.他接称为li如亦f酷毒摩)现者111nmugm{动布摩)的库文件*若两个摩都存在,则他捉掠译方式;f•制IW正是,川附十轴而进行晦接」-fPl「t或小生或使用相对照址的位置无关的目标代码(P^itionli出户1“加注小加>a然后通常使用跖。的・$标海选项从速PIU目森文件生成动存函文件.1函数库分为静态库和动态库两种,静态库是一系列的目标文件(.o文件)的归档文件(文件名格式为),若是在编译某个程序时链接静态库,则链接器将会搜索静态库,从中提掏出它所需要的目标文件并直接拷贝到该程序的可执行二进制文件(ELF格式文件)当中;动态库(文件名格式为[.主版本号.次版本号.发行号])在程序编译时并非会被链接到目标代码中,而是在程序运行时才被载入。3.Gdb命令格式f含Xuifbb-查看所设断点#如Ek[文件名:]行号或函数名,条件表达式2选置断点.口tlHMl”文件名:]行号或函数名•条件表达式“设置临时断点,到达后被自动删除加kt“断点号卜删除指定断点,其断点母法“必玷2中的第一栏.若映省断点号则删除所有新点『d*心k]断点号小停止指定断点,使用“邨旧厂仍能查看此断点,Plddetc一样,省断点号则停止所有断点一切处在[断点号上激活指定断点,即漱活被&疝L停止的断点〃[断点号卜条件表达式:-a僚改对应断点的条件「屯m“断点号]在程序执行中,忽略对理断点3吨次•Step+'单步恢震程序运行,且进入函数调用。Next」单步恢复程序运行,但不进入函数调用』Fiiiislb运行程序,直到当前函数完成返回」8鞋续执行函电,直到函数^束或遇到新的断点,上机时进行的操作:1、b、n、c4.Make能解释规则含义:makefile的规则是make进行处置的依据,它包括了目标体、依赖文件及其之间的命令语句。普通规则隐含规则:隐含规则能够告知make如何利用传统的规则完成任务,如此,当用户利用它们时就没必要详细指定编译的具体细节,而只需把目标文件列出即可模式规则:模式规则是用来概念相同处置规则的多个文件的。第三章(1也显C语言基础).栈(stack):由编译器自动分派释放,寄存函数的参数值,局部变量的值,返回地址等,其操作方式类似于数据结构中的栈。.堆(heap):一般由程序员动态分派(挪用malloc函数)和释放(挪用free函数),若程序员不释放,程序结束时可能由操作系统回收。.数据段(data):寄存的是全局变量、静态变量、常数。按照寄存的数据,数据段又能够分成普通数据段(包括可读可写/只读数据段,寄存静态初始化的全局变量或常量)、BSS数据段(寄存未初始化的全局变量)。.代码段(code):寄存程序代码。.字节序:字节顺序是指一个字中各个字节的顺序,有大端模式和小端模式。大端模式:字数据的高字节存储在低地址中,字数据的低字节寄存在高地址中。小端模式:字数据的高字节存储在高地址中,字数据的低字节寄存在低地址中。第四章(文件IO)1.系统挪用与用户编程接口API的区别所谓系统挪用是指操作系统提供给用户程序挪用的一组“特殊”接口,用户程序能够通过这组“特殊”接口来取得操作系统内核提供的服务。例如用户能够通过进程控制相关的系统挪用来创建进程、实现进程调度、进程管理等。前面讲到的系统挪用并非是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。在实际利用中程序员挪用的一般是用户编程接口一一API2.文件描述符的概念文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每一个进程打开文件的记录表。当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数.通常,一个进程启动时,都会打开3个文件:标准输入、标准输出和标准犯错处置。这3个文件别离对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。3.open()/read()/write()/close()与fopen()/fread()/fwrite()/fclose()的区别open0/read()/write0/close(基于文件描述符;fopen0/fread0/fwrite0/fclose(|基于流缓冲。标准I/O提供流缓冲的目的是尽可能减少利用read。和write。等系统挪用的数量。标准I/O提供了3种类型的缓冲存储。全缓冲:在这种情形下,当填满标准I/O缓存后才进行实际I/O操作。对于寄存在磁盘上的文件一般是由标准I/O库实施全缓冲的。行缓冲:在这种情形下,当在输入和输出中碰到行结束符时,标准I/O库执行I/O操作。这允许咱们一次输出一个字符(如fputc()函数),但只有写了一行以后才进行实际I/O操作。标准输入和标准输出就是利用行缓冲的典型例子。不带缓冲:标准I/O库不对字符进行缓冲。若是用标准I/O函数写若干字符到不带缓冲的流中,则相当于用系统挪用write()函数将这些字符全写到被打开的文件上。标准犯错stderr一般是不带缓存的,这就使得犯错信息能够尽快显示出来,而无论它们是不是含有一个行结束符。4.解释文件锁的应用处景,fcntl与lockf文件锁包括建议性锁和强制性锁。建议性锁要求每一个上锁文件的进程都要检查是不是有锁存在,而且尊重已有的锁。在一般情形下,内核和系统都不利用建议性锁。强制性锁是由内核执行的锁,当一个文件被上锁进行写入操作的时候,内核将阻止其他任何文件对其进行读写操作。采用强制性锁对性能的影响专门大,每次读写操作都必需检查是不是有锁存在。在Linux中,实现文件上锁的函数有10。原()和fcntl(),其中lockf()用于对文件施加建议性锁,而fcntl()不仅能够施加建议性锁,还能够施增强制锁。同时,fcntl()还能对文件的某一记录上锁,也就是记录锁。记录锁又可分为读取锁和写入锁,其中读取锁又称为共享锁,它能够使多个进程都能在文件的同一部份成立读取锁。而写入锁又称为排斥锁,在任何时刻只能有一个进程在文件的某个部份上成立写入锁。固然,在文件的同一部份不能同时成立读取锁和写入锁。第五章(进程控制开发)()fork()函数用于从已存在的进程中创建一个新进程。新进程称为子进程,而原进程称为父进程。利用fork()函数取得的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所特有的只有它的进程号、资源利用和计时器等。.父进程回收子进程需要挪用wait与waitpidwait()函数是用于使父进程(也就是挪用wait()的进程)阻塞,直到一个子进程结束或该进程接到了一个指定的信号为止。若是该父进程没有子进程或他的子进程已经结束,则wait()就会当即返回。waitpid()的作用和wait()一样,但它并非必然要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。实际上wait()函数只是waitpid()函数的一个特例,在Linux内部实现wait()函数时直接挪用的就是waitpid()函数。.exit()与_exit()的区别exit()函数的作用是:直接使进程停止运行,清除其利用的内存空间,并清除其在内核中的各类数据结构;exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit()函数与_exit()函数最大的区别就在于exit()函数在挪用exit系统之前要检查文件的打开情形,把文件缓冲区中的内容写回文件,就是图中的“清理I/O缓冲”一项。第六章(多任务编程).管道(Pipe)及出名管道(namedpipe):管道可用于具有亲缘关系进程间的通信,出名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。单向性,往1号fd写,从0号fd读。.信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处置器收到一个中断请求效果上能够说是一样的。.消息队列(MessgeQueue):消息队列是消息的链接表,包括Posix消息队列SystemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程能够依照必然的规则向消息队列中添加新消息;对消息队列有读权限的进程则能够从消息队列中读取消息。.共享内存(Sharedmemory):能够说这是最有效的进程间通信方式。它使得多个进程能够访问同一块内存空间,不同进程能够及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依托某种同步机制,如互斥锁和信号量等。.信号量(Semaphore):主要作为进程之间和同一进程的不同线程之间的同步和互斥手腕。.套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机械之间的进程间通信,应用超级普遍。能解释ls-l列出的权限的含义-rwxr-xr-x第一名表示文件类型,-表示文件,d表示目录2-4位表示文件所有者的权限,u权限5-7位表示文件所有者所属组成员的权限,g权限8-10位表示所有者所属组之外的用户的权限,o权限2-10位的权限总和有时称为a权限以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。第七章网络编程(看书看代码才是王道).TCP/UDP套接字编程模型(老师说书上的略有错误,我就不粘贴了).并发处置模型(仔细理解实验内容)第八章设备驱动将所有设备看成文件进行处置,位于/dev目录中系统的设备分为3类:字符设备,块设备,网络设备.字符设备通常以字节为单位顺序读写的设备.块设备通常指需要以块为单位随机读写的设备.设备驱动程序位于操作系统内核空间.解释字符设备与块设备字符设备:字符设备通常指像普通文件或字节流一样,以字节为单位顺序读写的设备。字符设备可通过设备文件节点访问,它与普通文件之间的区别在于普通文件能够被随机访问,而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存。块设备:块设备通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等。它的驱动程序的编写进程与字符型设备驱动程序的编写有专门大的区别。块设备驱动编程接口相对复杂,不如字符设备明晰易用。块设备驱动程序对整个系统的性能影响较大,速度和效率是设计块设备驱动程要重点考虑的问题。系统中利用缓冲区与访问请求的优化管理(归并与从头排序)来提高系统性能。.主设备号,次设备号,具有相同主设备号的设备之间公用同一驱动程序,而用次设备号来标识具体物理设备:insmod和modprobe是用于加载当前模块,但insmod不会自动解决依存关系,即若是要加载的模块引用了当前内核符号表中不存在的符号,则无法加载,也不会去查在其他尚未加载的模块中是不是概念了该符号;modprobe能够按照模块间依存关系和/etc/文件中的内容自动加载其他有依赖关系的模块。Rmmod:rmmod是用于将当前模块卸载。Lsmod:lsmod列出当前系统中加载的模块,其中左侧第一列是模块名,第二列是该模块大小,第三列则是利用该模块的对象数量。.解释mknod/dev/mytestdevicec590语法:mknodName{b|c}MajorMinormknod命令成立一个目录项和一个特殊文件的对应索引节点。第一个参数是Name项设备的名称。选择一个描述性的设备名称。b标志表示那个特殊文件是面向块的设备(磁盘、软盘或磁带)。c标志表示那个特殊文件是面向字符的设备(其他设备)。最后两个参数是指定主设备的数量,它帮忙查找设备驱动程序代码,和指定次设备的数量,也就是单元驱动器或行号,它们是十进制或八进制的。一个设备的主要和次要编号由该设备的配置方式分派,它们保留在ODM中的CuDvDr类里。在那个对象类中概念了主要和次要编号以确保整个系统设备概念的一致性,这是很重要的。.内核模块编程中打印信息的函数printk,输出信息的位置是/var

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论