Unicode编码:用于计算机统一处理、存储和传输。其编码方案常用的有两种:UTF-8和UTF-16
这种编码方式与国标的GB18030、GB2312并不完全相同,大多数汉字兼容。
数字音频:
WAV、FLAC、APE、M4A无损压缩
MP3、WMA、AC3、AAC有损压缩:MP3采用MEPG-1算法压缩不是-4
数字视频:
MEPG-2:用于数字卫星电视转播,数字有线电视,高清晰度电视(HDTV)
MEPG-4(ASP): 用于低分辨率低码率的领域,如:监控、IPTV、手机、MP4播放器等
MEPG-4(AVC):较新的标准,应用在多领域如:HDTV、蓝光光盘、IPTV、XBOX、iPad、iPhone、iPod、RMVB等
下图为ARM不同版本ISA架构的比较(ISA 指令集架构)
其中,版本名称表示处理器的版本,ARM公司的处理器名称表示具体的处理器型号
早期型号没有列出
需要注意的点:看版本后面有没有对应的字母(M:Cortex-M R:Cortex-R A:Cortex-A)
选择题中的选项知识点:
mmu和mpu在三-10中讲解
MMU: Memory Management Unit 存储器管理单元,是很多高性处理器所必需的重要部件之一。
虚拟存储器技术:借助ARM处理器中的MMU部件,能把系统中不同类型的存储器进行统一管理(如Flash,SRAM,SDRAM,ROM,优盘等),通过地址映射,使需要运行在连续地址空间的软件可以运行在不连续的物理存储器中,需要较大存储空间的软件可以运行在较小容量的物理存储器中。
1) MMU的功能:
2) MMU控制存储器访问的顺序
当执行加载/存储指令要访问存储器时(arm汇编中是通过这两种指令来访问存储器的),MMU先查找TLB中的转换表。
如果TLB中没有,则硬件会自动查找主存储器中的页表。找到虚拟地址到物理地址的转换信息和访问权限信息就可以用来进行存储器的读写操作了。同时把这些信息放入TLB中供以后使用。
如果主存储器的页表中也没有转换信息,则会产生(缺页)中断,通知OS(操作系统)处理。
(TLB类似于主存储器中页表的一个高速缓存Cache,常用到的页表中的信息会存储在这里)
MPU:(注意这里和微处理器MPU缩写相同但是意义不同)Memory Protection Unit,内存保护单元
MPU是对存储器进行保护的可选组件,提供了简单替代MMU的方法来管理存储器,不需要MMU那样较为复杂的地址转换过程。
功能:
分支指令
BX指令一般用于带有状态切换的跳转;这里的状态切换指的是:ARM处理器的工作状态(三-06)可以为arm、thumb、调试
BL指令常用于函数调用,需要返回到调用处继续执行。
BLX指令常用于切换状态并函数调用,就是加起来嘛,很好理解
加载、存储指令:
本题D只是跳转,如果子程序调用是要返回的~
这题我错选了D,原因在于,DCD命令所定义的DataA变量其中保存的是 存储着0xAABBCCDD数值的地址,也就是说DataA是保存着一个地址,这个地址中保存的值是AABBCCDD,即DataA指向这个内存
因此,ldr r0,= DataA
表示把DataA的数据写入R0,所以R0也指向这个内存。后面就没问题了
最小硬件系统概念:提供嵌入式处理器运行必备条件的硬件电路与嵌入式处理器共同构成了嵌入式最小硬件系统,大多数基于ARM处理器核的处理器芯片都有调试接口
时钟电路中的晶振:分为有源和无源两种,其中有源晶振4引脚,X1输入X2输出+vcc+gnd;无源2引脚,X1和X2
复位电路:复位引脚为nRESET或者RESET:n为低电平复位,不带n高电平复位,nRESET必须至少保持若干处理器时钟周期的低电平才能复位;ARM复位后,PC指针指向唯一地址0x00000000,此处存放b reset
,跳转至系统初始化程序。
典型的嵌入式应用系统硬件由①嵌入式最小硬件系统、②前向通道、③后向通道、④人机交互通道以及⑤相互互联通信通道组成
AMBA总线的发展及版本
上图比较复杂,常考知识点整理如下:
APB:Advanced Peripheral Bus 先进外围总线
这里是各个总线的关键点和关键变化内容,不同版本的外围总线从APB->APB4的发展仅仅是所支持的外围硬件组件有所增加,其他没变化。
再次整理一下:
基于AMBA总线的处理器使用系统总线+外围总线构成来连接高速系统组件和低速外围组件,高带宽高性能的外围接口通常连接系统总线,速度不高的外部接口连接外围总线。其发展整理如下:
按照AMBA总线规范:ARM内核的嵌入式处理芯片采用系统总线和外围总线,系统总线连接高带宽快速组件,外围总线APB主要连接低带宽组件以及外部相连的硬件组件。(当然,外围总线的性能和支持的外设也在不断增加增强)
基于ARM内核的嵌入式芯片硬件组成图:
左侧系统总线,右侧外围总线, 分别完成各自的功能,两者通过桥接器连接到一起
下面第二个SRAM和flash是芯片内存储器(分别为SRAM:片内数据存储器;flash ROM片内程序存储器)
存储器&&控制器:存储器包括 ①片内程序存储(Flash ROM)、②片内数据存储(SRAM )、③外存控制器(用来管理和控制外存扩展例如SD卡、emmc、nand flash) 其中①和②统称为内存
可以看出,存储器分为片内和片外,也分为程序存储和数据存储。(本节上面组成图是芯片内部的,也就是片内的)
第一个图01:片内程序使用 Flash ROM;片内数据使用SRAM;
第二个图02:程序存储一般使用FLash;数据存储一般使用SRAM、DDR(SDRAM)、DRAM(这里可以使片内也可以是片外,但都属于主存范畴)
第三个图03:所谓的外部存储器就是外存的控制器(类似SD卡、emmc、nand flash之类),这个东西在片内;
第四个图04: 这个外部存储器控制器在芯片内部,并且与系统总线相连。
解释一下 “中断处理程序通过读取中断控制器中与各设备对应表示中断请求的寄存器内容,从而判断哪个设备需要服务。”
中断发生时,根据中断的类型内核会调用对应的中断处理函数(中断服务函数);例如IRQ中断服务函数中,包含对当前你中断产生的设备ID的获取,从而判断这个中断是由哪个设备产生的,从而调用对应的二级服务函数;而这个获取的过程是通过读取相应寄存器得到的(我记得i.mx6u好像是cp15协处理器中的一些寄存器。)
与定时器相关的组件的特点:对特定输入的时钟通过分频后接入计数器进行+1、-1计数,计数达到预定的数值后引发中断设置标志位。
上图中的RTC就是实时Timer;Timer在i.mx6u里面是EPIT定时器;PWM需要与时钟进行配合完成占空比以及频率的设置。
········································································································
下面的四-07-12都是存储器相关的知识点
按照速度来分:分为3层:①处理器CPU内部的Cache(SRAM)②主存也就是内存(片内SRAM存数据和FLASH ROM存程序;片外DDR)③外存(SD卡;emmc等)
这里忽略寄存器,寄存器也是最快的~在CPU内部的
按照主存和外存分:①和②都是主存的一部分;③是外存
嵌入式系统使用的存储器有多种类型,按照不同的分类标准有不同的分类方法如下:
主存的种类:具体可以使用哪些呢?
暂无
···········································································································
暂无
I2C总线有两条信号线,一条是数据线SDA;一条是时钟线SCL;
其数据传输时序如下图所示:
这里所说的设设置SSEL为低电平意思是:如果想作为主机,则设置SSEL口为输出,同时输出低电平,另一个主机自然接收低电平则被选中为从机。
注意这种一主多从的方式应用比较广泛,其中从机的SSEL连接主机的GPIO引脚,主机通过控制GPIO点平来片选哪一个从机作为当前通讯从及设备。而主机的SSEL引脚直接拉高,始终作为主机使用;
··············································································································
需要说明存储器控制器地址空间为8GB
这里是指:存储控制器组件包括很多,其中存储器控制器提供访问片外存储器时,芯片所需要的控制信号,支持大小端模式,地址空间共1GB;
1. 异常向量就是中断服务函数的地址:32位处理器共4字节,因此每个向量占4字节
2. 中断模式寄存器用来控制中断源对应IRQ还是FIQ
3. 有子寄存器的中断源:比如我们的I2C外设,就有自己的子寄存器以及中断源,对于这类的中断源,可以选择屏蔽子中断源
4. SUBSRCPND\SRCPND是两个寄存器,功能在下面有描述
可以看到:源中断挂起寄存器SRCPND和中断挂起寄存器INTPND功能类似;中断请求先经过SRCPND,经过仲裁后经过INTPND

7位的读写操作格式一致;10位不一致;7位的一次发送就ok;10位的需要两个字节才能把地址传输完成
这里看起来好像很复杂,其实很简单,时钟源PCLK通过第一个分频器8位,再通过第二个分频器确定了时钟频率;所以计数脉冲周期就是这个频率分之一;
同时,T时间内复位到0,用T / 时钟周期,就是需要多少个时钟周期,也就是计数器的数值了~
··············································································································
··············································································································
引导加载程序、外部设备驱动程序、操作系统、文件系统、网络协议栈、图形用户界面、数据库、各种应用程序
可以看到BSP和HAL有时并没有明确的界限;都是直接与硬件打交道的最底层的软件接口层
但是BSP与操作系统的相关性也很大所有看下图BSP的概念
重点在于:BSP代码对特定的硬件专门编写;与硬件平台直接相关;包含最小系统的调试和外围设备驱动程序的调试;
也就是说:BSP在系统复位之后负责系统软硬件环境的初始化;其功能分为3部分
图中的处理器芯片的初始化和电路板的初始化可以包括例如:时钟;中断;DDR;等等
这里的ROM指的是片内FLash ROM存储程序;RAM指的是片内SRAM存储数据 或 片外 DDR(都属于内存/主存范畴);外存储器就是外部emmc、SD卡之类的;
这里的第一阶段主要是利用汇编代码进行初始化;第二阶段是调用main函数使用C语言进行进一步的初始化设置;再往后就是调用内核后启动操作系统了;
注意:这里的从ROM存储器复制到RAM存储器指的是:从外存如nandFlash ROM中复制到片外内存ddr(SDRAM)中
此系统基本功能:①任务调度 ②任务间通信(相当于IPC)③任务同步 ④任务管理 ⑤时间管理 ⑥内存管理等基本功能;不包含传统操作系统的文件系统;
注:完成任务切换需要的时间取决于cpu中寄存器的数量/大小
TCB:task control block
休眠态:任务代码放到内存中了,但是还没有交给内核(没有调用);进入休眠态有两种方式:1 被创建后直接进入休眠态(未被调用);2 任务结束后从运行态返回休眠态;
等待态/挂起态:调用delay相关函数会进入这个状态;等待态结束后,必须先进入就绪态进行排队,之后才能重回运行态
被中断态:是指处理中断,而造成的被暂停;这与等待不同,等待并非一定是中断造成的;
注:这里必须调用04 OSIntExit()函数来退出中断
注:OSTaskSuspend()与OSTaskResume()是成对出现的;
注:OSTimeDly/DlyHMSM()与OSTimeResume()是对应的
注:(1)和(2)属于任务调度的操作,为了防止进入“临界区代码”时,中断发生而造成数据错误;
注:流程如下
①先调用OSInit()函数初始化内核(其中包括创建空闲任务OS_TaskIdle());
②创建一个用户任务;
③调用OSStart()函数启动多任务调度,并从就绪任务中选择优先级最高的任务转入运行态;
注:03:任务级时钟节拍:更加细致的时钟节拍处理;
04可针对处理器体系结构进行优化:代码优化,汇编执行效率更好;
注:常识性题目;
··············································································································
注:采用Scattered连接类型时,需要提供一个scatter格式的配置文件,这是一个文本文件,描述了ARM连接器在完成连接操作时所需要的分组及定位信息等;
RVDS开发工具套件中,主要包括工程管理器(IDE)、编译连接器(RVCT)、调试器(RVD) 和 指令集仿真器(RVISS) 等。调试器支持硬件在线调试和软件仿真调试。
例如:路由器的web设置界面;
·············································································································