没错,说的就是你
第五-九讲 作业题内容(选择、判断、填空)看平台作业
嵌入式系统是以应用为中心,以计算机技术为基础,软件、硬件可裁减,功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
与通用计算机系统相比,嵌入式系统具有的特点
专用性强:面向特定应用,完成特定功能
系统内核小:采用专用中央处理器,系统配置够用即可
实时性要求高:或不用操作系统,或选配实时操作系统
运行环境苛刻:对体积、功耗、可靠性、运行环境有严格要求
程序固化:运行程序固化在存储器芯片中
专用开发工具:自身不具备自主开发能力,需专用开发工具支持
目前嵌入式系统的主流是
以32位嵌入式微处理器为核心的硬件设计和基于实时操作系统(RTOS)的软件设计;
单片机系统多为4位、8位、16位机,不适合运行操作系统,难以完成复杂的运算及处理功能;
嵌入式系统强调基于平台的设计、软硬件协同设计;单片机大多采用软硬件流水设计;
嵌入式系统设计的核心是软件设计(占70%左右的工作量) ;单片机系统软硬件设计所占比例基本相同。
实时系统:如果逻辑和时序出现偏差将会引起严重后果的系统(响应时间在ms或s级)
软实时系统:系统的宗旨是使各个任务运行得越快越好,并不要求限定某一任务必须在多长时间内完成(响应时间为数十秒)
硬实时系统:各任务不仅要执行无误而且要做到准时(响应时间在ms或us级)
面向应用领域的、高度集成的、以32位嵌入式微处理器为核心的。
冯·诺依曼体系结构的特点:
缺点:取指令和存取数据要从同一个存储空间存取,经由同一总线传输,因而它们无法重叠执行;高速运行时,形成传输瓶颈
哈佛体系结构特点:
程序与数据在不同存储空间;每个存储器独立编制、独立访问
使用程序和数据总线,使数据吞吐率提高一倍
适合于数字信号处理,大多数DSP都是哈佛结构,ARM9是哈佛结构
由于取指令和存储数据分别经由不同的存储空间和不同的总线,使得各条指令可以重叠执行,这样,也就克服了数据流传输的瓶颈,提高了运算速度。
CISC:复杂指令集(Complex Instruction Set Computer)
具有大量的指令和寻址方式
8/2原则:80%的程序只使用20%的指令
大多数程序只使用少量的指令就能够运行。
RISC:精简指令集(Reduced Instruction Set Computer)
在通道中只包含最有用的指令
确保数据通道快速执行每一条指令
使CPU硬件结构设计变得更为简单
类别 | CISC | RISC |
---|---|---|
指令系统 | 指令数量很多 | 较少,通常少于100 |
执行时间 | 有些指令执行时间很长,如整块的存储器内容复制;或将多个寄存器的内容复制到存贮器 | 没有较长执行时间的指令 |
编码长度 | 编码长度可变,1-15字节 | 编码长度固定,通常为4个字节 |
寻址方式 | 寻址方式多样 | 简单寻址 |
操作 | 可以对存储器和寄存器进行算术和逻辑操作 | 只能对寄存器进行算术和逻辑操作,Load/Store体系结构 |
编译 | 难以用优化编译器生成高效的目标代码程序 | 采用优化编译技术,生成高效的目标代码程序 |
思考题:
以下叙述中,不符合 RISC 指令系统特点的是( )
A. 指令长度固定,指令种类少。
B. 寻址方式种类丰富,指令功能尽量增强。
C. 设置大量通用寄存器,访问存储器指令简单。
D. 选取使用频率较高的一些简单指令。
<答案>:B
我觉得ppt的思考题要会,大概率出选择题
流水线技术:几个指令可以并行执行,提高了CPU的运行效率
PC(R15)指向正被取值的指令,而非正在执行的指令(这个要知道,否则后面计算可能会不太理解)
流水线一般分三个步骤
思考题:
注意:这里指的是ARM7(采用三级流水线)
高速缓存是一种小型、快速的存储器,它保存部分主存内容的拷贝。
Cache通常与处理器在同一芯片上实现,Cache经常与写缓存器(write buffer)一起使用,write buffer 是一个非常小的先进先出存储器,位于处理器核与主存之间
使用write buffer目的是将处理器核和Cache从较慢的主存写操作中解脱出来
总线是计算机中的一组公共信号线集合
包括两部分:传输信息的传输线路和总线控制逻辑
总线带宽单位:(MB/s)=(总线宽度/8)x总线频率
答案:B
答案:C
MMU,内存管理单元,它是一种负责处理重要处理器的内存访问请求的计算机硬件,它的功能包括虚拟地址到物理地址的转换、内存保护、重要处理器高速缓存的控制。
存储器有两种类型的地址:虚拟地址和物理地址
主要完成的工作:
答案:B
答案:B
IP核是设计好并经过验证的集成电路功能单元
BSP(板级支持包)是介于底层硬件和操作系统之间的软件层,它完成系统上电后最初的硬件与软件初始化,并对底层硬件进行封装,使得操作系统不再面对具体的操作
特点:
优点:
1.在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就能得到新的功能。
2.通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化,而且对实时性要求苛刻的事件都得到了快速可靠地处理。
3.通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。
缺点:
1.需要额外的ROM/RAM开销
2.2~5%的CPU额外负荷以及内核的费用
非占先式(non-preemptive)式调度法也称作合作型多任务(cooperative multitasking),各个任务彼此合作共享一个CPU。中断服务可以使一个高优先级的任务由挂起状态变为就绪状态。但中断服务以后控制权还是回到原来被中断了的那个任务,直到该任务主动放弃CPU的使用权时,那个高优先级的任务才能获得CPU的使用权。
占先式内核中最高优先级的任务一旦就绪,总能得到CPU的控制权。即当一个运行着的任务使一个比它优先级高的任务进入了就绪态,当前任务的CPU使用权就被剥夺了,或者说被挂起了,那个高优先级的任务立刻得到了CPU的控制权.
可重入函数主要用于多任务环境中,一个可重入函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;
例题:
下列存取时间最快的是()
A. flash 存储器
B. DRAM 存储器
C. 高速缓存(CACHE)
D. 磁盘
答案:C
哪一种FLASH中可以直接运行启动代码?
A. NAND Flash
B. NOR Flash
答案:B
嵌入式开发系统的四种调试方式:
6种位操作运算符
运算符 | 含义 | 运算符 | 含义 |
---|---|---|---|
& | 按位与 | ~ | 取反 |
| | 按位或 | << | 左移 |
^ | 按位异或 | >> | 右移 |
例题:
a &= ~(1<<6);
首先是1<<6
,表示左移六位,得二进制数为:0100 0000
然后~(1<<6)
,说明要按位取反,就能得到 1011 1111
再将所得的数与a作&
运算,这表示a的第7位被置零,而其它位不变。
a ^=(1<<6);
这个就不详细讲了,答案是把第七位取反,其他位不变
GPIOA->CRL&=0XFFFFFF0F; //将第4-7位清0
GPIOA->CRL|=0X00000040; //设置相应位的值,不改变其他位的值
GPIOA->ODR|=1<<5;
TIMx->SR = (uint16_t)~TIM_FLAG;
现在我们看第一行,0XFFFFFF0F
,这个表示的是十六进制,转化为二进制位: 1111 1111 1111 1111 1111 1111 0000 1111
,所以当 GPIOA->CRL与上0XFFFFFF0F
时,就会将第4~7位置零,从右往左开始算起。
现在看第二行,GPIOA->CRL或上0X00000040
,也就是改变第六位的值,不改变其它值。
后面都类似感觉
把文件包含的正文替换进来,如标准头文件和自定义头文件,其内容包括符号常量、复合变量原型、用户自定义的变量类型和函数原型说明等;
对宏定义进行宏扩展,减少编程量,改进源程序的可读性;参数宏更减少了函数调用的开销;
条件编译改善了编程的灵活性,也改善了可移植性。
预处理伪指令有三种:文件包含、宏定义和条件编译。
一.参数宏的形式参数表中没有类型说明符;
二.参数宏在时空的开销上比函数都要小。
预处理在处理参数宏时使用两遍宏展开,第一遍展开宏体,第二遍对展开的宏体用实参数替换形式参数。
const修饰符:常量修饰符。C语言中,内存中单独开辟有一个常量区用于存放const变量。变量被const修饰后就不再变了。
const修饰符的作用:通知编译器保护参数不被修改;使代码紧凑;便于用户阅读和减少待清理垃圾的出现。
volatile修饰符:易失性修饰符,说明所定义的变量或指针可以被多种原因修改。例如,有的变量在中断服务程序中会被修改,有的会被I/ O修改,这种修改带有随机性,为防止丢失任何一次修改,需要修饰为易失性变量。注意:禁止把它作为寄存器变量处理,也禁止对它进行任何形式的优化。
2.1 Cortex-M3处理器组成部分;
2.2 工作模式
2.3 工作状态;
2.4 访问级别;
2.5 存储器组织;
2.6 启动模式;
2.7 时钟树为何如此复杂?
2.8 配置过程;
2.9 端模式;
2.10 IAP;
是通用输入输出端口的简称,简单来说就是软件可控制的引脚。STM32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通讯、控制以及数据采集的功能。
位带操作(位绑定)就是把每个比特膨胀为一个32位的字,当访问这些字的时候就达到了访问比特的目的,比如说BSRR寄存器有32个位,那么可以映射到32个地址上,我们去访问(读-改-写)这32个地址就达到访问32个比特的目的。
位带绑定的主要用途
(1)方便对串行接口器件的操作,尤其是对硬件I/O 密集型的底层程序,如GPIO接口的bit位控制。
(2)简化跳转的判断。当跳转依据是某个位时,传统做法是:
读取整个寄存器;
掩蔽不需要的位;
比较并跳转。
而位带绑定使得代码更为简洁。只需
从位带别名区读取状态位;
比较并跳转。
(3)并发控制。通过不同任务对共享资源的互斥访问,实现并发任务的串行化调度,保证并发任务的原子性、隔离性和被操作数据的一致性,避免出现紊乱现象。( “互锁”访问, “原子操作” )
简而言之,中断就是通知CPU当前有某个事件发生。
CPU执行程序时,由于发生了某种随机的事件(外部或内部),引起CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序(中断服务子程序或中断处理程序),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断。
STM32的嵌套向量中断控制器(NVIC) 管理着包括Cortex-M3核异常等中断,其和ARM处理器核的接口紧密相连,可以实现低延迟的中断处理,并有效地处理晚到的中断。STM32嵌套向量中断控制器(NVIC)的主要特性如下:
1.具有43 个可屏蔽中断通道(不包含16 个Cortex-M3 的中断线)。
2.具有16 个可编程的优先等级。
3.可实现低延迟的异常和中断处理。
4.具有电源管理控制。
5.系统控制寄存器的实现。
ARM体系结构可以用两种方法存储字数据,称为大端模式和小端模式(ARM处理器能方便的配置为其中任何一种存储器方式,但它们的缺省设置为小端模式)
画个图可能会形象一点
这个是ppt中所举例的。
其实很好理解,小端模式就是数据小的在下面,反之亦然。
这个可以练习下,还是挺简单的
这道题的话呢,首先说明是小端模式,然后 i i i是最先定义的,所以 i i i最先赋值,又说明 i i i的地址为0x40000008,那我们来画个图咯。从高字节到低字节分配,以字为单位内存,每个字内容是由高到低生长的