class="markdown_views prism-github-gist">
1、嵌入式系统的CPU主要使用的有DSP、ARM以及FPGA。
2、DSP
- 适用于数字信号处理的微处理器
- 支持单指令多数据(DIMD)并行处理的指令
- 显著提高音频、视频等数字信号的数据处理效率
3、片上系统
- SOC已成为嵌入式处理器芯片的主流发展趋势
- 它是集成电路进入深亚微米时代的产物
- 既能把数字电路也能把模拟电路集成到单个芯片上
4、按照软硬件技术的复杂程度进行分类,可以把嵌入式系统分为:高端系统、终端系统和低端系统三大类。
5、集成电路
- 集成电路有小规模(SSI)、中规模(MSI)、大规模(LSI)、超大规模(VLSI)和极大规模(ULSI)组成,嵌入式处理芯片一般属于VLSI和USLI。
- 集成电路大多是在硅衬底上制作,硅衬底是单晶硅锭经切割,研磨和抛光而成的圆形薄片。
- 集成电路中的电路及电子元件,需要反复交叉氧化、光刻、掺杂和互连等工序才能制成。
6、以太网数据帧
前导码(7个字节) -> 帧起始界定符(1字节) -> 目的MAC地址(6字节) -> 源MAC地址(6字节)-> 类型/长度(2字节) -> 数据(46~1500字节) ->帧校验序列(4字节)
记住是没有IP地址的!
7、IP地址
A类
- 1.0.0.0 到126.255.255.255
- 分配给具有大量主机而局域网络数量较少的大型网络
- 由1个字节的网络地址和3个字节主机地址组成
- 网络地址的最高位必须是“0”,即第一字段的范围 0~127,但是由于全0和全1的地址用作特殊用途,实际可指派的第一个字段范围是1~126。
- 每个IP地址可连16387064台主机,Internet有126个A类地址
- 可以用于多目的地址发送,言外之意可以组播
- 为A类 主要分配给具有大量主机而局域网络数量较少的大型网络
B类
- 128.0.0.0到191.255.255.255
- 般用于国际性大公司和政府机构
- 前两个八位字节指明网络,后两个八位字节指明网络上的主机。
C类
- 192.0.0.0到223.255.255.255
- 用于一般小公司 校园网 研究机构
- 前三个八位字节指明网络,后一个八位字节指明网络上的主机。
D类
- 224.0.0.0到239.255.255.255
- 用于特殊用途. 又称做广播地址
E类
- 240.0.0.0到247.255.255.255
- 暂时保留
8、ARM处理器
- ARM是一家英国公司,采用RISC - 精简指令集。 CISC - 复杂指令集
- 冯诺依曼结构体系或者哈佛结构(哈佛有两个存储器,数据和程序),具体区别参考这里
- ARM的总线结构成为 AMBA -先进微控制器总线结构(一种开放式总线结构)
- ARM7~ARM11 成为经典处理器,ARM11之后以cortex命名
- R/A/M分别面向实时控制、高端控制、微控制器
- ARM的三种状态:ARM状态、Thumb/thumb-2状态、调试状态
- ARM状态是ARM处理器工作在32位指令的状态,即32位状态,所有指令均是32位宽度
- Thumb是ARM执行16位指令的状态,即16位宽度
- Thumb模式下,指令代码只有16位,代码密度变大,占用内存空间减少,提供比32位程序代码更佳的效果。
- ARM处理器自动复位后自动进入ARM状态
- 按照AMBA总线规范,基于ARM内核的嵌入式处理芯片采用系统总线和外围总线两层结构的方式构建片上系统
- 连接系统总线的高带宽组件主要包括:电源管理和时钟控制器,测试接口,外部存储器控制接口,DMA控制器,USB主机,中断控制器。(可以看出大多数为控制器)
- 而RTC是与外围总线连接的硬件组件
- AMBA - -先行微控制器总线结构 ,对于高速组件采用AHB接口,对于低速外设接口则采用APB总线,AHB通过桥接器链接APB。
9、ARM处理器当前运算所产生的标志位记录在CPSR寄存器中(current program status register)
- CPSR在用户级编程用于存储条件码
- CPSR包含条件码标志,中断禁止位,当前处理器模式以及其他状态和控制信息
10、
LDR R0, [R1, #4]
意思是R1寄存器的内容自动增加4,形成操作数的有效地址,从中取出32位操作数存入寄存器R0。
11、区别几条指令:
单一数据加载/存储指令有:
LDR(字数据加载指令)、LDRB(字节数据加载指令)、LDRH(半字数据加载指令)
STR(字数据存储指令)、STRB(字节数据存储指令)、STRH(半字数据存储指令)
STR R0, [R1]
- 将R0中一个字的数据,存入以R1的值为地址的存储器中。
LDR R0, [R1]
- 以R1的值为地址的存储器中的字数据(为32位)读入寄存器R0
STRH R0, [R1]
- 以R1的值为地址的存储器中的半字数据(为16位)读入寄存去R0
STRB R0, [R1]
- 以R1的值为地址的存储器的字节数据(为8位)读入寄存器R0
12、
LDR R1, #0x12345678
LDR是加载存储指令,表示存储器到寄存器的数据传送,而#是立即数符号,表示立即数寻址。所以这样写是不正确的!
13、ADC R1, R2, R3 表示 R1 = R2+R3+C(C表示进位)(ADD表示加法)(ADC表示)
14、嵌入式系统一般包括嵌入式处理器、时钟电路、电源电路、复位电路、存储器和调试测试接口。
15、JTAG
- JATG是一种嵌入式测试技术,大多数嵌入式CPU、DSP、FPGA器件都支持JTAG
- JTAG允许多个芯片的边界扫描寄存器BSR通过JTAG接口串联在一起,实现对多个器件的测试
- 通过JTAG可以实现在线编程功能
16、前向通道和后向通道
- 前向通道 - 输入接口,A/D
- 后向通道 - 输出接口,D/A
17、GPIO
- GPIO引脚一般是多功能复用的,具有0态,1态和高阻态。
- 作为输入接口时一般具有缓冲功能,作为输出接口时一般具有锁存功能。
18、互连通信组件
ARM内部一般有:UART/I2C/SPI/CAN/USB/Ethernet等多个互连通信组件。
19、存储器
- 按照存取特性分为:RAM和ROM
- 按照物理位置分为:片内存储器和片外存储器以及外部存储器
- 按照存储信息的类型分为:程序存储区和数据存储器
20、UART
- ARM芯片中的UART收发信息时,可以采用FIFO,也可以采用普通模式
- UART传送消息的格式是以起始位开始以停止位结束
- UART传送信息时,一次可传输的数据位可以是5,6,7,8位,由编程决定
- 基于UART可组成RS-232接口
21、键盘
- 8个GPIO脚最多构成64个按键的键盘
- 矩阵键盘通常有行扫描法和反转法读取按键的特征值
22、uC/OS – II
- 系统启动过程中,Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main函数。main函数在执行过程中除了用户函数和硬件初始化函数之外,需要执行下面三个重要函数:
OSInit() -> OSTaskCreate() -> OSStart()
(注意先后顺序)
- 系统中每个任务有五种状态:休眠态,就绪态,运行态,挂起态,被中断态
- 任务处于休眠态 - 任务停留在内存中,还没有交给内核管理。
- 任务处于就绪态,该任务已经准备好,可以运行了,但是由于任务的优先级比正在运行任务的优先级低,还暂时不能运行。
- 任务处于运行态,任务得到了CPU的控制权正在运行之中
- 任务处于中断态,发生中断执行相应的中断服务,原来在正在运行后的任务暂时停止运行,进入被中断状态
- OSCtxSw() - 真正实现任务切换的函数
- OSSched() - 任务前导函数,任务级的调度函数
- OSIntExit() - 中端级的调度函数
- 最多允许的中断嵌套层数可以达到255层
- 该系统能提供周期性时钟信号(时钟节拍),用于实现任务的正确延时和超时确认,街拍率在10~100Hz之间
- 该系统事件控制块有4种类型,需要使用4个不同的函数来创建
OSSemCreate()
(信号量创建)
OSMutexCreate()
(创建互斥体)
OSMboxCreate()
(建立一个邮箱)
OSQCreate()
(创建事件控制块)
- 内核提供任务调度、任务间通信与同步、任务管理、时间管理和存储管理。
- 就绪任务登记在就绪表中
OSRdyTbl[ ]
是就绪表的位图映像矩阵,每一位代表了一个优先级任务的就绪状态,成为就绪位,该矩阵最多有64位。
23、Linux内核
- 进程调度模块负责控制进程对CPU资源的使用,所采取的调度策略是使得各个进程能够平均访问CPU,同时保证内核能及时地执行硬件操作。
- 内存管理模块的功能之一是屏蔽各种硬件接口内存结构的差异并向上返回一个统一的访问接口
- 网络接口模块包含网络接口驱动程序
- 支持进程之间的各种通信机制,其通信机制包括:信号、管道、消息队列、信号量、共享内存、套接字(socket)
24、U-BOOT
- 全称universal-Boot-Loader
- 支持PowerPC、x86、ARM等多种体系结构的处理器
- 支持嵌入式Linux、VxWorks、QNX、RTEMS、Windows CE等操作系统
- 采用两个阶段完成操作系统的引导加载
- 引导加载程序主要完成:加电自检、外设存在自检、内存地址映射、初始化外围设备、内存寻址定位、加载并启动操作系统
- BootLoader通常分为stage1和stage2两大部分。依赖于CPU的体系结构,比如设备初始化代码通常放在stage1中,且使用汇编语言实现,以达到短小精悍的目的。stage2通常用于C语言实现更复杂的功能,同时代码也具有更好的可读性和可移植性。
- BootLoader的stage1的基本步骤是:基本硬件初始化,为加载stage2准备RAM空间,拷贝stage2的执行代码到RAM空间中,设置栈区指针SP,跳转到stage2的C程序入口点。
25、微内核和宏内核
- 属于微内核的典型嵌入式操作系统有:Symbian、VxWorks、QNX、uC/OS - II、IOS,而Symbian是普通实时操作系统
- VxWokrs用于尖端科技中
- IOS追根溯源是一个类UNIX操作系统,前身UNIX-BSD,属于宏内核架构,但是是微内核操作系统
- Android OS是典型的宏内核操作系统
26、Linux命令
arm - linux - gcc
交叉编译器来编译应用程序
- 要对一个应用程序进行调试排错,应在编译指令中加
g参数
对它进行编译
27、汉字编码
- 目前大陆地区采用较多的汉字编码标准有GB2312以及GB18030,通常汉字是2字节。
28、ARM中的通用寄存器
- 列表内容
- R13 – 堆栈指针SP
- R14 – 程序链接寄存器LR
29、FLASH
- NOR FLASH – 以字节为单位进行闪存
- NAND FLASH – 以页(行)为单位进行闪存
30、响应时间有两个指标 - 中断延迟时间和任务切换时间
31、嵌入式系统开发中,由于受到目标机资源的限制,需要建立一个宿主机与目标机组成的调试架构完成开发工作。若目标机是裸机环境,通常需要通过JTAG接口完成硬件环境测试和初始化软件的调试和下载
32、基于嵌入式WEB的应用系统中,构件设计阶段需要设计支持以太网通信的电路,包括以太网控制电路和以太网驱动电路。AX8879芯片内部寄存器的读/写地址,其首地址一般是0x1000 0000
33、控制寄存器和数据寄存器
- 控制寄存器是4个字节,比如端口E的控制寄存器
rGPECON = 0x00005555
- 数据寄存器是2个字节,比如端口E的数据寄存器
rGPEDAT=0x0020
34、主频时钟
- 0.01s基准定时时间选用S3C2410芯片内部的Timer0部件产生。若系统的主频参数PCLK=264MHz,分频器选择16,预分频系数选择为3,那么,Timer0的计数常数为:41250
- 计算方法:定时器输入时钟频率 = PCLK/(预分频系数+1)/(分割器值),计数常数 = 定时间间隔/(1/定时器输入时钟频率)
34、IRQ
- IRQ异常对应的异常向量地址为:0x00000018
- IRQ异常向量地址和下一个异常向量地址之间的间隔为4个字节