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