嵌入式程序设计温习总结.docx
- 文档编号:30325334
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:11
- 大小:190.77KB
嵌入式程序设计温习总结.docx
《嵌入式程序设计温习总结.docx》由会员分享,可在线阅读,更多相关《嵌入式程序设计温习总结.docx(11页珍藏版)》请在冰豆网上搜索。
嵌入式程序设计温习总结
嵌入式程序设计课程总结
第一章(嵌入式系统基础)
1.嵌入式系统概念
普遍的嵌入式系统的概念:
嵌入式系统是指以应用为中心,以运算机技术为基础,软件硬件可剪裁,适应应用系统对功能、靠得住性、本钱、体积、功耗严格要求的专用运算机系统。
特点:
1)面向特定应用的特点。
2)嵌入式系统的硬件和软件都必需进行高效地设计,量文体衣、去除冗余,力争在一样的硅片面积上实现更高的性能。
3)嵌入式系统是将先进的运算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。
4)为了提高执行速度和系统靠得住性,嵌入式系统中的软件一般都固化在存储器芯片中或单片机本身,而不是存储于磁盘中。
5)嵌入式开发的软件代码尤其要求高质量、高靠得住性。
6)嵌入式系统本身不具有二次开发能力。
2.交叉编译
嵌入式软件开发所采用的编译为交叉编译。
所谓交叉编译就是在一个平台上生成能够在另一个平台上执行的代码。
3.交叉调试
调试器和被调试进程运行在不同的机械上,调试器运行在PC机(宿主机),而被调试的进程则运行在各类专业调试板上(目标板)。
调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。
4.Bootloader的作用
简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。
通过这段程序,能够完成硬件设备的初始化,并成立内存空间的映射关系,从而将系统的软硬件环境带到一个适合的状态,为最终加载系统内核做好预备。
第二章(程序开发工具)
1.Vi
四种模式:
标准模式、插入模式、命令行模式、可视模式。
2.Gcc
编译流程:
(4个步骤)
预处置、编译、汇编、链接。
常常利用选项:
库相关选项:
函数库分为静态库和动态库两种,静态库是一系列的目标文件(.o文件)的归档文件(文件名格式为),若是在编译某个程序时链接静态库,则链接器将会搜索静态库,从中提掏出它所需要的目标文件并直接拷贝到该程序的可执行二进制文件(ELF格式文件)当中;动态库(文件名格式为[.主版本号.次版本号.发行号])在程序编译时并非会被链接到目标代码中,而是在程序运行时才被载入。
3.Gdb
上机时进行的操作:
l、b、n、c
4.Make
能解释规则含义:
makefile的规则是make进行处置的依据,它包括了目标体、依赖文件及其之间的命令语句。
普通规则
隐含规则:
隐含规则能够告知make如何利用传统的规则完成任务,如此,当用户利用它们时就没必要详细指定编译的具体细节,而只需把目标文件列出即可
模式规则:
模式规则是用来概念相同处置规则的多个文件的。
第三章(linuxC语言基础)
1.栈(stack):
由编译器自动分派释放,寄存函数的参数值,局部变量的值,返回地址等,其操作方式类似于数据结构中的栈。
2.堆(heap):
一般由程序员动态分派(挪用malloc函数)和释放(挪用free函数),若程序员不释放,程序结束时可能由操作系统回收。
3.数据段(data):
寄存的是全局变量、静态变量、常数。
按照寄存的数据,数据段又能够分成普通数据段(包括可读可写/只读数据段,寄存静态初始化的全局变量或常量)、BSS数据段(寄存未初始化的全局变量)。
4.代码段(code):
寄存程序代码。
5.字节序:
字节顺序是指一个字中各个字节的顺序,有大端模式和小端模式。
大端模式:
字数据的高字节存储在低地址中,字数据的低字节寄存在高地址中。
小端模式:
字数据的高字节存储在高地址中,字数据的低字节寄存在低地址中。
第四章(文件IO)
1.系统挪用与用户编程接口API的区别
所谓系统挪用是指操作系统提供给用户程序挪用的一组“特殊”接口,用户程序能够通过这组“特殊”接口来取得操作系统内核提供的服务。
例如用户能够通过进程控制相关的系统挪用来创建进程、实现进程调度、进程管理等。
前面讲到的系统挪用并非是直接与程序员进行交互的,它仅仅是一个通过软中断机制向内核提交请求,以获取内核服务的接口。
在实际利用中程序员挪用的一般是用户编程接口——API
2.文件描述符的概念
文件描述符是一个非负的整数,它是一个索引值,并指向在内核中每一个进程打开文件的记录表。
当打开一个现存文件或创建一个新文件时,内核就向进程返回一个文件描述符;当需要读写文件时,也需要把文件描述符作为参数传递给相应的函数.
通常,一个进程启动时,都会打开3个文件:
标准输入、标准输出和标准犯错处置。
这3个文件别离对应文件描述符为0、1和2(也就是宏替换STDIN_FILENO、STDOUT_FILENO和STDERR_FILENO)。
3.open()/read()/write()/close()与fopen()/fread()/fwrite()/fclose()的区别
open()/read()/write()/close()基于文件描述符;fopen()/fread()/fwrite()/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中,实现文件上锁的函数有lockf()和fcntl(),其中lockf()用于对文件施加建议性锁,而fcntl()不仅能够施加建议性锁,还能够施增强制锁。
同时,fcntl()还能对文件的某一记录上锁,也就是记录锁。
记录锁又可分为读取锁和写入锁,其中读取锁又称为共享锁,它能够使多个进程都能在文件的同一部份成立读取锁。
而写入锁又称为排斥锁,在任何时刻只能有一个进程在文件的某个部份上成立写入锁。
固然,在文件的同一部份不能同时成立读取锁和写入锁。
第五章(进程控制开发)
()
fork()函数用于从已存在的进程中创建一个新进程。
新进程称为子进程,而原进程称为父进程。
利用fork()函数取得的子进程是父进程的一个复制品,它从父进程处继承了整个进程的地址空间,包括进程上下文、代码段、进程堆栈、内存信息、打开的文件描述符、信号控制设定、进程优先级、进程组号、当前工作目录、根目录、资源限制和控制终端等,而子进程所特有的只有它的进程号、资源利用和计时器等。
2.父进程回收子进程需要挪用wait与waitpid
wait()函数是用于使父进程(也就是挪用wait()的进程)阻塞,直到一个子进程结束或该进程接到了一个指定的信号为止。
若是该父进程没有子进程或他的子进程已经结束,则wait()就会当即返回。
waitpid()的作用和wait()一样,但它并非必然要等待第一个终止的子进程,它还有若干选项,如可提供一个非阻塞版本的wait()功能,也能支持作业控制。
实际上wait()函数只是waitpid()函数的一个特例,在Linux内部实现wait()函数时直接挪用的就是waitpid()函数。
3.exit()与_exit()的区别
exit()函数的作用是:
直接使进程停止运行,清除其利用的内存空间,并清除其在内核中的各类数据结构;exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。
exit()函数与_exit()函数最大的区别就在于exit()函数在挪用exit系统之前要检查文件的打开情形,把文件缓冲区中的内容写回文件,就是图中的“清理I/O缓冲”一项。
第六章(多任务编程)
1.管道(Pipe)及出名管道(namedpipe):
管道可用于具有亲缘关系进程间的通信,出名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
单向性,往1号fd写,从0号fd读。
2.信号(Signal):
信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处置器收到一个中断请求效果上能够说是一样的。
3.消息队列(MessgeQueue):
消息队列是消息的链接表,包括Posix消息队列SystemV消息队列。
它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程能够依照必然的规则向消息队列中添加新消息;对消息队列有读权限的进程则能够从消息队列中读取消息。
4.共享内存(Sharedmemory):
能够说这是最有效的进程间通信方式。
它使得多个进程能够访问同一块内存空间,不同进程能够及时看到对方进程中对共享内存中数据的更新。
这种通信方式需要依托某种同步机制,如互斥锁和信号量等。
5.信号量(Semaphore):
主要作为进程之间和同一进程的不同线程之间的同步和互斥手腕。
6.套接字(Socket):
这是一种更为一般的进程间通信机制,它可用于网络中不同机械之间的进程间通信,应用超级普遍。
能解释ls–l列出的权限的含义
-rwxr-xr-x
第一名表示文件类型,-表示文件,d表示目录
2-4位表示文件所有者的权限,u权限
5-7位表示文件所有者所属组成员的权限,g权限
8-10位表示所有者所属组之外的用户的权限,o权限
2-10位的权限总和有时称为a权限
以上例子中,表示这是一个文件(非目录),文件所有者具有读、写和执行的权限,所有者所属组成员和所属组之外的用户具有读和执行的权限而没有写的权限。
第七章网络编程(看书看代码才是王道)
1.TCP/UDP套接字编程模型(老师说书上的略有错误,我就不粘贴了)
2.并发处置模型(仔细理解实验内容)
第八章设备驱动
将所有设备看成文件进行处置,位于/dev目录中
系统的设备分为3类:
字符设备,块设备,网络设备
3.字符设备通常以字节为单位顺序读写的设备
4.块设备通常指需要以块为单位随机读写的设备
5.设备驱动程序位于操作系统内核空间
6.解释字符设备与块设备
字符设备:
字符设备通常指像普通文件或字节流一样,以字节为单位顺序读写的设备。
字符设备可通过设备文件节点访问,它与普通文件之间的区别在于普通文件能够被随机访问,而大多数字符设备只能提供顺序访问,因为对它们的访问不会被系统所缓存。
块设备:
块设备通常指一些需要以块(如512字节)的方式写入的设备,如IDE硬盘、SCSI硬盘、光驱等。
它的驱动程序的编写进程与字符型设备驱动程序的编写有专门大的区别。
块设备驱动编程接口相对复杂,不如字符设备明晰易用。
块设备驱动程序对整个系统的性能影响较大,速度和效率是设计块设备驱动程要重点考虑的问题。
系统中利用缓冲区与访问请求的优化管理(归并与从头排序)来提高系统性能。
7.主设备号,次设备号,具有相同主设备号的设备之间公用同一驱动程序,而用次设备号来标识具体物理设备
:
insmod和modprobe是用于加载当前模块,但insmod不会自动解决依存关系,即若是要加载的模块引用了当前内核符号表中不存在的符号,则无法加载,也不会去查在其他尚未加载的模块中是不是概念了该符号;modprobe能够按照模块间依存关系和/etc/文件中的内容自动加载其他有依赖关系的模块。
Rmmod:
rmmod是用于将当前模块卸载。
Lsmod:
lsmod列出当前系统中加载的模块,其中左侧第一列是模块名,第二列是该模块大小,第三列则是利用该模块的对象数量。
9.解释mknod/dev/mytestdevicec590
语法:
mknodName{b|c}MajorMinor
mknod命令成立一个目录项和一个特殊文件的对应索引节点。
第一个参数是Name项设备的名称。
选择一个描述性的设备名称。
b标志表示那个特殊文件是面向块的设备(磁盘、软盘或磁带)。
c标志表示那个特殊文件是面向字符的设备(其他设备)。
最后两个参数是指定主设备的数量,它帮忙查找设备驱动程序代码,和指定次设备的数量,也就是单元驱动器或行号,它们是十进制或八进制的。
一个设备的主要和次要编号由该设备的配置方式分派,它们保留在ODM中的CuDvDr类里。
在那个对象类中概念了主要和次要编号以确保整个系统设备概念的一致性,这是很重要的。
10.内核模块编程中打印信息的函数printk,输出信息的位置是/var/log/message
第九章QT
1.信号与插槽机制是QT的核心机制,用于对象之间的通信,实现程序对用户操作界面时刻的响应。
用法
Qmake–project
Qmake
Make
第十章(实验上机部份,只具体解释了最后一个问题)
1.利用厂商提供的交叉编译环境
搭建开发环境
自己从头编译构建也是能够的,可是会有挑战性
2.下载内核/文件系统
厂商提供有文件系统骨架
3.按照所做应用的不同,需要定制内核/文件系统
如何从一个目录打包成文件系统
4.若是定制一个只读的文件系统呢?
Mount,拷贝出来,加内容,从头打包
5.测试程序
Ssh上传,文件系统可写?
Nfs
整个文件系统烧写
6.在宿主机通常利用minicom来通过串口与开发板交互,编译能够运行在开发板上的程序用的编译器命令是arm-linux-gcc,远程调试开发板上的程序用的命令是arm-linux-gdb,gdbserver运行在开发板上
7.方便开发调试,要用到nfs,开发板充当nfs客户端,宿主机充当nfs服务器
8.在宿主机上搭建tftp服务器是为了方便bootloader下载内核与文件系统
9.为了确认宿主机与开发板之间的网络连通,利用ifconfig命令将二者设置统一网段的IP
10.解释
scp:
/root/Work/Helloworld/root
scp就是securecopy,是用来进行远程文件拷贝的。
scp本地用户名@IP地址:
文件名1远程用户名@IP地址:
文件名2
[本地用户名@IP地址:
]能够不输入,可能需要输入远程用户名所对应的密码.
时间仓促,错误难免,只从课件上找到理论部分的解释,程序部分大家还是看书吧。
大雪无痕
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 程序设计 温习 总结