嵌入式总结.docx
《嵌入式总结.docx》由会员分享,可在线阅读,更多相关《嵌入式总结.docx(23页珍藏版)》请在冰豆网上搜索。
![嵌入式总结.docx](https://file1.bdocx.com/fileroot1/2023-6/18/9ef8e791-23a5-48a9-bbc2-e6b7b9330da4/9ef8e791-23a5-48a9-bbc2-e6b7b9330da41.gif)
嵌入式总结
1概述
嵌入式系统是以应用为中心,以计算机技术为基础,软、硬件高度定制,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统
物联网三层架构:
感知层、网络层、应用层
实验箱ARM9处理器ARMV5指令集2410
ARM11ARMV6指令集6410
多核(4)A9ARMV74412(友善之臂)
8核A15+A7(Cortex-A7处理器的体系结构和功能集与Cortex-A15处理器完全相同,因此这两种处理器可在big.LITTLE(大小核伴侣结构)配置中协同工作)
嵌入式操作系统的分类:
按系统的类型分
商用系统:
iOS、VxWorks、WindowsCE、PalmOS
专用系统
开源系统:
Android、嵌入式Linux、Linux发行版,μC/OS
按响应时间分
实时操作系统(RealTimeOperatingSystem,RTOS)
非实时操作系统
按软件结构分
单体结构
分层结构
微内核结构
Android是基于Linux内核的移动操作系统,自下而上分四层,依次为内核层,系统库,框架层及应用层。
2硬件基础
指令:
指令包括两方面的内容:
操作要求和操作数地址
,都由二进制数码表示,分别称作操作码和地址码
✓操作码决定要完成的操作
✓地址码指参加运算的数据及其所在的单元地址
ARM体系结构的特别技术:
所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率
可用加载/存储指令批量传输数据,以提高数据的传输效率
可在一条数据处理指令中同时完成逻辑处理和移位处理
在循环处理中使用地址的自动增减来提高运行效率
ARM处理器简介:
指令结构
ARM9预取(Fetch)译码(Decode)执行(Execute)访存(Memory)写入(Write)
冯·诺依曼:
指令与数据结合在一起(或称普林斯顿体系)程序指令和数据的宽度相同
哈佛体系结构:
是一种将程序指令存储和数据存储分开的存储器结构。
两种结构比较:
冯•诺依曼结构哈佛结构
寄存器PriceSpeed
Cache
主存
本地存储器
网络存储
大端和小端(Big-Endian和Little-Endian)
1)Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。
2)Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。
一般操作系统是小端,而通信协议是大端。
数字0x12345678在内存中的表示形式为:
例:
存储器分类(按功能)
ARM的存储管理单元(MMU):
MMU:
完成虚拟空间到物理空间的映射+控制访问权限
主存:
DDR内存带宽=时钟频率*2*内存位宽
例:
PC2700是DDR333,其工作频率是333/2=166MHz,2700表示带宽为2.7G。
DDR32400->工作频率1200MHz
1200MHzx2x64bit=2400x8MHzB=19200MB
各RAM的比较:
1、SRAM:
静态RAM,不用刷新,速度可以非常快,像CPU内部的cache,都是静态RAM,缺点是一个内存单元需要的晶体管数量多,因而价格昂贵,容量不大。
2、DRAM:
动态RAM,需要刷新,容量大。
3、SDRAM:
同步动态RAM,需要刷新,速度较快,容量大。
4、DDRSDRAM:
双通道同步动态RAM,需要刷新,速度快,容量大。
ROM:
ROM指的是“只读存储器”,即Read-OnlyMemory
PROM指的是“可编程只读存储器”既ProgrammableRed-OnlyMemory
EPROM指的是“可擦写可编程只读存储器”,即ErasableProgrammableRead-OnlyMemory
EEPROM指的是“电可擦除可编程只读存储器”,即ElectricallyErasableProgrammableRead-OnlyMemory。
Flashmemory指的是“闪存”按块(Block)擦除
NOR与NANDFlash
1.NORFlash需要很长的时间进行抹写,但是它提供完整的寻址与数据总线,并允许随机存取存储器上的任何区域,这使的它非常适合取代老式的ROM芯片。
2.NANDFlash具有较快的抹写时间,而且每个存储单元的面积也较小,这让NANDFlash相较于NORFlash具有较高的存储密度与较低的每比特成本。
同时它的可抹除次数也高出NORFlash十倍。
然而NANDFlash的I/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取,NANDFlash典型的区块大小是数百至数千比特。
CompactFlash(CF卡)MemoryStick,简称为MS卡xD图像卡(ExtremeDigital-PictureCard)
SecureDigital缩写SD,全名SecureDigitalMemoryCard
总线:
PC104:
针对嵌入式控制提出的工业总线标准
I2C(Inter-IntegratedCircuit)总线是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。
是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
I2C总线支持任何IC生产工艺。
通过串行数据(SDA)线和串行时钟(SCL)线在连接到总线的器件间传递信息。
特征
1.只要求两条总线线路:
一条串行数据线SDA,一条串行时钟线SCL;
2.每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为发送器或接收器;
3.它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;
4.串行的8位双向数据传输位速率在标准模式下可达100kbit/s,快速模式下可达400kbit/s,高速模式下可达3.4Mbit/s;
5.连接到相同总线的IC数量只受到总线的最大电容400pF限制。
USB:
A型、B型(倒梯形)、MiniA(倒梯形)、MiniB、MicroA、MicroB(倒梯形)
RS-232
RS-232是最广泛使用的串行接口
由电子工业协会(ElectronicIndustriesAssociation,EIA)制定的异步传输标准。
通常RS-232接口以9个引脚(DB-9)或是25个引脚(DB-25)的型态出现,
数据发送TXD与接收线TXD为负逻辑
逻辑1(MARK):
-3V~-15V,对应的TTL电平的“1”
逻辑1(SPACE):
+3V~+15V,对应的TTL电平的“0”
联络控制信号(RTS、CTS、DTR、DSR、DCD)为正逻辑
信号有效(接通,ON状态):
+3V~+15V
信号无效(断开,OFF状态):
-3V~-15V
串口设置:
96008N1
CAN是控制器局域网络(ControllerAreaNetwork,CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发的,并最终成为国际标准,是国际上应用最广泛的现场总线之一。
。
在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线。
CAN总线是一种串行数据通信协议,其通信接口中集成了CAN协议的物理层和数据链路层功能,可完成对通信数据的成帧处理,包括位填充、数据块编码、循环冗余检验、优先级判别等项工作。
JTAG接口:
主要用于芯片内部测试(如DSP、FPGA、ARM、部分单片机)
显示接口:
VGA接口是一种D型接口,采用非对称分布的15pin连接方式,共有15针,分成3排,每排5个孔。
DVI(DigitalVisualInterface),即数字视频接口
一个是DVI-D接口,只能接收数字信号,不兼容模拟信号。
另外一种则是DVI-I接口,可同时兼容模拟和数字信号。
兼容模拟信号并不意味着模拟信号的接口D-Sub接口可以连接在DVI-I接口上,而是必须通过一个转换接头才能使用,一般采用这种接口的显卡都会带有相关的转换接头。
DVI线有18+1和24+1以及18+5和24+5这4种规格:
18针属于单通道DVI,24针属于双通道DVI
高清晰度多媒体接口(英文:
HighDefinitionMultimediaInterface,HDMI
是一种数字化视频/音频接口技术,是适合影像传输的专用型数字化接口,其可同时传送音频和影像信号,最高数据传输速度为18Gbps。
HDMI可以同时发送音频和影音信号
标准的TypeAHDMI接头有19个脚位,另有一种支持更高分辨率的TypeB接头被定义出来,但目前仍无任何厂商使用TypeB接头。
HDMICType,俗称mini-HDMI.主要用于便携式设备
DisplayPort也是一种高清数字显示接口标准,可以连接电脑和显示器,也可以连接电脑和家庭影院。
(免费)DisplayPort只需一条数据线就能搞定无损高清视频+音频
3开发环境
交叉编译:
所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码。
编译最主要的工作是将程序转化成运行该程序的CPU所能识别的机器代码
交叉编译就是在特殊的编译环境下,如同翻译一样,把程序代码编译成不同的CPU所对应的机器代码。
交叉编译环境建立在宿主机(一台普通计算机)上,对应的嵌入式开发板叫做目标板(或开发板)。
minicom是Linux下的串口通信软件
WindowsXP超级终端是Windows下的串口通信软件
相同点:
minicom和WindowsXP超级终端都是一种串口通信工具,可用来与串口设备通信,它们在嵌入式系统开发中充当嵌入式系统的“显示器”,能够实时显示开发板上的内容
注意:
若系统是Linux,则只能使用minicom
如果系统是Windows和虚拟机的情况,minicom和WindowsXP超级终端都可以使用。
但是启动了minicom之后超级终端是不可用的,需要重新启动系统,再使用超级终端。
设置minicom
ttyS0
将串口配置为:
波特率:
115200
8位数据位,
1位停止位,
没有流控。
NFS(NetworkFileSystem)指网络文件系统服务,NFS服务可以使网络上的同为Linux或Unix系统主机共享文件系统。
NFS可以将远程文件系统载入在本地文件系统下
NFS的使用分为
服务器端——提供要共享的文件,被挂载(mount)端
客户端——通过挂载mount实现对共享文件的访问操作
◆NFS服务器端配置NFS客户端
⏹
(1)关闭防火墙
(1)进入通信终端:
minicom或超级终端
⏹
(2)配置NFS服务器
(2)设置开发板IP地址
⏹(3)设置NFS服务器IP(3)挂载共享目录
⏹(4)启动NFS服务
Samba服务可实现Windows和Linux不同系统间交换文件共享。
步骤:
(1)关闭防火墙(同NFS)
(2)配置Samba服务器
(3)设置Samba服务器IP地址
(4)启动Samba服务器
(5)设置Windows的IP地址
(6)在Windows下访问共享
4Makefile
⏹当我们在终端输入make命令后
1)make命令会在当前目录下找名字叫“Makefile”或“makefile”的文件;
2)如果找到,它会找文件中的第一个目标,需要注意的是,第一个目标是makefile的最终目标;
3)如果makefile的第一个目标所需要的条件不符合或者是第一个目标所依赖的文件比已经生成的目标文件新,就找下一个目标来生成第一个目标所依赖的条件;
这就是整个Make的依赖性,make会一层一层的去找依赖关系,并最终编译出第一个目标文件。
最需要注意的是:
在Makefile中的命令,必须要以[Tab]键开始
Makefile的工作方式:
⏹1、读入所有的Makefile。
⏹2、读入被include的其它Makefile或文件。
⏹3、初始化文件中的变量。
⏹4、推导隐晦规则,并分析所有规则。
⏹5、为所有的目标文件创建依赖关系链。
⏹6、根据依赖关系,决定哪些目标要重新生成。
⏹7、执行生成命令。
Makefile只会编译修改过的文件
定义变量:
变量名=值
调用变量:
$(变量名)
makefile的语法-自动生成依赖性
一个例子:
comma:
=,
empty:
=
space:
=$(empty)$(empty)
foo:
=abc
bar:
=$(subst$(space),$(comma),$(foo))
在这里例子中$(bar)的最终取值为“a,b,c”
5Linux命令
超级用户的提示符是#。
如果是一般用户登录,其提示符是>。
在Linux系统中有以下基本的通配符:
●?
:
表示该位置可以是一个任意的单个字符。
●*:
表示该位置可以是若干个任意字符。
● 方括号[charset]:
可替代charset集中的任何单个字符
man:
语法:
man[参数选项]帮助主题。
说明:
man实际上就是查看命令用法的help
Linux文件有3个修改时间:
1)modificationtime(mtime,修改时间):
这个时间指的是文件内容修改的时间,而不是文件属性的修改,当数据内容修改时,这个时间就会改变,用命令ls-l默认显示的就是这个时间:
2)changetime(ctime,状态时间):
当一个文件的状态改变时,这个时间就会改变,包括更改了文件的权限与属性等,它就会改变。
3)accesstime(atime,访问时间):
当读取文件内容时,就会更改这个时间,例如使用cat去读取/etc/man.config,那么该文件的atime就会改变。
ln命令
它的功能是为某一个文件在另外一个位置建立一个快捷方式
Linux文件系统中,链接又可分为两种:
硬链接(hardlink)与软链接(symboliclink),硬链接的意思是一个文件可以有多个名称,而软链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个档案的位置。
硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
软链接:
ln–s源文件目标文件
1.软链接,以路径的形式存在。
类似于Windows操作系统中的快捷方式
2.软链接可以跨文件系统,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
硬链接:
1.硬链接,以文件副本的形式存在。
但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
chmod
chmod的语法有两种模式:
语法1:
chmod[options][who]opcodepermissionfile…
语法2:
chmod[options][n1]n2n3n4file…
说明:
改变文件或目录的权限模式
ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
使用ps该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等
-aux显示所有包含其他使用者的行程
STAT:
该程序目前的状态,主要的状态有
R:
该程序目前正在运作,或者是可被运作
S:
该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号(signal)唤醒。
T:
该程序目前是停止的
Z:
该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序的状态
tar
语法:
tar[参数选项][tar文件][文件或目录]
说明:
从一个打包介质中拷贝文件或恢复文件。
如果是目录,则整个子目录都一起操作,参数不需在文件之前。
范例一:
将整个/etc目录下的文件全部打包成为/tmp/etc.tar
[root@linux~]#tar-cvf/tmp/etc.tar/etc<==仅打包,不压缩!
[root@linux~]#tar-zcvf/tmp/etc.tar.gz/etc<==打包后,以gzip压缩
[root@linux~]#tar-jcvf/tmp/etc.tar.bz2/etc<==打包后,以bzip2压缩
#特别注意,在参数f之后的文件名习惯上都用.tar来作为辨识。
#如果加z参数,则以.tar.gz或.tgz来代表gzip压缩过的tarfile
#如果加j参数,则以.tar.bz2来作为子文件啊~
#上述指令在执行的时候,会显示一个警告讯息:
#『tar:
Removingleading`/'frommembernames』那是关於绝对路径的特殊设定。
范例二:
查阅上述/tmp/etc.tar.gz文件内有哪些文件?
[root@linux~]#tar-ztvf/tmp/etc.tar.gz
#由於我们使用gzip压缩,所以要查阅该tarfile内的文件时,
#就得要加上z参数
范例三:
将/tmp/etc.tar.gz文件解压缩在/usr/local/src底下
[root@linux~]#cd/usr/local/src
[root@linuxsrc]#tar-zxvf/tmp/etc.tar.gz
#在预设的情况下,我们可以将tar包在任何地方解开的!
#先将工作目录变换到/usr/local/src底下,
#再解开/tmp/etc.tar.gz,则解开的目录会在/usr/local/src/etc
#另外,/usr/local/src/etc下的文件属性与/etc/可能会有所不同。
范例四:
在/tmp下,只将/tmp/etc.tar.gz内的etc/passwd解开
[root@linux~]#cd/tmp
[root@linuxtmp]#tar-zxvf/tmp/etc.tar.gzetc/passwd
#tar-ztvf来查阅tarfile内的文件名称
#如果只要一个文件,通过第二个参数输入文件名
注意:
etc.tar.gz内的根目录/被去掉
6嵌入式数据库
⏹嵌入式数据库属于程序驱动式,其它数据库属于引擎响应式。
⏹嵌入式数据库不需要独立运行数据库的引擎,一般是和操作系统及其具体的应用集成在一起。
只要在运行的操作系统平台上有相应的嵌入式数据库的驱动,应用程序直接调用相应的API去实现对数据的存取操作就可以了。
⏹嵌入式数据库是一种具备了基本数据库特性的数据文件。
SQLite最大特点是其数据类型为无数据类型
8嵌入式设备驱动程序设计
设备驱动程序(DeviceDriver)简称“驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口。
操作系统通过这个接口,才能控制硬件设备的工作。
系统调用是操作系统内核和应用程序之间的接口
设备驱动程序是操作系统内核和机器硬件之间的接口
设备驱动程序作为内核模块动态加载
设备驱动程序为应用程序屏蔽了硬件的细节
设备驱动程序完成以下的功能:
Ø对设备初始化和释放;
Ø把数据从内核传送到硬件和从硬件读取数据;
Ø读取应用程序传送给设备文件的数据和回送应
用程序请求的数据;
Ø检测和处理设备出现的错误;
ØLinux操作系统的设备分类:
Ø字符设备:
字符设备以单个字节为单位进行顺序读写操作,通常不使用缓冲技术。
Ø块设备:
块设备是以固定大小的数据块进行存储和读写的设备
Ø网络设备:
在Linxu操作系统里进行了专门的处理。
Linux的网络系统主要是基于BSDUNIX的Socket机制。
用户进程运行在用户空间,设备驱动程序工作在内核空间
系统调用是用户进程进入内核空间的唯一通道。
Linux抽象了对硬件的处理,各种设备都以文件的形式存放在/dev目录下,称为设备文件。
Linux设备驱动程序原理:
驱动程序与系统调用
设备号:
嵌入式Linux系统通过设备号来区分不同设备。
设备号分为
主设备号
内核通过主设备号将设备与相应的驱动程序对应起来
主设备号的取值范围是0~255
次设备号
当一个驱动程序要控制若干个设备时,就要用次设备号来区分它们。
设备注册:
设备获得主、次设备号有两种方式:
Ø手动给定一个数,使用某个函数注册,并将它与设备联系起来;
Ø调用系统函数给设备动态分配一个主、次设备号。
对设备进行访问和操作的程序由两部分组成设备驱动程序,用户应用程序
区别:
Ø应用程序一般有一个main函数,从头到尾执行一个任务;驱动程序却不同,它没有main函数,通过使用宏module_init(初始化函数名),将初始化函数加入内核全局初始化函数列表中。
通过宏module_exit(退出处理函数名)注册退出处理函数
Ø应用程序可以包含标准的头文件,比如、等;在驱动程序中是不能使用标准C库的,因此不能调用所有的C库函数,只能调用内核的函数,比如输出打印函数只能使用内核的printk函数,包含的头文件只能是内核的头文件
例1:
一个最简单的驱动程序(只有加载和卸载功能)
#include
#include
intinit_module(void)
{
printk("Hello,Test_drv[---kernel---]\n");
return0;
}
voidcleanup_module(void)
{
printk("GoodbyeTest_drv[---kernel---]\n");
}
module_init(init_module);
module_exit(cleanup_module);
设备驱动程序的加载过程:
1、设备进入点
2、加载设备驱动程序
3、设备驱动程序加载与卸载的工作过程
设备驱动程序的功能接口函数模块
设备驱动程序通过功能接口函数完成对设备的各种操作。
一个设备驱动程序模块包含有5个部分的功能接口函数:
Ø
(1)驱动程序的注册与释放(devfs_register_chrdev、devfs_unregister_chrdev)
Ø
(2)设备的打开与关闭(open、release)
Ø(3)设备的读写操作(read、write)
Ø(4)设备的控制操作(ioctl)
Ø(5)设备的中断与轮询处理
例3:
编写一个调用设备驱动程序功能接口的用户程序。
/*******用户程序te