B站课程https://www.bilibili.com/video/BV18b411L7Zd?p=1
学习进度:
B站课程学习:
第一章:嵌入式系统的概述
众所周知,遥控器、冰箱、门锁、摄像头等等都由嵌入式系统去控制和监控,应用非常广泛,也越来越深化。
1、嵌入式系统相比于桌面系统需要考虑到的问题:
- 可用资源更少,功耗约束(ivery mportant):开发时,要考虑系统成本、降低功耗!
- 为特定任务和需求而开发
- 实时性要求更高,限定响应时间提供可靠服务,(强实时性:μs~ms,一般实时性:ms~s,弱实时性:s以上)
- 高可靠性保证(压力测试、高低温测试、湿度测试等,比如工业机器人需要忍耐极端环境和工作强度)
- 综合的计算机应用技术:系统结构(状态控制器、中断控制器处理)+汇编语言(操作外围设备、端口)+操作系统(运行、通讯、互斥)+编译原理(交叉编译、bootloader加载)
2、嵌入式系统构成要素
- 嵌入式微处理器:有1000多种,分类:
- MCU:嵌入式微控制器,其内部一般集成了某种处理器核、少量的ROM/RAM储存器、总线控制逻辑、各种功能模块、外设接口电路等。
- DSP:嵌入式信号处理器,专门用来处理嵌入式系统的数字信号,在嵌入式DSP数字滤波、快速傅里叶变换、频谱分析等仪器上使用较为广泛。
- MPU:嵌入式微处理器,也称为嵌入式微处理器单元。一般分为通用微处理器,嵌入式微处理器。
- SOC:嵌入式片上系统。随着科技的发展EDA技术的推广和VLSI设计的普及,在一个硅片上实现一个复杂的系统已经成为可能。除了个别的器件外,整个嵌入式系统基本可以集成到一块或几块芯片中。
- 常见的嵌入式处理器对比分析! - 知乎 (zhihu.com)
- 外围硬件设备
- 片外总线:连接系统各个部件、进行互连和信息传输的信号线
- ESIA总线、SCSI总线、PCI总线;
- AMBA总线:arm研发的总线规范;
- 专用总线:CompactPCI总线(工业控制)、CAN总线(汽车电子总线,与车载不同)、1553B总线(航空工业总线)
- 电子盘/电子存储:存储的, 较多采用flash芯片(体积小、功耗低、抗震,读写次数有限,有NOR、NAND的flash芯片)
- I/O设备:
- A/D、D/A:电压高低数字化
- 中断控制:发中断给处理器,从而触发事件处理
- UART:输入输出调试
- LCD:显示器
- 通讯设备:
- 有线通信:IEEE1394、USB
- 无线通讯:IrDA、蓝牙(距离近)、802.11b/g(远)
- 片外总线:连接系统各个部件、进行互连和信息传输的信号线
- 嵌入式操作系统(RTOS)
- 开放源码的操作系统:Linux系列,uC/OS,FreeRTOS,AliOS
- 性能指标:
- 内核大小:几K~几百K
- 调度时间片:1ms
- 实时任务响应时间:20~40微秒
- 一般任务响应时间:20微秒~几百毫秒
- Linux是怎样跑起来的:BSP与Bootloader - 知乎 (zhihu.com)
- 用户应用软件
3、嵌入式系统软件技术(和桌面系统不同):
1、混合编程模式:嵌入式系统经常需要调用外设、控制寄存器等。
2、固定内存地址访问:嵌入式系统中,某一块内存固定给某个模块使用,因此只需固定访问内存地址;
3、存储限定符volatile:代理(而不是变量的所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。多任务共享变量、中断与任务共享变量时,必须使用volatile,强制读取内存中的值。
4、代码共享与可重入:
- 在嵌入式系统中,多个任务使用子程序的一个单一拷贝很正常,这些子程序称为共享代码;
- 由于实时系统的任务是可抢占的,因此必须保证共享代码同时被几个任务调用而不发生冲突,这是可重入。而在桌面系统中,内存够大,只要拷贝代码就可以不冲突。
5、按位操作:对变量或寄存器进行位操作
C语言位操作 - bit 、byte的清零,置1,提取,判断_c语言中如何判断byte中字节的值-CSDN博客
#define GET_BIT(x, bit) ((x & (1 << bit)) >> bit) /* 获取第bit位 */
#define GET_BIT(x, byte) ((x >> 8*byte) & 0x000000ff) /* 获取第byte字节,1字节=8位 */
#define CLEAR_LOW_BIT(x, bit) (x &= ~(0x1 << bit)) /* 清零第bit位 */
#define CLEAR_LOW_BYTE0(x) (x &= 0xffffff00) /* 清零第0个字节 */
#define SET_LOW_BIT(x, bit) (x |= (0x1 << bit)) /* 第bit位置1 */
#define SET_LOW_BYTE0(x) (x |= 0x000000ff) /* 第0个字节置1 */
6、看门狗定时器(WDT):对于要求高可靠性的嵌入式应用场合,系统往往需要提供看门狗(WATCHDOGr)机制,防止用户程序进入死循环;
- 看门狗是一个定时器电路,给它输入一个信号,也叫喂狗。MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 置位,如果超过规定的时间不喂狗,WDT 定时超过,就会输出一个复位信号到MCU,从而使MCU复位reset, 防止MCU死机。
- 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
- 重启WDT,也叫“踢”看门狗。
- 要求:程序能够生成一个看门狗,并交付执行动作,如果程序在指定时间内不能将看门狗置位,将触发指定程序。
- 看门狗执行动作包括:系统重启、任务重启、跳出循环。
- 什么是看门狗-WatchDog - 知乎 (zhihu.com)
第二章:嵌入式系统基本概念
1、嵌入式系统基本组成
2、微处理器基本知识
3、嵌入式微处理器
分类:第一章->嵌入式系统构成要素->嵌入式微处理器
嵌入式微处理器的发展过程:
- 晶体管逻辑电路 -> 中小规模IC逻辑电路 -> 大规模IC逻辑电路 -> 微处理器 -> DSP -> 单片机 -> FPGA技术 -> ASIC -> SOC
4、设计工具
硬件设计工具(拓展,嵌入式软件开发工程师不需要掌握,随着时代进步,工具可能也有更新)
- 系统级设计工具:Cadence的SPW,System View
- 模拟电路系统仿真工具:Pspice,EWB
- PCB设计工具:Protel,PADs的Power PCB & Tool Kit,Mentor的Expendition & Tool Kit
- 可编程逻辑器件设计工具:Mentor FPGA Advantage & ModelSim,Xilinx Foundation ISE & Tool Kit,各种综合和仿真第三方工具
软件开发工具:
- 开发工具:编译器、调试器、软仿真、集成开发环境
- 典型的商业开发工具及供应商:Windriver公司的Tornado for VxWorks,MontVisa公司的HardHat Linux开发工具包,AMC公司的SuperTAP调试器
- 免费开发工具:GNU系列开发工具、Wiggler调试器
5、嵌入式系统的可裁剪性
这一点还是很重要的,一方面,嵌入式系统开发是针对专门需求和产品的,另一方面,可用资源比较少,所以嵌入式系统的可裁剪性就更加必要。
嵌入式系统的可裁剪性,是软硬件可裁剪性,用白话来说,嵌入式系统的功能、性能、子系统等是可配置的,配置是动态变化的。例如,linux系统(软件)最大的特点就是可配置,配置linux系统功能,linux系统可以很庞大到服务器集群,可以很小到一个芯片中,可以参考Kconfig定义(linux/Kconfig at master · torvalds/linux · GitHub)。
可裁剪性的实现有很多种方法,也可以不同层次用不同的方法:
- 宏开关:静态编译时,通过编译宏来控制;
- 动态库:各个功能模型分别编译成动态库,根据产品的功能加载需要的动态库;
- 控制函数流程:主进程启动时,从规格文件中获取特性并加载全局变量,控制函数(业务)流程,达到裁剪目的。
6、嵌入式实时操作系统的相关基本知识
实时操作系统的实时性:第一章 -> 嵌入式系统构成要素 -> 3、嵌入式操作系统
实时性操作系统主要的实现形式:事件驱动系统
1、事件驱动的概念:在事件驱动机制中,①对象对于外部事件总是处于“休眠” 状态的,而把对外部事件的检测和监控交给了第三方组件;②一旦第三方检测到外部事件发生, 它就会启动某种机制, 将对象从“休眠” 状态中唤醒, 并将事件告知对象;③对象接到通知后, 做出一系列动作, 完成对本次事件响应,然后再次进入“休眠” 状态,如此周而复始。(很像中断)
2、概念:事件驱动系统是对外部事件直接响应的系统。它包括前后台、实时多任务、多处理器等。
3、前后台:应用程序是一个无限循环,循环中调用相应的函数完成相应的操作,这部分堪称后台行为(background);中断服务程序处理异步事件,这部分看成前台行为(foreground)。
后台也可以叫做任务级,前台也可以叫做中断级。
嵌入式开发绝招:状态机+事件驱动框架~ - 知乎 (zhihu.com)【需要耐心点看】
7、RTOS的特征
(后面会深入展开学习,而且确实挺难挺多):
- 高校任务管理:
①支持多任务;
②优先级管理;
③任务调度:基于优先级的抢占式调度、时间片轮转调度算法;
④支持快速而确定的上下文切换; - 快速灵活的任务间通信:
①信号量:二进制、互斥、计数器;
②通信机制:消息队列、管道等; - 高度的可裁剪性
- 快速有效的中断和异常事件处理
- 动态内存管理
- 系统时钟和定时器
第三章 ARM体系结构
1、一个典型的机电控制体系结构:
- 由32位arm处理器和外设接口组成;
- 通过高速总线,可以和被控对象链接;
- 通过通讯端口,可以和PC机相连;
- 通过网络和现场总线,可以远程控制;
- 还可以连接键盘、LCD显示器、仿真器等。
2、嵌入式的发展新方向:SOC
3、ARM体系结构概述(流行的嵌入式处理器核)Advanced RISC Machine
https://zhuanlan.zhihu.com/p/53075313
1、采用RISC架构的ARM微处理器的特点:
- 体积小、功耗低、成本低、高性能;
- 支持Thumb(16位)/ARM(32位)双指令集;
- 大量使用寄存器,指令执行速度更快;
- 大多数数据操作都在寄存器中完成,寻址方式灵活简单,执行效率高;
- 指令长度固定
2、下图是16位Thumb指令的编码结构图,Thumb指令集是32位ARM指令集的子集,按16位重新编码:
- 32位的数据总线;
- 如果是16位Thumb指令,数据总线可以存放两条指令,通过Thumb指令检验器中检验,然后送到ARM指令解码器中解码;
- 如果是32位ARM指令,则直接通过。
4、ARM体系编程模型
1、ARM处理器的三级指令流水:
2、存储器模式:
- 大端排列模式
- 小端排列模式
3、ARM7TDMI操作模式
- 用户模式(usr):正常的程序执行模式;
- 快速中断模式(fiq):支持高速数据传输或通道处理;
- 中断模式(irq):用于通用中断处理;
- 管理员模式(svc):操作系统的保护模式;
- 中止模式(abt):支持虚拟内存/或内存保护;
- 系统模式(sys):支持操作系统的特殊用户模式(运行操作系统任务);
- 未定义模式(und):支持硬件协处理器的软件仿真
4、ARM7TDMI寄存器模式:
- 37个寄存器:
- 31个通用32位寄存器(包括程序计数器PC);
- 6个状态寄存器;
- 可见的寄存器取决于处理器的模式
- 15个通用寄存器(R0 to R14)以及1或者2个状态寄存器核程序计数器在任何时候都可见;
- 寄存器分配:
- R0 to R15:可以直接访问;
- R0 to R14:通用寄存器;
- R13:兼用堆栈指针(sp),每种处理器操作模式都有单独的堆栈;
- R14:链接寄存器(lr),存放返回地址;
- R15:程序指针寄存器(PC);
- CPSR:当前程序状态寄存器,包括代码标志状态核当前模式位;
- 5个SPSRs:当异常发生时保存CPSR状态
5、ARM中断模式
- 异常类型:
- FIQ(Fast Interrupt reQuest):通过在nFIQ引脚上输入低电平产生,快速处理通道传送数据;
- IRQ(Interrupt ReQuest):通过nIRQ引脚上输入低电平产生中断;
- ABORT:用外部abort产生信号,指示当前存储器访问不能被完成;
- Software interrupt:通过软件中断产生,进行管理员模式中获得,通常要求特殊的管理功能,如操作系统支持;
- 未定义的指令陷阱;
- 异常优先级:
- Reset
- Data abort
- FIQ
- IRQ
- Prefetch abort
- 未定义指令,Software interrupt(最低优先级)
时间 | 内容 | 详细 | 反思 |
---|---|---|---|
2024/04/11 | B栈视频第1 2课时:嵌入式系统的简介 |
| |
2024/04/13 |
|
|
|
2024/04/13 | B栈视频第5 6课时:嵌入式系统的简介 |
|
|
2024/04/13 | B栈视频第7 8课时:嵌入式系统的简介 |
|
|
专有名词:
SOC/SOPC:系统级芯片/可编程系统级芯片
HAL:硬件抽象层
BSP:板级支持包
嵌入式基础概念(一)_什么是嵌入式的软件可裁剪性-CSDN博客