嵌入式不完全自救笔记

一、概论

1.1 嵌入式系统的定义

应用为中心,以计算机技术为基础,软硬件可裁剪。适应应用系统对功能、可靠性、成本、体积、重量、功耗严格要求的专用计算机系统

简述:含有处理器的专用软硬件系统,具有自主的信息处理能力

1.2 嵌入式系统的体系结构

应用层

特点:

  • 与应用密切相关
  • 面向目标和客户
  • 完成特定的功能

操作系统层

  • 嵌入式操作系统(EOS)
  • 文件子系统
  • 图形子系统
  • 网络子系统
  • 其他模块

中间层

将系统软件和底层硬件相隔离

特点:

  • 硬件相关性
  • 操作系统相关性

硬件层

  • 嵌入式处理器
  • 存储器系统
  • 中断控制器、DMAC、定时器/计数器
  • UART、USB控制器、LCD控制器
  • 其它I/O接口

FPGA和ASIC的区别

  • FPGA用于要求快速迭代的或小批量的产品,或作为ASIC的算法验证加速
  • ASIC用于设计规模较大,复杂度较高的芯片,或成熟度高,产量较大的产品

1.3 嵌入式系统的特点

  • 嵌入专用
    嵌入在针对特定应用设计的系统中
  • 综合性强
    • 将计算机技术、半导体技术、电子技术与各行业的具体应用相结合后的产物
    • 是一个技术密集、资金密集、知识高度分散、不断创新的知识集成系统

  • 设计高效
    嵌入式系统的软硬件都必须高效率的设计,避免冗余
  • 程序固化
    软件固化在硬件上,提高执行速度和可靠性
  • 需要独立的开发系统
    嵌入式系统本身不具备自举开发的能力, 必须有一套开发工具和环境才能进行开发
  • 生命周期长
  • 可靠性高、成本低、资源受限、功耗低

二、嵌入式系统的设计方法

2.1 传统设计方法

流程

  1. 需求分析
  2. 规格说明、体系结构设计
  3. 硬件设计、软件设计,独立进行
  4. 系统集成、测试

特点:软硬件设计独立进行

优点:简单易行,分工明确

缺点

  • 排错困难
  • 解决方案无法进行全系统优化设计

2.2 系统级设计方法

2.2.1 软硬件协同设计

步骤

  1. 需求分析
  2. 软硬件协同设计
  3. 软硬件实现
  4. 软硬件协同测试
  5. 软硬件协同验证

特点:软硬件统一描述

优点

  • 软硬件统一描述
  • 有利于优化设计
  • 重点关注算法,而非实现

缺点

  • 不成熟,缺乏有效的统一描述工具
  • 现有工具实现效率不高

2.2.2 设计重用技术

  • 基于IP核的模块级重用
  • 基于平台的系统级重用

2.3 嵌入式系统的设计过程

2.3.1 需求分析

作用:从用户处收集系统的非形式描述

分类

  • 功能性需求
  • 非功能性需求

2.3.2 规格说明

  • 对需求进行提炼,得到系统的规格说明
  • 作为正式设计指导和验收的标准
  • 起到用户和生产者之间合同的作用

2.3.3 体系结构设计

  • 描述如何实现所需的功能和非功能需求。包括对硬件软件的功能划分,和系统的软硬件选型
  • 说明需要什么样的构件
  • 是设计成功与否的关键

* 2.3.4 软硬件构件设计

作用:对软硬件进行详细设计(并行的)

设计技术

  • 模块化设计
  • 面向对象设计
  • 组件设计

* 2.3.5 系统集成

  • 把软件、硬件、执行装置、被控对象集成在一起。
  • 进行调试
  • 发现并改进单元设计过程中的错误

* 2.3.6 系统测试

  • 看其是否满足规格说明书中给定的功能要求
  • 是产品质量保证的坚实基础

三、ARM体系结构与指令集

3.1 ARM处理器的特点

  • 体积小、低功耗、低成本、高性能
  • 支持Thumb/ARM双指令集
  • 大量使用寄存器,指令执行速度快
  • 大多数的数据操作在寄存器中完成
  • 寻址方式灵活,效率高
  • 指令长度固定

小核处理器

A7、A53、A55

3.2 ARM体系结构的版本

  • V1-V3:开发和实验阶段
  • V4:第一个成熟版本
  • V5-V8

3.3 体系架构分类

3.1.1 复杂指令集和精简指令集

  • 复杂指令集架构(CISC):
    • 采用庞大的指令集,可减少编程所需的代码量。
    • 应用于桌面电脑和服务器

  • 精简指令集架构(RISC):
    • 包含了简单、基本的指令,通过这些可以组合为复杂的指令
    • 用于嵌入式微处理器

3.2.2 普林斯顿结构和哈佛结构

  • 普林斯顿结构也称冯诺依曼结构:将程序指令存储器和数据存储器合并在一起,程序指令和数据的宽度相同
    • ARM7系列基于普林斯顿结构

  • 哈佛结构:指令和数据分开存储,指令和数据可以有不同的宽度
    • ARM9以后都基于哈佛结构

3.4 流水线技术

3.4.1 三级流水线技术

ARM7使用
  1. 取指:将指令从存储器中取出
  2. 译码:对指令进行解释,告诉CPU如何操作
  3. 执行

3.4.2 五级流水线技术

ARM9使用

把三级流水线中的执行单元进一步细化

  1. 取指
  2. 译码
  3. 执行
  4. 存储器访问
  5. 寄存器回写

3.5 ARM处理器模式

  1. 用户模式usr:正常的程序执行状态
  2. 系统模式sys:运行具有特权的操作系统任务
  3. 快速中断模式fiq::用于高速数据传输
  4. 外部中断模式irq:用于通用的中断处理
  5. 管理模式svc:操作系统使用的保护模式
  6. 数据访问终止模式abt:用于虚拟存储或存储保护
  7. 未定义指令终止模式und:当未定义的指令执行时进入

模式分类:

  • 除用户模式外的6种称为特权模式
  • 除用户模式和系统模式外的五种称为异常模式

3.6 ARM微处理器的工作状态

两种状态:

  • ARM状态:执行32位的命令
  • Thumb状态:执行16位指令

状态可以随时切换

3.7 寄存器

3.7.1 通用寄存器

包括R0 ~ R15,分类为:

  • 未分组寄存器:0-7
  • 分组寄存器:8-14
    • R13的作用:作为堆栈指针SP
    • R14的作用:
      • 用于保存子程序返回地址
      • 发生异常时,将R14对应的异常模式版本设置为异常返回地址

  • 程序计数器PC(R15),指向正在取值的地址

3.7.2 程序状态寄存器

当前程序状态寄存器

R16是当前程序状态寄存器CPSR。

作用:

  • 保存ALU中的当前操作信息
  • 控制 允许/禁止 中断
  • 设置处理器的运行模式

条件标志码-控制位

  • 第5位T:反应处理器的运行状态
  • 6、7位I、F:中断禁止位。I禁止IRQ中断,F禁止FIQ中断

3.8 ARM处理器的异常

3.8.1 异常的返回

复位异常处理程序不需要返回

异常处理完毕后:

  1. 将SPSR复制到CPSR中
  2. 将链接寄存器LR中的值减去相应的偏移量后送到PC中

3.8.2 异常向量

  • 复位:0000
  • IRQ(中断请求):0018
  • FIQ(快速中断请求):001C

3.8.3 异常优先级

  • 最高:复位
  • 最低:未定义指令
  • FIQ > IRQ

3.9 数据类型

  • 字:长度为32位,4字节对齐,地址低两位为0
  • 半字:长度为16位,2字节对齐,地址最低位为0
  • 字节:长度为8位,任意地址对齐

3.10 指令条件码

  • 相等:EQ
  • 不相等:NE
  • 有符号数:
    • 大于或等于:GT
    • 小于:LT

  • 无符号数:
    • 大于:HI
    • 小于或等于:LS

3.11 寻址方式

立即寻址

操作数本身在指令中给出。

特征:立即数的表示以#为前缀

寄存器寻址

指令中给出寄存器的编号,寄存器中的内容作为操作数

寄存器间接寻址

将某个寄存器中的值作为地址

3.12 ARM指令集

3.12.1 加载/存储指令

LDR

内存 —> 寄存器

将地址为R1的存储器中的32位数据送到目的寄存器R0

LDR R0, =0x11223344
LDR R0, [R1]

LDRB

将地址R1中的8位的字节数据送到目的寄存器中

STR

寄存器 —> 内存

将R0中的一个32位数据传送到存储器R1中

STR R0, [R1]

STRB

传送低8位数据

3.12.2 指令

B

无条件跳转

BX

从ARM指令集跳转到Thumb指令集

BL

跳转前,会在寄存器R14中保存PC的当前内容

3.12.3 数据处理指令

MOV

将另一个寄存器中的值或一个立即数加载到目的寄存器中。

将R2中的内容左移两位后赋值给R1

MOV R1, R2, LSL #2

右移指令为LSR,用法同上

CMP

将两个寄存器中的值或立即数进行比较,会做一次减法,但不保存结果,只是更改标志位的值

四、存储系统

4.1 S5pv210

BL0固化代码完成的初始化功能

  • 关闭看门狗
  • 初始化icache
  • 初始化堆栈
  • 初始化块设备拷贝功能
  • 设置系统时钟
  • 拷贝BL1到IRAM
  • 检查BL1的校验和
    • 成功则跳转到BL1执行
    • 失败则第二启动模式

校验

  • 拷贝BL1到IRAM时,前16byte保存了校验和的值以及BL1的大小
  • 拷贝过程中CPU计算当前bin文件中的校验和,与保存的校验和进行比较

启动过程

  1. 上电复位后将从IROM处执行已固化的启动代码(BL0内)
  2. 对启动设备进行判断,并从启动设备拷贝BL1到IRAM处
  3. 对BL1进行校验,校验成功转入BL1执行。
  4. BL1拷贝BL2到IRAM,并进行校验,通过后转入BL2
  5. BL2完成一些复杂的初始化。完成后将OS代码拷贝到DRAM中,并跳到DRAM中执行

4.2 Flash接口

4.2.1 概述

目的:替代EEPROM

优点:容量大、速度快、成本低、有保护机制

缺点:必须先擦出后写入;擦写速度较慢;必须以block方式写入

4.2.2 分类

  • NAND Flash
  • One NAND Flash
  • NOR Flash
\NANDOneNANDNOR

五、系统总线

5.1 RS232C的引脚

  • RXD:输入,接收数据
  • TXD:输出,发送数据
  • RTS:输出,请求发送
  • CTS:输入,允许发送
  • GND:信号地

5.2 最简情况下的双机互联

方法

  • TXD和RXD分别交错相连
  • GND直接相连

问题

通信不可靠,接收缓冲区容易溢出。

六、IO接口电路

6.1 volatile关键字

含义:阻止编译器优化。因为该变量可能会意想不到的改变,因此每次都必须重新读这个变量的值而不是使用cache里的备份

使用volatile变量的情况

  • IO接口电路的硬件寄存器
  • 中断服务子程序中访问到的非自动变量
  • 多任务中被几个任务共享的变量

6.2 通用IO接口:GPIO

6.2.1 GPIO编程

向寄存器写入内容,假设地址为 0xE0200240

(*(volatile unsign int*) 0xE0200240) = 0x11111111

eg:控制LED灯闪烁的流程:

  1. 找到控制LED灯的管脚
  2. 配置其为输出管脚(通过对CON寄存器整体赋值,将CON寄存器中对应的GPIO的4个bit设置为0001)
    // 这里假设第3个GPIO对应控制LED灯的管脚
    GPJ0CON = (1<<2);
  3. 使该管脚输出相应的电平。GPJ0DAT有8bit,每个bit对应一个GPIO。使对应的bit位反复赋值为0和1,即可实现闪烁

6.2.2 两个常用寄存器

GPxxDAT

DAT有若干个bit,每个bit对应一个GPIO。若要让第n个GPIO输出高电平,则让这个bit为1

  • 管脚配置为输出时,可以修改该寄存器来修改输出。
  • 管脚配置为输入时,可读取该寄存器的值获取输入

GPxxCON

power down模式下的配置寄存器。

取值与状态的关系:

  • 输入:0000
  • 输出:0001
  • 中断:1111

6.3 s5pv210的定时器

6.3.1 定时器的内部结构

s5pv10共有5个定时器。

  • 定时器4是一个内部定时器,没有输出口线
  • 定时器0具有死区发生器特征

计数特征:减1计数,减到0为止

6.3.2 定时器的基本操作

占空比

TCMPBn / TCNTBn

自动重装

当计时器计数到0后,定时器发出中断请求通知CPU定时器操作已经完成。在自动重装模式下,初值寄存器TCNTBn和TCMPBn的值会自动加载到当前寄存器TCNTn和TCMPn中

6.4 UART: 通用异步收发器

6.4.1 工作原理

协议规定:空闲位、停止位都是高电平;起始位是低电平。

数据发送过程

  1. 发送起始位
  2. 先低位后高位发送数据位
  3. 最后发送停止位

6.4.2 操作步骤

  1. 设置所涉及引脚为URAT功能
  2. 设置波特率、传输格式
  3. 设置UART通道的工作模式
  4. 等待发送/接收数据的完成

附:部分题目整理

包括全局的中断禁止位的寄存器:CPSR

ARM7的异常中断中优先级最高的是:复位

能完成从ARM指令集跳转到Thumb指令集的指令是:BX指令

嵌入式系统不是必须要有OS

S3C44BOX的存储控制器对地址空间是如何划分的?每个地址空间多大?哪些地址空间可变用于SDRAM存储器?

包括8个地址空间,最大32M,Bank6和Bank7可用于SDRAM存储器

嵌入式处理器的类型:

  • 嵌入式微处理器
  • 微控制器(单片机)
    适用于工业控制
  • 数字信号处理器DSP
    适用于做FFT(快速傅里叶变换)

异常向量表存放的是跳转指令,执行指令可以进入响应的中断服务子程序

嵌入式开发环境包括哪些组件

  • 宿主机
  • 目标机
  • 嵌入式操作系统
  • 运行于宿主机的编译器、链接器等软件环境

BootLoader的作用

在嵌入式系统复位启动时,操作系统内核运行前执行的程序。

作用:初始化硬件设备,建立内存和IO空间映射图,为加载操作系统内核调整好适当的环境

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被大佬糊弄的只会点灯的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值