嵌入式复习

1 基本概念

1.1 什么是EDB? ——嵌入式系统

a. 定义:有CPU,上面有程序在跑

特点:功能、可靠性、成本、体积小、功耗

b. EBD 与其它系统的区别

区别于PCPC 的资源更足->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. ARM32

Thumb16

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 放在核里,初始化CPUSDRAM,调整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)

UART9600(波特率) 8bitN(停止位) 1(校验位1 位)

奇校验1 的个数是奇数个还是偶数个

RS232 电平规范(倒过来的)

同步

SPIserial peripheral interfaceptotocol:双工4 线

应用于外部移位寄存器,D/AA/D、串行EEPROMLED 显示驱动器等外部设备

进行扩展。

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