总结得很晚,很着急,前面是一些知识点(很偏的可能没有),后面是一部分错题知识点,全部掌握,不能保证优秀,良好还是可以的,加油吧,祝我和大家好运!
命是弱者的借口,运是强者的谦词!

嵌入式系统上的软件具有结构精简,代码轻量化,占用存储资源少的特点。
嵌入式系统和计算机操作系统的共同特征是:引导加载程序、外设驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库
嵌入式系统应用开发工具的主要目的:提高开发质量,缩短开发周期,降低开发成本

按照软硬件技术的复杂程度进行分类,可以把嵌入式系统分为:高端系统、终端系统和低端系统三大类。

仿真平台指嵌入式系统开发中使用的虚拟机管理软件、仿真软件或者指令集模式器
对应内存容量而言1KB = 1024B,对应外存(磁盘、U盘)等容量而言,1KB=1000B
OS装载方式:串口、以太网和USB装载
嵌入式应用程序经过交叉工具链生成映像文件后,需要下载到目标机进行调试。
调试完毕后映像文件必须有专用工具烧写到ROM中去,这种烧写工具俗称编程器!

文本根据排版格式可分为:纯文本和丰富文本。windows环境下,txt就是纯文本。相对于线性文本,超文本按着网状结构组织信息。WWW网页是最为常见超文本

当前速度最快的CPU已经超过10GHz

嵌套向量中断控制器缩写为NVIC,向量中断控制器缩写为VIC
GCC是GNU套件的编译链接器,能编译C语言,汇编语言。
GDB调试下,file命令是装入需要调试的可执行文件,run命令执行当前被调试的程序。
源文件到可执行文件的步骤:预处理->编译->汇编->连接。

前向通道 - 输入接口,A/D
后向通道 - 输出接口,D/A
AX88796芯片内部寄存器的地址范围:0x10000000 ~ 0x100003FF

嵌入式系统硬件的逻辑组成
硬件主体中央处理器和存储器,他们通过IO接口或者IO设备与外部世界联系,并借助总线相互连接
中央处理器主要由**运算器、控制器、寄存器和高速缓冲区(cache)**组成

嵌入式系统的特点
专用型
隐蔽型
资源受限
高可靠性
软件固化
实时性

嵌入式系统的CPU特点
实时处理
低功耗
结构特拓展性
集成了测试电路
4、8、16、32位字长

CPU
嵌入式系统的CPU主要使用的有DSP、RAM以及FPGA。
FPGA(Field-Programmable Gate Array)即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
DSP介绍
适用于数字信号处理的微处理器(DSP并非高性能通用处理器,它是一种专用于数字信号处理的微处理器)
支持单指令多数据(SIMD)并行处理的指令
显著提高音频、视频等数字信号的数据处理效率
手机和数码产品均有DSP

嵌入式开发流程
需求分析和规格说明 -> 系统设计 -> 构件设计 -> 系统集成与测试
测试的目的是验证模块/系统的功能和性能,以及时发现错误
基于嵌入式WEB的应用系统中,构件设计阶段需要设计支持以太网通信的电路,包括以太网控制电路和以太网驱动电路

嵌入式开发特点
宿主机 - 目标机的开发架构
与底层硬件控制程序的关系密切
软硬件资源受限制
需要固化程序
嵌入式系统开发调试工具

在线仿真器
JTAG适配器
示波器
GPIO

GPIO引脚一般是多功能复用的,具有0态,1态和高阻态。
作为输入接口时一般具有缓冲功能,作为输出接口时一般具有锁存功能
GPIO可以实现并行 IO,SPI、UART、I2C都是串行。

UART

UART由发生器、接收器、控制单元以及波特率发生器等组成。可实现全双工通信!
ARM芯片中的UART收发信息时,可以采用FIFO,也可以采用普通模式
一般接收和发送缓冲区的FIFO字节数一样的,长度可编程选择4B、8B、16B、64B
UART传送消息的格式是以起始位开始以停止位结束
UART传送信息时,一次可传输的数据位可以是5,6,7,8位,由编程决定
基于UART可组成RS-232接口
RS232 - 最远15m
RS485 - 最远1.2k

ARM实现485总线的功能,需要采用S3C2410芯片内部的UART部件外加转换芯片等来实现。在软件设计时,初始化波特率9600bps,数据格式格式为:8位数据位,无数据检验位,1位停止位。那么1s时间内最多传输960个字节。(注意计算还得加上起始位和停止位)

CAN即: 控制器局域网,能够实现多主通信

CAN总线的数据帧由7个不同的域组成,其中域的长度可以是0~8位
采用CRC校验,RAM芯片内部嵌入CAN控制器

键盘
8个GPIO脚最多构成64个按键的键盘

矩阵键盘通常有行扫描法和反转法读取按键的特征值(还有一种方法叫做中断方式)

嵌入式处理器内核的分类
按照字长可以分为:8/16/32/64 位结构
按照存储可以分为:冯诺依曼和哈佛(程序和数据分开存储)结构
按照指令集可以分为:CISC、 RISC结构
CISC(complex instruction set computer 复杂指令集)
RISC(reduced instruction set computer 精简指令集)

SOC片上系统
SOC已成为嵌入式处理器芯片的主流发展趋势
它是集成电路进入深亚微米时代的产物
既能把数字电路也能把模拟电路集成到单个芯片上
包含数字电路、模拟电路以及射频电路
单个芯片即可完成采集、转换、存储、处理和I/O等多种功能
SOC有通用SOC芯片和专用SOC芯片之分
专用SOC芯片按其工艺分为定制芯片和现场可编程芯片两类

集成电路
集成电路有小规模(SSI)、中规模(MSI)、大规模(LSI)、超大规模(VLSI)和极大规模(ULSI)组成,嵌入式处理芯片一般属于VLSI和USLI。
集成电路大多是在硅衬底上制作,硅衬底是单晶硅锭经切割,研磨和抛光而成的圆形薄片。
集成电路中的电路及电子元件,需要反复交叉氧化、光刻、掺杂和互连等工序才能制成。

嵌入式最小系统组成
嵌入式系统一般包括嵌入式处理器、时钟电路、电源电路、复位电路、存储器和调试测试接口。

JTAG调试技术
JTAG标准中规定的TAP接口具有5根信号线

构建一个宿主机 - 目标机的开发环境,若目标机是裸机,那么为了调试和下载软件需要将调试仿真器连接到目标机的JTAG接口!

JATG是一种嵌入式测试技术,大多数嵌入式CPU、DSP、FPGA器件都支持JTAG
JTAG允许多个芯片的边界扫描寄存器BSR通过JTAG接口串联在一起,实现对多个器件的测试
通过JTAG可以实现在线编程功能

主频时钟
0.01s基准定时时间选用S3C2410芯片内部的Timer0部件产生。若系统的主频参数PCLK=264MHz,分频器选择16,预分频系数选择为3,那么,Timer0的计数常数为:41250
计算方法:定时器输入时钟频率 = PCLK/(预分频系数+1)/(分割器值),计数常数 = 定时间间隔/(1/定时器输入时钟频率)
带宽 = 总线频率 × 数据线宽度 / 8 × 次数 / 周期

板级升级包(BSP)引导加载程序、初始化程序、设备驱动程序、配置文件
含有电路板的初始化程序
所有与特定电路板上硬件相关的功能都集成在板级支持包的库里
操作系统的上层代码通过板级支持包访问底层硬件

ARM

单指令周期和流水线技术是ARM处理器的技术特征。
ARM都是RISC,但是存储结构有的是哈佛结构,有的是冯诺依曼结构。
PowerPC、MC68K、MIPS都是RISC,哈佛结构!
Cortex 系列分为A-R-M ,A系列是面向尖端虚拟内存的操作系统和用户应用,R系列是针对实时系统,M系列是对微控制器。 Cortex - M3系列是哈佛结构。
ARM内部一般有:UART/I2C/SPI/CAN/USB/Ethernet等多个互连通信组件
ARM处理器共37个,包括31个通用寄存器(含PC)和6个状态寄存器

ARM异常
将CPRS的值保存到将要执行的异常中断对应的SPSR中
设置CPSR的相应位
断点地址保存到R14
PC赋值,转入向量地址

ADS
按照存储区域类型划分为3类,RO段,RW段,ZI段,RO段是指代码存储区和常数存储区,具有只读属性
可执行输出文件有3个生成目标:Debug、Release、DEbugRel
工程项目按照一定的逻辑来分组管理文件:
文件映射关系较简单时:使用编译、链接选项来确定输入文件的连接关系
地址映射关系较复杂时:使用scatter(分散加载)格式的文件来确定输入文件的连接关系

RVDS
RVDS开发工具套件中,主要包括工程管理器、编译连接器、调试器和指令集仿真器。调试器支持硬件在线调试和软件仿真调试。

电源管理模块
正常模式-正常模式下,电源管理模式为内核及RAM芯片内部所有硬件组成提供时钟源,用户可以通过软件控制暂时不用的内置硬件组件处于关闭状态降低功耗。
慢速模式
休眠模式 - 仅断开RAM内核时钟FCLK,CPU处于休眠模式,仍为外围硬件组件提供时钟。
掉电模式 - 切断内部电源,除非唤醒逻辑有效,否则内核不产生功耗

硬件抽象层HAL
操作系统内核提供了访问硬件底层的函数接口
嵌入式软件中直接访问底层硬件的例程集合
增加的HAL位于硬件电路板和操作系统内核之间
嵌入式电路板的最基本软件
HAL函数是移植操作系统的基础
HAL隐藏了不同硬件平台的差异性,从而改善了操作系统的可移植性!

AMBA总线
ARM的总线结构成为 AMBA -先进微控制器总线结构(一种开放式总线结构)
从1995的AMBA1.0到目前的AMBA4.0共四个版本!
ARM7 - AMBA1; ARM11 - AMBA2
按照AMBA总线规范,基于ARM内核的嵌入式处理芯片采用系统总线和外围总线两层结构的方式构建片上系统
连接系统总线的**高带宽组件(AHB接口)**主要包括:电源管理和时钟控制器,测试接口(JTAG),外部存储器控制接口,DMA控制器,USB主机,中断控制器。(可以看出大多数为控制器)
RTC是与外围总线(APB接口)连接的硬件组件

MMU
MMU,内存管理单元,它是用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。
虚拟地址到物理地址的转换通过查找页表来完成,每次在访问内存时先插TLB,查不到再到内存中查整个页表。

ARM7 ≠ ARMv7
RAM7 - 冯诺依曼的结构。 RAM9~RAM11 采用哈佛结构!
ARMv7是一种构架。ARM7是一种处理器型号ARM7(冯诺依曼结构)是在ARMv4构架上设计出来的处理器RAM11(ARMv6架构)之后便是以Cortex(ARMv7架构)来命名了!

ARM7没有MMU(内存管理单元),只能叫做MCU(微控制器),不能运行诸如Linux、WinCE(大型嵌入式操作系统)等这些现代的多用户多进程操作系统,因为运行这些系统需要MMU,才能给每个用户进程分配进程自己独立的地址空间。ucOS、ucLinux这些精简实时的RTOS不需要MMU,当然可以在ARM7上运行。

ARM9、ARM11,是嵌入式CPU(处理器),带有MMU,可以运行诸如Linux等多用户多进程的操作系统,应用场合也不同于ARM7。
此外,Cortex-M系列还细分为M0、M3、M4和超低功耗的M0+,用户依据成本、性能、功耗等因素来选择芯片。
Cortex-M系列(ARMv7架构)的指令集只有Thumb-2。
ARM处理器 ≠ ARM处理器核

处理器核:在某种架构的基础上具有取指令和执行指令的组件。
处理器: 以处理器核为中心,加上MMU,中断控制器,浮点运算器,总线接口等就构成了ARM处理器。
当然了,单独的处理器核也可以作为某一代ARM处理器的。

ARM常考寄存器
R13 - SP (堆栈指针)
R14 - LR(链接寄存器)
R15 - PC(程序计数器)
xPSR - (CPSR 和 SPSR)状态寄存器

SP寄存器
SP有两个,分别为R13(MSP)和R13(PSP),即主堆栈指针(MSP)和进程堆栈指针(PSP),但在同一时刻只能有一个可以看到,这也就是所谓的“banked”寄存器。这些寄存器都是32位的。

CPSR寄存器
CPSR(当前程序状态寄存器)在任何处理器模式下被访问。它包含了条件标志位、中断禁止位、当前处理器模式标志以及其他的一些控制和状态位。
ARM中表示程序状态的寄存器是CPSR,其中状态位T的作用是在ARM状态与Thumb状态间进行切换,当T = 1时处理器处于的状态是Thumb状态
N为符号标志位 - N=1表示运算结果为负,否则运算结果为正
F为禁止快读中断为 - F=1表示禁止快速中断控制位,否则允许!
V为溢出标志位,等于1表示溢出
Z为全0标志,运算结果为0

SPSR寄存器
每一种处理器模式下(看下面的其中运行模式)都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)
当特定的异常中断发生时,这个寄存器用于存放当前程序状态寄存器的内容。在异常中断退出时,可以用SPSR来恢复CPSR。
由于用户模式和系统模式不是异常中断模式,所以他没有SPSR。当用户在用户模式或系统模式访问SPSR,将产生不可预知的后果

控制寄存器和数据寄存器
控制寄存器是4个字节,比如端口E的控制寄存器rGPECON = 0x00005555
数据寄存器是2个字节,比如端口E的数据寄存器rGPEDAT=0x0020
关于赋值,也写一个小例子
rGPDCON = ((rGPDCON | 0x00005555) & 0xFFFF5555);//GPD0~GPD7配置为输出模式1先置位,然后再清零。

ARM微处理器的七种运行模式
用户模式:user (没有SPSR寄存器):正常程序执行的模式
系统模式 – SYS (没有SPSR寄存器): 用于运行特权级的操作系统任务
快速中断模式 – FIQ :用于高速数据传输和通道处理、高速中断!
外部中断模式 – IRQ :用于通常的中断处理
管理模式 – SVC :又称特权模式,操作系统使用的一种保护模式
终止模式 – ABT :用于虚拟存储及存储保护,处理存储器故障
未定义指令模式 – UND :用于支持通过软件方针硬件的协处理器

经典RAM的七种异常
复位RESET
未定义指令 UND
软件中断 SWI
指令预取终止 PABT
数据访问终止 DABT
外部中断请求 IRQ
快速中断FIQ

IRQ外部中断
IRQ异常对应的异常向量地址为:0x00000018
IRQ异常向量地址和下一个异常向量地址之间的间隔为4个字节
复位异常的异常向量地址是0x00000000。系统上电复位后,将从该地址处执行程序,RAM9的体系结构规定的各异常向量地址间隔通常是4个字节,以此复位异常向量地址处通常存储一条分支指令

S3C2410必备知识
S3C2410拥有2个串口,UART0/UART1
控制组件包括存储器控制器、总线控制器、外部主控器、NAND FLASH(以页为单位进行闪存)
存储器控制器提供访问外部存储器所需的存储器控制信号,支持大小端模式,地址空间供1GB,8个BANK,每个BANK128MB
以ARM芯片为信合的嵌入式系统其I/O与存储器采用统一编址的方式,并不像×86那样采用I/O映射编址(独立编址)
只有BANK0是总线16、32位的访问,其他BANK均可以进行8、16、32位的访问
GPIO 有GPIOA~H
哈佛体系结构,数据与程序存储分开
内部集成ADC

矩阵按键代码

#define KEYOUTPUT (*(VOLATILE int8u *)0X56000044)
#define KEYINPUT (*(VOLATILE int8u *)0X56000044)INT16U ScanKey()
{INT16U key = 0xFFFF;INT16U i;INT8U temp=0xFF, output;rGPECON = ((rGPECON & 0xFFFFFF00) | 0x00000055); //初始化GPE0~GPE3为输出rGPECON = rGPECON & 0xFFFFFF0F; //初始化GPE4~GPE7为输入//判断键盘中是否有键按下for(i=1; ((i<=8) && (i>0)); i<<=1){output |= 0xFF;output &= (~i);KEYOUTPUT = output;temp = KEYINPUT;if((temp & 0xF0) != 0xF0)//判断列信号是否全部为1{key = (~i);key <<= 8;key |= ((temp & 0xF0)|0x0F);return key;}}return 0xFFFF;
}

//key返回判断哪个按键的方法:最高4位和最低四位都是1,
//即 1111 ---- ---- 1111,然后次高字节是行,再次高是列,
//比如第2行第3个按键按下, 对应为 1111 1101 1011 1111 - 0xFDBF

网络

WLAN通信协议是802.11,传输速率可达到11Mbps,54Mbps,108Mbps。

IP
IP地址分为A类、B类、C类三个基本类。另外两类分别为组播地址和备用地址。
IP地址解决了网络中所有计算机统一编址的问题
IP数据包是一种独立于各种物理网络的数据包格式
路由器是实现网络与网络互连的关键设备

A类
1.0.0.0 到126.255.255.255
分配给具有大量主机而局域网络数量较少的大型网络
由1个字节的网络地址和3个字节主机地址组成
网络地址的最高位必须是“0”,即第一字段的范围 0127,但是由于全0和全1的地址用作特殊用途,实际可指派的第一个字段范围是1126
每个IP地址可连16387064台主机,Internet有126个A类地址
可以用于多目的地址发送,言外之意可以组播

B类
128.0.0.0到191.255.255.255
用于国际性大公司和政府机构
前两个八位字节指明网络,后两个八位字节指明网络上的主机

C类
C类IP地址范围192.0.0.0 ~ 223.255.255.255
第1、2、3字节为网络地址,第四个字节为主机地址
C类地址数量较多,使用于局部局域网中,每个网络中最多包含254台计算机
用于一般小公司 校园网 研究机构
以太网数据帧(里面不包括IP地址)

前导码(7个字节) -> 帧起始界定符(1字节) -> 目的MAC地址(6字节) -> 源MAC地址(6字节)-> 类型/长度(2字节) -> 数据(46~1500字节) ->帧校验序列(4字节)
局域网采用分组交换技术
发送设备MAC地址 - > 接收设备MAC地址 -> 控制信息 ->有效载荷 -> 校验信息

路由器多个异构或者同构网络进行互联

网络层
集线器来放大信号实现远距离传输
协议转换器:用于传输层及以上各层的协议转换
热点 - 正式名称无线接入点,它实际上是一个无线交换机或无线路由器。

局域网
按照介质所使用的访问控制方法可分为:以太网,FDDI网和令牌网
必不可少的部分是集线器与交换机

指令集
Thumb指令集是16位的,ARM指令集是32位的,中间有Thumb-2作为桥接
ARM处理器的三种工作状态
ARM状态 (指令宽度32)
Thumb 及 Thumb-2状态
调试状态

Thumb状态和ARM状态的切换
通过BX指令,写数据到操作数寄存器(R0)的最低位。
R0[0]=1 – 从ARM状态切换到Thumb状态。 R0[0]=0 – 从Thumb状态切换到ARM状态。
ARM复位后的状态
ARM处理器复位后的状态都是ARM状态

BootLoader
U-BOOT

Linux中引导程序加载时所支持不同体系结构处理器种类最多的Bootloader 是- 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程序入口点。

作用
改变程序大小端排序
关闭看门狗
屏蔽中断
设置各个时钟
设置从SLEEP或者IDLE启动时的程序
初始化SDRAM
设置各模式指向的堆栈
设置好中断向量表
判断是从NOR FLASH(行读写,较慢)还是NAND FLASH(页读写)启动,
将文件拷到SDRAM中

操作系统
IOS 的前身是 UNIX-BSD(宏内核架构,但是是微内核操作系统
内核的概念
内核提供任务调度、任务间通信与同步、任务管理、时间管理和存储管理。

典型的单片机程序在程序指针复位后,首先进行堆栈、中断、中断向量、定时器、串行口等接口设置、初始化数据存储区和显示内容,然后就来到了一个监测、等待或空循环,在这个循环中,CPU可以监视外设、响应中断或用户输入。 这段主程序可以看作是一个内核,内核负责系统的初始化和开放、调度其它任务,相当于C语言中的主函数。

现代操作系统设计中,为减少系统本身的开销,往往将一些与硬件紧密相关的(如中断处理程序、设备驱动程序等)、基本的、公共的、运行频率较高的模块(如时钟管理、进程调度等)以及关键性数据结构独立开来,使之常驻内存,并对他们进行保护。通常把这一部分称之为操作系统的内核。

Linux
UCLinux、RTLinux、uC/OS - II是开源嵌入式操作系统
Linux最初以Unix为原型,以实现POSIX标准作为其目标
OS服务组件、用户进程、Linux内核、硬件
系统调用是Linux中用户进程和操作系统之间的重要接口

Linux和Unix
其两者源码是完全不相同的,尽管函数和命令的功能处理结果、函数名称和参数十分相同,以及Unix的行命令、驱动程序和应用程序在Linux上能够运行。
Linux运行效率没有Unix高!

Linux命令
arm - linux - gcc交叉编译器来编译应用程序
要对一个应用程序进行调试排错,应在编译指令中加g参数对它进行编译

Linux内核主要由5个子系统组成
进程调度(SCHED)
内存(任务)管理(MM)
虚拟文件系统(VFS)
网络接口(NET)
进程间通信(IPC)
进程调度模块负责控制进程对CPU资源的使用,所采取的调度策略是使得各个进程能够平均访问CPU同时保证内核能及时地执行硬件操作。

内存管理模块的功能之一是屏蔽各种硬件接口内存结构的差异并向上返回一个统一的访问接口
网络接口模块包含网络接口驱动程序
支持进程之间的各种通信机制,其通信机制包括:信号、管道、消息队列、信号量、共享内存、套接字(socket)

微内核和宏内核
微内核特征

内核小巧,传统操作系统中的许多部分都被移出内核。
接口一致,所有进程请求使用统一接口,进程不区分内核模式和用户模式服务。
各个功能模块之间松散耦合,只完成服务功能,系统管理功能交给一个或多个特权服务程序。
微内核扩充方便,但是各个功能之间的切换引起的开销很大!
属于微内核的典型嵌入式操作系统有:Symbian、VxWorks、QNX、uC/OS - II、IOS,而Symbian是普通实时操作系统

VxWorks收取授权费和版权费。
VxWokrs用于尖端科技中

宏内核
传统操作系统常采用的结构
应用程序效率高
切换开销小
对外来时间反应速度快
内存大
拓展性不高,维护困难
可预测性较低
可靠性较低
Android OS是典型的宏内核操作系统
宏内核又称为单内核!

Tiny OS
是开放源代码操作系统,属于深度轻量级的操作系统,专为嵌入式无线传感器网络设计,功耗较低,特别适合传感器这种受内存,功耗限制的设备。
轻线程,主动消息和组件化编程。

QNX
符合POSIX基本标准和实时标准
微内核操作系统
内核提供四种服务:进程调度,进程间通信,底层网络通信和中断处理

uC/OS-II
抢占式实时操作系统
抢占式实时操作系统且每个任务都有自用栈
使用它的栈空间校验函数,可以确定每个任务到底需要多少栈空间
该系统不包含设备驱动程序,只是一个纯内核
不支持时间片轮转调度,所以赋给每个任务的优先级是不相同的
允许每个任务之间有不同的栈空间

升级版的UC/OS - III是商用操作系统
II 具有良好的可剪裁性和可移植性
能够支持的任务数最多是64(保留8个给系统,实际剩下56个)
最多允许的中断嵌套层数可以达到255层
软件结构一般具有:应用软件层,API层,内核层和设备驱动层
该系统能提供周期性时钟信号(时钟节拍),用于实现任务的正确延时和超时确认,节拍率在10~100Hz之间
用户必须在多任务调度启动以后再使能时钟节拍中断
在中断返回之前,必须调用退出中断函数 voidIntExit(void)
互斥信号量可以解决优先级反转的问题
事件控制块用于对信号的管理
任务管理中空闲任务是系统创建的第一个任务(空闲任务永远不会处于挂起态,还可能运行态,即使优先级最低,一旦其他任务都被堵塞他就可以执行了!
中断服务子程序的伪码结构:保存全部CPU寄存器到栈,调用OSIntEnter()或者OSIntNesting变量加1,执行中断服务代码或发出IPC信息通知特定任务去执行中断服务,调用OSIntExit()函数,恢复所有CPU寄存器,执行中断返回指令。

uC/OS-II 移植到一个 嵌入式系统电路板上正常运行,必须具备的条件
处理器的C编译器能产生可重入代码,且用C语言就可以打开和关闭中断。
处理器支持中断,并且能产生定时中断。(通常在10至100Hz之间)。
处理器支持能够容纳一定量数据(可能几千字节)的硬件栈区。
uC/OS-II 保护任务之间的共享数据和提供任务之间的通信
可达到保护目的方法通常有
利用宏OS_ENTER_CRITICAL()和OS_EXIT_CRITCAL来打开和关闭中断。
利用函数OSSchedLock()和OSSchedUnlock()对任务调度函数上锁和开锁。
利用信号量、互斥量、邮箱和消息队列进行任务间通信。
系统启动过程中,Bootloader执行完毕后,调用应用程序主文件(通常是main.c)里的main函数。main函数在执行过程中除了用户函数和硬件初始化函数之外,需要执行下面三个重要函数:OSInit() -> OSTaskCreate() -> OSStart()(注意先后顺序)

OSInit()函数先建立最初的任务就绪表,然后建立4个空白的数据链表,即:任务控制块链表,事件控制块链表、标志链表、内存控制块链表。

系统中任务的五种状态
休眠态(任务停留在内存中,还没有交给内核管理。)
就绪态(该任务已经准备好,可以运行了,但是由于任务的优先级比正在运行任务的优先级低,还暂时不能运行。)(还有一种情况被更高优先级打断!)
运行态(任务得到了CPU的控制权正在运行之中)
挂起态
被中断态(发生中断执行相应的中断服务,原来在正在运行后的任务暂时停止运行,进入被中断状态)

一些系统函数
OSTaskCreate() - 任务创建相关
OSCtxSw() - 真正实现任务切换的函数
OSIntExit() - 中断级的调度
OSTickISR() - 时钟节拍中断服务子程序,与时间管理相关
OSSched() - 任务前导函数,任务级的调度函数

判断任务调度的三个条件是:
中断嵌套层数共享全程变量OSIntNesting = 0,也就是所有的ISR已经执行完毕
任务调度加锁层数共享全程变量OSLockNesting = 0,也就是调度没有被禁止
就绪表找到最高优先级比当前任务的优先级高

OSIntExit() - 中断级的调度函数

系统事件控制块的相关函数
OSSemCreate()(信号量创建)
OSMutexCreate()(创建互斥体)
OSMboxCreate()(建立一个邮箱)
OSQCreate()(创建事件控制块)
就绪任务登记在就绪表中,OSRdyTbl[ ] 是就绪表的位图映像矩阵,每一位代表了一个优先级任务的就绪状态,成为就绪位,该矩阵最多有64位。

一些系统文件
OS_CPU_C.C - 创建任务的自用栈空间、定义用户接口的hook原型
OS_CORE.C - 核心调度代码,包括系统初始化、启动多任务调度开始运行、任务创建管理与调度、TCB初始化、就绪表初始化、ECB初始化、任务事件就绪表、空闲任务
OS_MEM.C - 内存管理,包括创建分区,获得存储块
OS_TASK.C - 任务管理,包括改变一个任务的优先级、创建或者删除一个任务,恢复一个被挂起的任务

uC/OS系统时钟内核的基本功能(通过GLIBC调用通用函数和内核的内部功能)
任务管理
时间管理
内存管理
任务调度
任务间通信和同步

实时操作系统与非实时操作系统
实时系统

民航导航系统
防空预警系统
电力输送控制系统

非实时
视频播放系统
博客发布系统
手机交互式城市交通导航系统

实时操作系统
RTOS响应中断请求并且完成相应的中断服务子函数的时间非常快!精细衡量这个时间一致性变化的术语是抖动!
中断服务子函数也是可以调用函数然后进行事件处理的,中断服务子程序返回的最后一步执行中断返回指令。
RTOS特征(主要特征是能够及时响应外部发生的随机任务请求并且能够在规定的时限内完成任务。)(不包括轮转调度)

异步IO和中断处理能力
任务切换时间和中断延迟时间确定
优先级中断和调度
抢占式调度
内存锁定
连续文件
同步

RTOS的实时性能主要由三个指标衡量
响应时间**(包括中断延迟时间和任务切换时间)(任务切换时间又包括人物抢占时间)**
吞吐量
生存时间

响应时间有两个指标 - 中断延迟时间和任务切换时间

实时系统对时间约束要求的严格性,使可预测性成为实时系统的一项重要性能要求,它是指RTOS能够对外部事件的响应时间和实时任务的执行时间进行判断,以确定被时间触发的实时任务能否在规定的时间内完成。

一般按照相应时间能将实时系统分为三类:强实时系统,其相应时间一般在ms级或us级;普通实时操作系统一般在s级,弱实时系统一般在数十s级。

任务时限有两种
截止时间:任务开始执行时间到任务必须完成的时间间隔。
任务执行预设:又叫任务最快完成时间,这是在无中断响应情况下的任务最快执行时间。

硬实时操作系统和软实时操作系统
任务执行时间超过截止时间系统的总损益就为负,这种实时系统成为硬实时系统而且伴随有严重的后果,比如飞机控制器、核反应堆处理装置。
软实时操作系统超过时限并不会造成严重的影响比如:DVD播放机。

存储器
半导体存储器芯片的存储容量取决于该芯片的地址总线的条数和数据总线的位数。
存储器带宽与存储器总线的工作频率有关,也与数据线的位数和每个总线周期的传输次数有关!
系统正在运行的程序的大部分数据和代码存放在主存储器(内存)中
系统尚未运行的程序的大部分数据和代码存放在外部存储器中
-

分类
按照存取特性分为:RAM和ROM
按照物理位置分为:片内存储器和片外存储器以及外部存储器
按照存储信息的类型分为:程序存储区和数据存储器

RAM
RAM - 高速读取, DRAM - 高集成度
RAM 通常又有DRAM和SRAM之分**,SRAM较DRAM电路复杂,但是速度更快**,高速缓冲区(cache)就是典型的SRAMSRAM的复杂决定了它做不大,至多几十K。
内存条就是DRAM,速度较SRAM慢,但是可以做的很大,比如内存条就是典型的DRAM,其容量就上G了。
FRAM - 铁电随机存取存储器,MRAM - 磁性随机存取存储器。
(以上两个随机存储器是非易失性存储器)

FLASH
Flash闪存有两大类,或非型(NOR Flash)和与非型(NAND Flash)
或非以字节为单位进行随机存取,存储在里面的程序可以被CPU执行。与非以页为单位进行存取,速度较前者慢。
与非门读出程序或数据时,是先将其预存入RAM,然后才被使用的。虽然速度较慢,但是其寿命,容量成本等方面有很大优势,常用的U盘基本都是NAND Flash。

DDR
DDR - dual data rate - 双倍数据速率
DDR2 - 使原来DDR可预取读取2位变成可预取读取4位或8位,把DDR的数据传输速率又提升了两倍或四倍

USB
USB2.0 的速度可达到 480Mb/s
USB3.0的速度可达到 5Gb/s, 即640MB/s
半双工差分方式通信

编码
ASCII

ASCII共128个字符,96个可打印字符,32个控制字符。
ASCII是7位编码,但在计算机里用一个字节存放(计算机最基本的存储和处理单位)
每个字节多出的1位在计算机内部常保持为0,在数据传输中是奇偶校验位。

汉字编码
GB2312 – 两字节编码(每个字节最高位默认为1),包含常用的中国汉字和图形符号。
GB18030 与国际Unicode相兼容。单字节对应ASCII,双字节对应汉字(GB2312在这完全适用,但是比它范围广),其余四字节对应其他字符。

Unicode
UTF-8 – 单字节可变长编码,单字节向下兼容ASCII,音节文字对应两字节,CJK汉字(china japan koera 中日韩汉字)对应三字节,其余对应四字节。Linux 常用。
UTF-16 – 双字节可变长编码,CJK汉字及常用字符两字节,其余四字节。JAVA .NET 常用。

同步IO和异步IO
CPU的速度远远快于磁盘、网络等IO。在一个线程中,CPU执行代码的速度极快,然而,一旦遇到IO操作,如读写文件、发送网络数据时,就需要等待IO操作完成,才能继续进行下一步操作。这种情况称为同步IO

在IO操作的过程中,当前线程被挂起,而其他需要CPU执行的代码就无法被当前线程执行了。因为一个IO操作就阻塞了当前线程,导致其他代码无法执行,所以我们必须使用多线程或者多进程来并发执行代码,为多个用户服务。每个用户都会分配一个线程,如果遇到IO导致线程被挂起,其他用户的线程不受影响。

多线程和多进程的模型虽然解决了并发问题,但是系统不能无上限地增加线程。由于系统切换线程的开销也很大,所以,一旦线程数量过多,CPU的时间就花在线程切换上了,真正运行代码的时间就少了,结果导致性能严重下降。

另一种解决IO问题的方法是异步IO。当代码需要执行一个耗时的IO操作时,它只发出IO指令,并不等待IO结果,然后就去执行其他代码了。一段时间后,当IO返回结果时,再通知CPU进行处理。

指令相关

子程序返回调用程序除了MOV PC, LR。还可以MOV R15, LR
汇编语言调用一个名为My的子程序的指令为: BL My 子程序返回调用程序的指令为:MOV PC, LR
Thumb - 2指令集中关外部中断使用的指令是:CPSID I。开外部中断的指令为:CPSIE I
EQ表示相等,NE表示不等
RAM汇编程序采用分支指令B
子程序调用指令BL
条件转移指令BX
RAM汇编中没有专门的指令实现循环,一般采用比较指令CMP、ADD、SUB等
才能产生条件的指令,然后再通过带状态的条件转移指令BX来实现。
指令后面加个!表示更新基地址寄存器符号
寄存器间接寻址就是以寄存器中的值作为操作数地址,而操作数本身存放在存储器中。用于间接寻址的寄存器必须用[ ] 括起来
Test EQU 50 定义 标号 Test的值为50!
RAM完成有条件无符号加法运算,并更新CPSR中的状态,条件如果是相等,要求指令执行R1+R2,结果放入R3中,则这条指令ADDCEQ R3, R1, R2。如果条件是大于,要求执行R1 - R2,结果放入R3,则该指令是SUBHIS R3, R1, R2

指令的条件码总结

EQ - 相等
NE - 不等
MI - minus负数
PL - plus正数或0
vs - overflow set溢出
vc - overflow clear未溢出
GT - greater than带符号数大于
GE - greater and equal带符号数大于或等于
LT - lower than带符号数小于
LE - lower equal带符号数小于或等于
HI - high无符号数大于
CS - carry same无符号数大于或等于
CC - carry clear无符号数小于
LS - low and same无符号数小于或等于

常考指令

LDR 字数据加载指令(存储器到寄存器的数据传送指令)
LDRB 字节数据加载指令
LDRH 半字数据加载指令
STR 字数据存储指令
STRB 字节数据存储指令
STRH 半字数据存储指令

STR R0, [R1] - 将R0中一个字的数据,存入以R1的值为地址的存储器中。
LDR R0, [R1] - 以R1的值为地址的存储器中的字数据(为32位)读入寄存器R0
LDRH R0, [R1] -以R1的值为地址的存储器中的半字数据(为16位)读入寄存器R0
LDRB R0, [R1] -以R1的值为地址的存储器的字节数据(为8位)读入寄存器R0
注意了,LDR R1, #0x12345678 LDR是加载存储指令,表示存储器到寄存器的数据传送,而#是立即数符号,表示立即数寻址。所以这样写是不正确的!
ADC R1, R2, R3 表示 R1 = R2+R3+C(C表示进位)(ADD表示加法)(ADC表示)

置1清0的操作

常见的操作是:or可实现置1,and可实现清0。比如ORR R0,R0,#00000003 该指令设置R0的0、1位,其余位保持不变。再比如AND R0,R0,#FFFFFFFE实现R0的最低位清零。还有一个是用ARM的指令进行位清0,BIC R1, R1 #0X00000088
立即数

汇编语言中中操作数有三种:寄存器操作数、存储器操作数和立即数。
其中立即数相当于高级语言中的常量(常数),它是直接出现在指令中的数,不用存储在寄存器或存储器中的数,如指令ADD AL,06H中的06H即为立即数。
大小端存储

所谓的大端模式就是,低地址存储高位字节。
所谓的小端模式就是,低地址存储低位字节。

计算机存储结构
冯诺依曼,是一种程序指令储存和数据储存在一起的存储器结构
哈佛结构,是一种将程序指令储存和数据储存分开的存储器结构

音频图像
音频

数字音频的正确处理顺序是:取样 -> 量化 -> 编码
数字音频的主要参数:取样频率、量化位数、声道数目、使用的压缩编码方法、比特率
比特率(码率)计算方式:码率 = 取样频率×量化位数×声道数,压缩后的码率和压缩前的码率也就差一个压缩比。
mp3
MPEG - 1层
③算法进行有损的压缩编码,以8~12倍的比率大幅度降低了声音的数据量
视频:MPEG-2

图像
包括BMP.、TIF、GIF、JPEG、PNG
数字图像的获取过程分为:扫描、分色、取样
GIF是互联网上广泛使用的一种图像文件格式,它的颜色数目较少,不超过256色,文件特别小,适合互联网传输
JPEG是静止图像数据压缩编码的国际标准,特别适合处理各种连续色调的彩色和灰度图像,算法复杂度适中,软硬件皆可实现。

屏幕
触摸屏

电阻式触摸屏(软屏),结构简单价格低
电容式触摸屏(硬屏),结构复杂价格高
电容式触摸屏可以实现多点触摸和滑动操作
般写硬笔字的触摸屏是电阻屏

LCD显示屏
LCD显示屏自身不带控制器,没有驱动电路,仅仅是显示器件,价格最低
LCD显示模块内置LCD显示屏,控制器和驱动模块,有字符型和图形点阵型
PC机通常使用的是LCD显示器,除具备显示屏外,还包括驱动器,控制器以及外壳,是完整的LCD显示设备
DVI、VGA以及HDMI是一种接口标准

其他,部分常见错题

微波通信:手机通信、卫星通信、无线局域网
调频广播属于短波以及超短波通信。

SIMD单指令多数据
TST是位测试指令,将寄存器的值与立即数按位与。
JMP是无条件跳转指令
LDR是存储器到寄存器的数据传送指令
STR是寄存器到存储器的数据传送指令
SPI总线系统是一种同步串行外设接口
OSSempend()等待一个信号量
ECB事件控制块

摩尔定律(Moore)
基于Cortex-Mo的专家处理器为SC100,基于Cortex-M3的专家处理器名为SC300
Cortex-M3采用3级流水线,Cortex-R4采用8级流水线.
LDM是加载多个寄存器指令,后缀IA表示在每次执行完加载/存储操作后,R0按字长度增加。
低压差稳压器(LDO)模块
直接存储器访问(DMA)
uC/OS-II利用函数OSSpend等待并获得消息,用函数OSQpost来发送消息

GNU开发工具套件中包括编译器、【连接器】、调试器、文本编辑器、语法除错等工具。利用GNU中的调试器GDB进行程序调试时,可用命令【watch】来观察被调试程序中的变量值。

嵌入式系统的调试相对来说比较复杂,调试的目的是发现错误并【定位错误】。因此,通常需借助多种调试工具来进行。调试工具的作用是控制【程序代码】的执行,并使系统中看不见的信息成为可视。

在μC/OS-II操作系统中,调用任务管理函数【OSTaskSuspend】()可以挂起一个任务;函数【OSSemPend】()用于等待一个信号量

在μC/OS-II操作系统中,宏【OS_ENTER_CRITICAL】 ()使系统进入临界状态,其主要操作是关闭所有可屏蔽中断,避免其他任务或中断服务程序打断临界区代码的执行。当需要实现对不可分割数据的原子访问时,μC/OS-II也可以调用函数void【OSSchedLock】 (void)锁定任务调度器,取代关中断。

μC/OS-II支持两种方式的任务调度,分别是【任务】级的任务调度和【中断】级的任务调度,前者一般发生在当前运行态任务因等待某一事件而被阻塞或被挂起时,或是有更高优先级的任务处于就绪状态时。

在实时系统中,从接收到可屏蔽中断请求信号到操作系统做出响应并转入中断服务程序所需要的最长时间称为【中断延时】时间;系统将控制权从低优先级的任务转移到高优先级任务所花费的时间称为【任务抢占】时间。

在高端嵌入式系统中,除了操作系统、设备驱动程序和应用软件之外的系统软件称为【中间件】。

发光二极管和数码管常用三个大写字母简写为【LED】,液晶显示器常用三个大写字母简写为【LCD】。

I^2C总线只有两条信号线,一条是【数据】线SDA,另一条是【时钟】线SCL,I2C总线的所有操作都通过这两条信号线完成。

分配一个32位字存储单元,名为Mydata并对其初始化为0x33445566的伪指令为【Mydata DCD 0x33445566】,无条件转移到标号为MLOOP且不进行模式切换的伪指令为【B MLOOP】。B是跳转指令,不带链接;DCD用于分配一片连续的字存储单元并用指定的数据初始化。

在ARM的指令中,如果无符号数R1>R2,则将R1减去R2,结果放R3中并更新CPSR,用两条指令完成,则分别为【CMP R1,R2 SUBS R3,R1,R2】和【SUBHIS R3,R1,R2 SUBHI R3,R1,R2】。

指令LDR R2,[R0,R1]!是将寄存器R0的内容自动增加R1,形成操作数的有效地址,从中取得32位操作数存入寄存器R2中,再更新基址寄存器R0的内容。

ARM Cortex-A是ARM Cortex面向高端应用处理器,此系列中A5、A7、A8、A9、A12、A15和A17字长【32】位,而A50系列中的A53和A57字长为【64】位。

ARM指令集的代码宽度为【32】位,Thumb指令集代码宽度为【16】位。

计算机网络由计算机等智能电子设备(网络终端)、数据链路、【通信协议】以及网络软件等组成。网络中的每个网络终端都配一个网卡,每个网卡都有全球唯一的【48】位二进制的MAC地址。

WWW网页是典型的**【超文本】结构**。Adobe公司开发的一种用于电子文档交换的文件格式名为【PDF】。

发生中断时CPU提供相应的中断服务,原来正在运行的任务暂时停止运行,进入了被中断态,被中断态的任务是不能直接转入等待态的要先结束被中断态进入运行态。

采用嵌入式处理器自带的UART可以组成RS-232/RS-485通信接口,RS-232采用负逻辑传输,其接口的信号线采用单端输出方式,逻辑0的电压范围为+3V+15V,逻辑1的电压范围为-15V-3V,而RS-485标准采用差分信号传输方式

实时时钟(RTC)组件采用单独的供电引脚和时钟源,通过编程可以对RTC内部的年、月、日、星期、时、分、秒寄存器的值进行设置,但分频系数由时钟源决定,无法通过编程改变。

基于AMBA总线的处理器使用系统总线和外围总线连接高速系统组件和低速外围组件,速度不高的外部接口连接外围总线(APB),包括定时器、并行接口和串行接口等;而LCD控制器和中断控制器等都连接在系统总线上。

字符的形状有两种描述方法,点阵法和轮廓法。前者描述字符在离散点阵中笔画的占位信息,后者描述字符的轮廓,即把字符的轮廓用一组直线和曲线来勾画,字型库中记录的是每一直线和曲线的端点及控制点的坐标。

用来描述数字图像的参数主要有图像大小(图像分辨率)、位平面数目、像素深度和颜色模型。

在μC/OS-II操作系统中,内核对任务的管理通过名为【任务控制块】的数据结构进行。当任务切换时,任务的工作现场被保存到任务的【自用栈】中。
在μC/OS-II操作系统中,内核对任务的管理通过任务控制块OS_TCB进行;任务切换也称为上下文切换,实际含义是任务的CPU寄存器内容切换。当μC/OS-II内核决定运行别的任务时,正在运行任务的工作现场被保存到任务的自由栈之中。

在μC/OS-II操作系统中,某任务正在等待键盘输入消息,该任务应处于【挂起】态。若键盘中断服务程序向该任务发送了消息,则该任务转变为【就绪】态。

BIC是位清零指令 M3中的MPU是用来对存储器进行【保护】 的单元。

ARM9TDMI-S中的T的含义是支持高密度的 【16】位Thumb指令,D表示支持片上【调试】 。

像素深度是8位的灰度图像,其不同的亮度等级总数为 【256】 种。
真彩色图像中R、G、B三分量的像素位数都是8位,图像的像素深度为24位

其中智能手机之类的嵌入式系统使用操作系统对系统进行控制,属于高端系统,采用32/64位处理器,支持连接网络。

GCC是针对Linux操作系统环境下应用程序的编译工具,它能将C语言、C++语言、汇编语言编写的源程序以及库文件编译连接成执行文件;它从源文件生成可执行文件的过程是由四个相关联的阶段组成:预处理、编译、汇编、连接

Linux是能够为多用户提供多任务、多线程功能的大型单内核操作系统;Monta Vista Linux是一种嵌入式操作系统发行版,是Monta Vista Software公司于1999年7月推出的;虚拟文件系统(VFS)是Linux的通用文件系统模型,在系统调用接口和内核所支持的文件系统之间提供了一个交换层;系统调用是Linux中用户进程和操作系统之间的重要接口

空闲任务OS_TaskIdle是μC/OS-II的系统任务,是操作系统初始化函数创建的第一个任务自创建之后永远不会处于挂起态,因为它占据了最低优先级63,所以只有在其他的任务都因为等待事件的发生而被阻塞的时候才能得到运行。

μC/OS-II的大部分代码是用标准C语言写的,其每个任务都处在以下5种状态之一的状态,即休眠态、就绪态、运行态、挂起态和被中断态。支持抢占式任务调度,处于运行态的任务一定是当前就绪任务集里的最高优先级任务;当多个任务同时等待同一事件发生时,只有优先级最高的任务得到该事件并进入就绪状态准备执行;允许每个任务拥有自己的自用栈;发生中断时,正在运行的μC/OS-II任务暂停运行,并进入被中断状态。

USB RS-485 CAN采用差分信号传输方式,具有很强的抗共模干扰能力;选项中仅RS-232不是。

串行外设(SPI)接口是一种同步串行外设接口,允许嵌入式处理器与各种外围设备以串行方式进行通信、数据交换。一般使用4跳线**:SCK、MISO、MOSI和SSEL**。将数据写到SPI发送缓冲区后,一个时钟信号SCK对应一位数据的发送(MISO)和另一位数据的接收(MOSI);在主机中数据从移位寄存器中自左向右发出送到从机(MOSI),同时从机中的数据自右向左发到主机(MISO),经过8个时钟周期完成1字节的发送。

指令LDR R0,[R1,#4]是将寄存器R1的内容自动增加4,形成操作数的有效地址,从中取得32位操作数存入寄存器R0中。

嵌入式处理器的体系结构按指令集可分为两大类:复杂指令集结构(CISC)及精简指令集结构(RISC);按存储机制分为冯·诺依曼结构及哈佛结构;按不同内核系列可分为51、AVR、MSP430、MIPS、PowerPC、MC68K、ARM等。其中,PowerPC、MC68K、MIPS采用RISC、哈佛结构,ARM也采用RISC,多数为哈佛结构。

局域网采用分组交换技术,发送设备必须把要传输的数据分成小块,即帧,一次只能传输一帧。数据帧中除了包含需要传输的数据(称之为“有效载荷”)之外,还必须包含发送该数据帧的发送设备地址和接收该数据帧的接收设备地址。另外数据帧中还需要附加一些信息随同数据一起进行传输,以供接收设备在收到数据之后验证数据传输是否正确。这些信息包括控制信息和校验信息。

Linux操作系统中,可执行文件的文件名中没有统一的文件后缀。若用GCC命令生成可执行文件,命令中未指定输出文件名时,则GCC生成一个名为 【a.out】的可执行文件。针对ARM硬件平台的目标机,其GCC的基本命令格式是:【arm_linux_gcc】[options] [filenames]。

本题考查基于μC/OS-II的系统平台的应用开发。一个应用程序的工程项目中,必须包含启动引导程序,UC/OS-II的库文件,应用程序等。main()函数在执行过程中,除了用户函数和硬件初始化函数外,按以下次序执行3个主要的μC/OS-II函数:操作系统初始化OSInit(),任务创建OSTaskCreate(),任务调度开始OSStart()。

μC/OS-II操作系统中任务状态即状态切换。运行态指得到了CPU的控制权正在运行之中的任务状态。当处于运行态的任务执行节拍延时函数OSTimeDly()后,该任务将转入挂起态。就绪态任务在执行OSTaskDel()函数后将转入休眠态。

。代码的**临界区(Critical Section)是指处理时不可分割的代码。为确保临界区代码的执行,在进入临界区之前必须关中断,执行完临界区代码之后要立即开中断。μC/OS-II系统调用宏OS_ENTER_CRITICAL ()**执行关中断操作。

μC/OS-II系统中主要利用信号量、互斥信号量、邮箱或消息队列进行任务间通信。

美国加州大学伯克利分校开发的主要用于无线传感器网络的操作系统名为TinyOS

Linux操作系统遵从GNU计划下的通用公共许可协议,而GNU开发的编程语言编译器称为GCC。

中断控制器是介于ARM内核与其他硬件之间的一个部件,负责对其他硬件组件的中断请求进行管理和控制,一般采用向量中断(VIC)或嵌套向量中断(NVIC)方式管理中断。

在ARM Cortex-M3中可实现中断嵌套,中断可以改为比之前的中断服务程序更高的优先级,并且可以在运行时改变优先级状态,使用末尾连锁连续中断需要消耗【3】 个时钟周期,而普通中断需要【32】 个时钟周期。

ARM7采用冯·诺依曼结构,3级流水线,ARM9采用哈佛结构,5级流水线

ARM处理器异常中断指令中用于软中断的指令助词符为【SWI】 ,用于断点中断指令助词符为【BKPT】 。

。目前数字有线电视和卫星电视所传输的数字视频采用的编码格式是【MPEG-2】 ,而在互联网视频应用中最新也是应用最多的视频编码格式是【H.264/MPEG-4 AVC】 。

使用JTAG进行嵌入式系统的调试,无需目标存储器,也不占用目标机任何I/O端口,运行在宿主机上的调试工具软件通过目标机CPU芯片的JTAG接口以及内嵌的调试电路通常可以完成相关调试工作。

微内核有以下几个特点:①内核小巧②接口一致③各个功能模块之间松散耦合,只完成服务功能,系统管理功能交给一个或多个特权服务程序。④微内核功能扩充方便,但是各个功能之间的切换而引起的开销比较大。⑤基于客户机/服务器体系结构,在微内核结构的操作系统中,任务间通信机制—消息机制是系统的基础,操作系统的各种功能都以服务器方式实现,向客户机提供服务。

μC/OS-II、RTLinux、ECOS等是主要的开源嵌入式操作系统。

可以认为μC/OS-II是嵌入式操作系统领域中的最小内核之一,它只提供提供的基本功能有:①任务调度②任务间通信(Inter-Task Communication, ITC。术语ITC含义与IPC含义相当)③同步④任务管理⑤时间管理⑥内存管理等基本功能。

在μC/OS-II操作系统中有多种方法可以保护任务间的共享数据并支持任务之间的通信。主要有以下三种:(1)利用宏OS_ENTER_CRITICAL( )和OS_EXIT_CRITICAL( )来关闭中断和打开中断;(2)利用函数OSSchedLock( )和OSSchekUnlock( )对μC/OS-II中的任务调度函数上锁和开锁;(3)利用信号量(OS_EVENT_TYPE_SEM)、互斥信号量(OS_EVENT_TYPE_MUTEX)、邮箱(OS_EVENT_TYPE_MBOX)或消息队列(OS_EVENT_TYPE_Q)进行任务间通信。
嵌入式Linux的特点是:①开放源代码,不存在黑箱计数;②由于开放源代码,成本低;③内核紧凑,占内存空间最小为140KB;④网络功能强;⑤可移植性强;⑥可裁剪性强;⑦支持多任务;所以成为研发嵌入式软件的重要首选平台。

S3C2410有GPA、GPB、GPC、GPD、GPE、GPF、GPG和GPH这8个GPIO端口,其中GPA0~GPA22功能单一,仅作为地址线的控制线使用;GPC和GPD作为LCD液晶屏接口引脚。

通用串行总线USB是一种外部总线接口标准,支持设备的即插即用和热插拨功能;USB总线(1.1和2.0)有4根信号线,采用半双工差分方式,用来传送信号并提供电源;其中D+和D-为差分信号线,传送信号。

I2C总线只有两条信号线SDA和SCL,当总线上的所有器件都不适用总线时,SCL线和SDA线各自的上拉电阻把电平拉高,使它们均处于高电平。

嵌入式系统的主存储器是指系统内存,包括内部SRAM和Flash和片外扩展DRAM和Flash。

AMBA是指先进的微控制器总线体系结构,主要由系统总线和外围总线两部分组成。速度不高的外部接口连接外围总线(APB),包括定时器、并行接口和串行接口等;而电源管理及时钟控制器等都连接在系统总线上。

**DRAM是动态随机存取存储器,是易失性存储器;**DDR2 SDRAM(双倍数据速率同步DRAM)采用了4位预取技术;EEPROM是一种可电擦除可编程的只读存储器,可以在线改写和擦除信息,无需紫外线照射;NOR Flash和NAND Flash是两种主要的闪存技术。

ARM体系结构支持7种工作模式,取决于当前程序状态寄存器CPSR的低5位值。用户模式是程序正常执行工作模式,当处理器处于用户模式时,如果没有异常发生不能改变工作模式;系统模式运行特权级的操作系统任务;管理模式是操作系统的保护模式,处理软中断。

SBC是带借位减法指令

在ARM的体系结构中,处理器可以工作在3种不同的状态:①ARM状态②Thumb状态及Thumb-2状态③调试状态。其中,除支持Thumb-2的ARM处理器外,其他所有ARM处理器都可以工作在ARM状态,而Cortex-M3只有Thumb-2状态和调试状态。

嵌入式处理器的体系结构按指令集可分为两大类:复杂指令集结构(CISC)及精简指令集结构(RISC);按存储机制分为冯·诺依曼结构及哈佛结构;按不同内核系列可分为51、AVR、MSP430、MIPS、PowerPC、MC68K、ARM等。**其中,PowerPC、MC68K、MIPS采用RISC、哈佛结构,**ARM也采用RISC,多数为哈佛结构。

图像数据量=图像水平分辨率×图像垂直分辨率×像素深度/8
像素深度=颜色数x8

**按照采样定理,取样频率不应低于声音信号最高频率的两倍才不产生失真;
波形声音的码率=取样频率×量化位数×声道数(单位:b/s);
定时器计数脉冲周期=1/(PCLK/(预分频值+1)/分频系数)。**对配置寄存器以及控制寄存器的设置即按照寄存器格式对相应位进行赋值。

软件平台的构建步骤通常是:首先移植启动引导程序(Bootloader),然后完成Linux内核的移植,随后还需构建根文件系统。基于ARM9核的处理器,启动引导程序代码的存储单元首址应该是0x00000000,它对应复位异常向量。各异常向量之间相差4个字节。因此,需要在各异常向量处设计一条无条件转移指令

开发基于Linux操作系统上的应用程序,可使用GCC工具来编译和连接。若仅希望对应用程序进行编译而不进行连接,需要在GCC命令中加入参数【-c】。若希望编译连接后生成一个用于调试的符号表,需要在GCC命令中加入参数【-g】。

嵌入式系统的开发过程,可划分为4个阶段,即:需求分析与规格说明、【系统设计】、构件设计、系统集成与测试。

μC/OS-II的任务由三部分构成:程序代码,也即没有返回值的C函数;任务【堆栈】,用于保存任务的工作环境;【任务控制块】,用于保存任务状态和属性。

Android系统采用堆层式软件架构,分为四层,从低层到高层依次是Linux内核、【核心库】、应用程序框架(Application Framework)和【应用程序】。

嵌入式操作系统的引导加载方式可以分为两类:嵌入式系统正常工作时使用的启动方式是从非易失存储介质中引导和加载操作系统代码,称为【启动】加载模式;而在调试或维护更新阶段使用的系统启动方式则通过通信端口从调试主机上下载操作系统映像,称为【下载】模式。

在对S3C2410的PWM输出操作中,TCNTBn决定PWM信号的周期,TCMPBn决定PWM信号的占空比。假设TCNTBn=100,TCMPBn=60,则该PWM信号的周期为【100】个定时器输入时钟周期,一个PWM信号周期内的低电平宽度为【40】个定时器输入时钟周期。
PWM用于脉冲宽度的调制,当定时达到后将产生特定波形。本题主要考查PWM周期设定计算。所谓占空比就是脉冲宽度与PWM周期之比,脉冲宽度即在一个周期内输出高电平的时间。

有一个Flash存储器芯片容量为16MB,数据线有8条,则该存储器的地址线条数为【24】条;另有一个SRAM芯片有22条地址线,8条数据线,其容量为【32】Mbit。

声明一个全局标号Reset_Handler以便其它文件引用,该伪指令为【EXTERN Reset_Handler】,引用一个在其它文件中的标号SystemInit的伪指令为【IMPORT SystemInit】。
本题考查ARM的数据定义伪指令。全局标号的声明用的是EXTERN,引用其他文件中的标号用IMPORT。

在ARM的指令中,如果R1与R2不相等,则将R1与R2进行逻辑与操作,结果放R3中,并要求更新程序寄存器的状态位,用两条指令完成,则分别为【CMP R1,R2 TEQ R1,R2】和【ANDNES R3,R1,R2】。

在ARM指令系统中,利用移位操作符将R1的数据逻辑右移2位后,存入R0中,相应的指令为【MOV R2,R1,LSR#2】,若R1=0x00080010,则R0=【0x00020004】。

ARM处理器把执行纯32位指令代码的指令集称为【ARM】指令集,把执行16位指令代码的指令集称为【Thumb】指令集。

WiFi和Bluetooth是两种短距离无线通信技术,其中最早的IEEE.802.11b(2.4GHz频段)采用【调频】扩频技术,Bluetooth后来被IEEE作为【个人】无线区域网协议**(IEEE 802.15)的基础。无线局域网采用的协议主要是IEEE802.11a,俗称WiFi。其中最早的IEEE.802.11b(2.4GHz频段)采用调频扩频技术,传输速度可根据环境而调整。Bluetooth最早是由瑞典爱立信公司提出的,后来被IEEE作为个人无线区域网协议(IEEE 802.15)的基础。**

在有线通信中,双绞线的特点是成本【低】、易受外部高频电磁波干扰,误码率较【高】,传输距离有限,主要应用于固定电话回路和计算机局域网等。

字符的形状有两种描述方法,其中下图所示的描述方法为【点阵】法,也即描述字符笔画的占位信息;另一种描述方法在字型库中记录的是每一直线和曲线的端点及控制点的坐标,称为【轮廓】法。

指令集模拟器(ISS)是在宿主机上模拟应用程序在目标机上运行行为的一个软件工具,其操作界面与通用机的集成开发环境类似。

eCos是一种免费和开源的实时操作系统,用C/C++编码,是可定制的操作系统。

μC/OS-II与大型操作系统不同,基本不包含设备驱动程序,只是一个纯内核。其驱动程序属于底层,需要系统开发商自行开发。

S3C2410属于中高档32位嵌入式处理器,其存储器控制组件中包括存储器控制器、外部主控器、NAND Flash控制器等,其中存储器控制器提供访问片外存储器芯片所需的控制信号,支持大/小端模式,地址空间共1GB;S3C2410片内具有分离的指令Cache和数据Cache。

**存储器管理单元(MMU)是许多高性能处理器所必需的重要部件之一,而存储器保护单元(MPU)**是对存储器进行保护的可选组件,提供了简单替代MMU的方法来管理存储器。

NVIC称之为内嵌向量中断控制器,支持嵌套和向量中断。内部没有NVIC的ARM处理器是ARM9,
ARM公司把从ARM7到ARM11为内核的系列处理器称为经典ARM处理器。
UTF-16采用的是双字节可变长编码。

SPI是一种同步串行外设接口,允许嵌入式处理器与各种外围设备以串行方式进行通信、数据交换。

嵌入式系统三级考试终结版2019.3相关推荐

  1. 第一天 软考中级--嵌入式系统设计师考试复习教程开始了

    第一天 嵌入式系统设计师考试复习教程 第二天 软考中级--嵌入式系统设计师考试考试大纲解析 目录

  2. 第二天 软考中级--嵌入式系统设计师考试内容总结

    系列文章目录 第一天 软考中级--嵌入式系统设计师考试-准备工作 目  录 考试大纲简介(一) 总结

  3. 嵌入式系统设计师考试笔记之嵌入式系统基础知识

    以下是转帖一位网友的嵌考笔记 嵌入式系统设计师考试笔记之嵌入式系统基础知识 欧浩源(ohy3686@qq.com) 20080818 一.引言 自<嵌入式系统设计师考试复习笔记之存储管理篇> ...

  4. 嵌入式系统概论-考试总结

    Exam-嵌入式总结 1. 简答题 1.1. 什么是CPS?请画出典型结构,尝试描述典型应用[2015] CPS,信息物理系统,计算进程和物理进程的统一体,集计算.通信.控制于一体的下一代智能系统,由 ...

  5. 嵌入式系统(胡威)2019年春第一次作业 参考答案

    一.单选题 (共 50.00 分) ARM内核采用( )体系结构. A.RISC B.CISC C.SIMD D.MIMD 满分:5.00 分 得分:5.00 分 你的答案:A 以下不是嵌入式操作系统 ...

  6. 以嵌入式系统设计师考试成绩,开始嵌入式博客之旅

    http://www.rkb.gov.cn/jsj/cms/s_contents/download/s_dt201003110106.html 转载于:https://www.cnblogs.com/ ...

  7. 2019备考[嵌入式系统设计师]你准备好了吗?

    2019年准备参加软考获取中级职业技术资格认证的小伙伴咱们约起吧?!即日起本专题将陆续推出系列备考文章,从头到尾详细解读[嵌入式设计师]考试大纲及相关历年真题,希望能够带着大家顺利拿到证书,为今后在公 ...

  8. 2019备考[嵌入式系统设计师]之MCPU

    一.引言 嵌入式微处理器是嵌入式系统的核心器件,深入理解嵌入式微处理器的工作原理,组成结构.体系结构以及软件编程等方面,无论对嵌入式设计师考试的准备还是对嵌入式项目的开发都有一定的帮助.在目前白花盛放 ...

  9. IT 认证考试--软考--(中级项目)嵌入式系统设计师2:考试大纲【含免帐号免积分下载链接】

    一.考试说明 1.考试要求: (1)掌握科学基础知识: (2)掌握嵌入式系统的硬件.软件知识: (3)掌握嵌入式系统分析的方法: (4)掌握嵌入式系统设计与开发的方法及步骤: (5)掌握嵌入式系统实施 ...

  10. 已知c语言程序有主程序模块prog.c,嵌入式系统试卷--A卷

    第 1 页 (共 页) 班级(学生填写) : 姓名: 学号: 命题: 符秋丽 审题: 审批: ----------------------------------------------- 密 --- ...

最新文章

  1. openoj的一个小比赛(F题解题报告)poj3978(dp+素数筛选)
  2. mysql %u_mysql之DATE_FORMAT
  3. 在Android开发中,有哪些好的内存优化方式?如何避免 Out Of Memory(OOM) ?
  4. python requests的作用_Python爬虫第一课:requests的使用
  5. Opencv判断是否加载图片的两种方法
  6. 面试--Linux命令总结
  7. Terry的学习笔记--ASP.NET MVC 4 HELLO WORLD添加视图(View)
  8. java知识总结-24
  9. css focus 选择器用于选取获得焦点的元素
  10. 如何使用MOQ进行单元测试
  11. 计算机应用基础学生指导评语,计算机应用基础评课稿范本
  12. 虚幻引擎(UE4) UMG实例
  13. dw新建html快捷键,DW软件新建一个html网页
  14. matlab从无到有系列(二):矩阵运算基础
  15. linux硬盘格式化物理卷,创建物理卷报错Can't open /dev/sdb5 exclusively. Mounted filesystem的问题解决过程记录......
  16. Android rom开发:recovery取消校验Vbmeta version和framework matrix
  17. mysql表字段一定要写英文吗_关于数据库列名是否必须是英文的?
  18. Eclipse如何安装lombok插件
  19. ai面谈技巧_AI时代的人际化技巧
  20. AES算法加解密及简单图像化界面实现

热门文章

  1. Error Based Injection和sql注入函数
  2. Python:实现monte carlo蒙特卡罗算法(附完整源码)
  3. 中国人和犹太人做生意的区别
  4. 项目管理包含了哪些特征?
  5. Redundant Paths
  6. K8S资源quota配置引起的问题
  7. ORB-SLAM2安装以及遇到问题
  8. 迪文屏K600+ 数据库的读写操作
  9. 【OS学习笔记】二 汇编语言和汇编软件
  10. 抽象代数笔记-环、域、扩域、伽罗瓦理论