嵌入式复习
1 基本概念
1.1 什么是EDB? ——嵌入式系统
a. 定义:有CPU,上面有程序在跑
特点:功能、可靠性、成本、体积小、功耗
b. EBD 与其它系统的区别
区别于PC:PC 的资源更足->CPU、内存、硬盘、电源
区别于逻辑硬件电路:硬件上面没有CPU
1.2 EBD 开发的基本过程
a. 并行的特性
b. 设计决定什么
c. 软件硬件划分
软件:操作系统、编程模型
硬件:CPU
d. 通用件的好处
2 MCU
2.1 MCU vs CPU
MCU 是微控制器/单片机
2.2 如何选择?
资源性能不足时,封装尺寸相同时选容量最大的,实际做的时候可以换成容量小
的。
选择单片机的基本条件是什么,运算能力,片上的,SDRAM。如果资源不足,该
算法。如果flash 不足怎么办,如果接口不足巴拉巴拉的不足怎么办,如何扩展
等。AD 扩展,1 切4 芯片,成本是不是划得来。通常情况下集成的片内AD 最
便宜,但是有时候需要用片外的,精度需求。
2.3 ARM
a. ARM:32 位
Thumb:16 位
Thumb2——Cortex{
Cortex A application 高端手机
Cortex R Realtime
Cortex M Microcontrol 低端单片机}
树莓派arm 没有Thumb2(混合16 和32 位),
b. 工作模式(不考x86)
ARM:特权模式、用户模式、中断模式、快中断模式(牵扯到寄存器的问题,
某些寄存器有不同的bank)
MIPS:没有快中断,快中断关系到寄存器
工作模式怎么切换?
如用户模式怎么切换到系统模式:软中断
c. ISA(多条件执行多寄存器寻址)
d. RAM 的指令集,32 位的都带条件执行。
S 标志:要不要改寄存器,带S 标志修改标志寄存器会影响后一条跳转指令
的结果。后一条指令如果是跳转,并且前面修改了标志位就要stall
e. 函数调用规范
f. 中断向量表
中断向量表的第一项是一个初始值,reset 启动地址,Cortex 启动地址不为0,
ARM 启动地址为0
startup.s 里面做了啥,拷贝和清零。Main 函数是在启动程序先做完后才做的。
g. 内存模型
h. 启动过程
startup.s 拷贝有全局变量的寄存器,清零xxxxxx 寄存器
main 不是上电后第一个执行,启动程序之后才做
3 软件模型
3.1 轮询:没有任何中断,无法处理紧急的事情
3.2 前后台(一般不考)
主循环要做的事情是固定的,有中断(置标志)和循环(读标志),把数据放到
共享内存,在大循环里读取共享内存,在大循环里要不断关中断开中断
3.3 中断驱动
没有前台的大循环,只有中断,中断来就做事情,没有就休眠
3.4 动态队列
在中断里做基础工作,其他工作放队列里,主循环要做什么由队列决定
VS 前后台主循环要做的事跟中断有关系
VS 中断中断来了之后事情不是在中断中做的,而是在主循环里面做的
4 Bootloader
4.1 什么是Bootloader
上电到第一行代码之间有Bootloader
4.2 Bootloader 的功能
两种:一种为了linux,一种为了RTOS
一种SDRAM
一种Flash(本身)
4.3 两阶段工作
把CPU 放在核里,初始化CPU、SDRAM,调整CPU 频率等跟操作系统无关的
事情
把操作系统可执行代码放在SDRAM,然后跳到SDRAM,开始系统
不具有第二阶段工作能力的bootloader,能把cpu 初始化,然后跳到flash 中开
始操作系统。
5 RTOS
5.1 实时的概念
规定时间内完成,ddl
强实时
弱实时
ns us ms
5.2 抢占式调度的实现
调度时机
在就绪队列里出现了比在CPU 中优先级更高的任务。
还在CPU 上不会被拉下来,要么自己发起:新任务(唤醒一个线程)、优
先级发生变化、IO 等待(间接主动等待,线程主动发起)。要么中断
调度实现
几张图,任务控制表tcb
堆栈指针、栈顶指针、寄存器,切出来做什么,切进去做什么
一个任务新建时要不要在寄存器里放假的什么东西(?)
5.3 优先级反转
提高优先级,火星车
5.4 任务间同步与通信(不重要)
任务间通不通讯,信号量等
5.5 uC/OS 基本常识
uC/OS 对RTOS 的强化,函数库的形态出现,和自己的程序编译形成一个整
体,从main 中调用系统的函数。如何从优先队列里面找出任务,查找表,
不需要便利搜索。
6 Linux
6.1 ARM Linux 的启动过程
6.2 系统调用的路径
6.3 内核模块的加载与卸载
设备驱动程序,作为内核模块的方式加载,内核模块在加载的时候两个必须
的函数,in out
每个设备在dev 里面的虚拟文件,主设备号,类别,从设备号,传给具体的
操作函数,从而
知道现在在用哪个设备。
Bootload
6.4 设备驱动程序的接口
7 接口与外设
7.1 GPIO 基本概念
可以由CPU 直接操纵的引脚,可以写,可以读,可以接通信单元。
GPIO=通用输入输出
- 输入:程序可以判断输入信号是1 还是0
- 输出:程序可以设置输出1 或0
可以以此来连接外部器件
- 输入:开关/按钮
- 输出:LED、扬声器
复用:有多个功能,输入输出不能同时进行,不需要关心太EE 的事情
7.2 Linux 下访问GPIO 的方法
内核级
文件系统级
应用程序级:writingpi 的库
在ARM 上运行的速度远远低于CPU 上的速度
外设实际上是一个地址
Linux sys 目录下有专门管GPIO 的文件,可以跨语言使用;应用程序都做了库。
7.3 串行通信
异步
UART 通信原理——通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
UART:9600(波特率) 8(bit) N(停止位) 1(校验位1 位)
奇校验1 的个数是奇数个还是偶数个
RS232 电平规范(倒过来的)
同步
SPI(serial peripheral interface)ptotocol:双工4 线
应用于外部移位寄存器,D/A,A/D、串行EEPROM、LED 显示驱动器等外部设备
进行扩展。
I2C:半双工2 线
片选信号(地址和连线)
8 文件系统
8.1 NOR 和NAND 区别
NOR:可以给出地址直接读,可以运行程序,速度比SRAM 慢,大容量数据储存
器
NAND:不能给出地址读一个值,一次读一个block,写入、擦除速度慢,适合做
Bootloader
8.2 Flash 特点
按块擦写
擦写均衡问题
不能随意写入,写入之前先要擦除,读-擦除-写,一次写一个block,有写入次数
限制,支撑时间很长
8.3 Flash 文件系统
模拟块设备型TrueFFS
Flash 专用的日志文件系统:往下写,不擦除
根文件系统:虚拟文件系统
模拟磁盘文件系统(实际上在NAND 上,转换表)
JFFS
YAFFS
9 扩展
开发过程
上位机:PC
下位机:嵌入式板卡
中间怎么连的:下载调试一条线,通信一条线
Makefile 目标依赖动作
仿真器:好处是具有完全的硬件能力,虚拟机的所有GPIO 也是假的,对复杂脉
冲会不好处理。
虚拟机:程序上有软件模拟运行你的CPU