嵌入式系统(八):基本概念

第二章 基本概念

1、嵌入式系统硬件基础

冯诺依曼结构(程序和数据不分开存储)、哈佛结构(程序和数据分开存储)

CISC和RISC
CISC:复杂指令集(Complex Instruction Set Computer)
RISC:精简指令集(Reduced Instruction Set Computer)

IP核
知识产权核,电路或核是设计好并经过验证的集成电路单元,主要分为:
(1)软核
(2)硬核
(3)固核

三种模式:

  • 计者提供设计和工具的许可证
  • 核厂商设计并制造集成电路芯片
  • 核厂商卖核, 负责为客户设计并制造芯片

流水线技术
几个指令可以并行执行,提高了CPU的运行效率,内部信息刘要求通畅流动。

流水线技术,PC指向正被取指的指令,而非正在执行的指令。

超标量执行:超标量CPU采用多条流水线结构

高速缓存CACHE

存储器层次:寄存器→高速缓存SRAM→ 主存DRAM→本地存储器ROM\FLASH→ 网络存储器ROM\FLASH

存储器系统:
RAM:随机存取存储器, SRAM:静态随机存储器, DRAM:动态随机存储器
1)SRAM比DRAM快
2)SRAM比DRAM耗电多
3)DRAM存储密度比SRAM高得多
4)DRM需要周期性刷新
ROM:只读存储器
FLASH:闪存

2、嵌入式系统软件基础

发展阶段:

  • 无操作系统
    设计以应用为核心,应用软件直接建立在硬件上,没有转门的操作系统、
    • 循环轮询系统
    • 事件驱动系统(前后台):嵌入式RTOS的主要形式。
  • 有操作系统
    • 应用软件层
    • 中间件层
    • 操作系统层
    • 设备驱动层

设备驱动程序:直接和硬件打交道,对硬件进行控制和管理的软件。(嵌入式系统中,设备驱动程序必不可少)
设备驱动程序主要功能:

  • 硬件启动(Startup):在开机上电或重启的时候,对硬件进行初始化;
  • 硬件关闭(Shutdown):把硬件配置成关机状态;
  • 硬件停用(Disable):暂停使用硬件;
  • 硬件启用(Enable):重新启用硬件;
  • 硬件读操作(Read):从硬件中读取数据;
  • 硬件写操作(Write):往硬件中写数据;

嵌入式操作系统:

  • 包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统、电源管理等部分
  • 嵌入式内核是基础核核心

中间件:
除了OS内核、设备驱动程序、应用软件外的所有系统软件。
优点:实现软件的可重用,降低应用软件的复杂性,降低开发成本。

嵌入式软件目标P45资源优化

汇编代码
if-then-else语句的汇编代码

$L1:
  cmp  dword ptr[ebp-4], 1 #把a与常量1进行比较
  jne	  $L2  #如果不相同,跳到$L2继续比较下一个值
  call _ant #如果相同,调用ant()函数
  jmp	  $END #跳转到这段代码的末尾
$L2:
  cmp  dword ptr[ebp-4], 2 #把a与常量2进行比较
  jne	  $L3  #如果不相同,跳到$L3继续比较下一个值
  call _bar #如果相同,调用bar()函数
  jmp	  $END #跳转到这段代码的末尾
$L3:
  ...
$END:

switch语句的汇编代码-1

JmpTable dword  $L1,$L2,$L3,$L4,$L5,$L6 

  mov  eax,dword ptr [ebp-4] #取出变量a的值
  mov  dword ptr [ebp-8],eax #保存在临时变量中
  mov  ecx,dword ptr [ebp-8] #取出,放在ecx中
  sub  ecx,1                 #减1
  mov  dword ptr [ebp-8],ecx #保存回去
  cmp  dword ptr [ebp-8],5   #与5进行比较
  ja   $END                  #若大于5,结束
  mov  edx,dword ptr [ebp-8] #取出该值,放edx
  jmp  dword ptr [edx*4+JmpTable]#跳转到相应的
                                 #case标记

switch语句的汇编代码-1

$L1:					# case 1
  call        _ant
  jmp         $END
$L2:					# case 2
  call        _bar
  jmp         $END
......
$L5:					# case 5
  call        _eat
  jmp         $END
$L6:					# case 6
  call        _foo
$END:

内存分配的方式:
(1)动态分配:堆(malloc)
(2)自动分配:栈,保存局部变量
(3)静态分配:保存全局变量

控制流与数据流P63

  • 一个函数的函数调用过程
  • 控制流的变化

**可重入函数:**只使用局部变量(保存在寄存器或栈中),被1个以上的任务调用。

3、嵌入式操作系统

嵌入式操作系统→软硬件资源的管理者。
(1)进程管理
(2)存储器管理
(3)设备管理
(4)文件管理
(5)接口

按响应时间分类

  • 嵌入式实时操作系统
    • 实时操作系统(RTOS)是一种操作系统,其正确性包括其响应时间和功能正确性。
    • 硬实时和软实时
  • 分时操作系统

按软件结构分类 RTOS的结构:
(1)单体结构
(2)分层结构
(3)微内核结构:设备驱动从内核中分离

进程、线程和任务

进程: 程序+执行。其特点有:
(1)动态性
(2)并发性
(3)独立性

进程=线程+资源平台
优点:

  • 一个进程中可以同时存在多个线程
  • 各个线程之间可以并发地执行
  • 各个线程间可以贡献地址空间

线程:并发执行+共享地址空间,代码在资源平台上的执行流程。
任务:嵌入式系统中提到的任务实际上是线程。
描述任务的数据结构:任务控制块TCB

任务控制块(TCB)是任务存在的唯一标志,任务有3种状态p112
(1)就绪态:就绪队列
(2)运行态:执行队列
(3)等待态:等待队列

任务的调度:
任务调度的时机p118
任务调度的方式:
(1)不可抢占方式
(2)可抢占方式
调度算法的评价指标:

  • 响应时间
  • 周转时间
  • 调度开销
  • 公平
  • 均衡
  • 吞吐量

任务调度算法:

  • 先来先服务FCFS
  • 短作业优先
  • 时间片轮转
  • 优先级调度算法

RTOS的调度目标:使得每个任务在最终期限之前完成。
大多数RTOS调度都采用可抢占式优先级调度。

任务模型(周期性任务):

  • 启动时间r(i,j)
  • 时间限制D(i)
  • 周期P(I)
  • 执行时间E(I)

单调速率调度算法:RMS是一种静态优先级调度算法,也是最常用的一种确定任务优先级的算法。思路:单位时间内任务被执行的次数越多,优先级越高。即任务的周期越短,优先级越高。

**最早期限优先调度算法EDF:**EDF是一种动态优先级调度算法,也是性能最好的一种调度算法。思路:对时间期限最近的任务,分配最高的优先级。

任务间的通信:
(1)共享内存
(2)消息传递:邮箱、消息队列等
(3)管道
(4)信号

信号与中断
相同点:

  • 具有中断性
  • 有相应的处理程序
  • 可以屏蔽响应

不同点:

  • 中断由硬件或特定的指令产生,信号由系统调用产生
  • 中断触发后,硬件会根据中断向量找到相应的处理程序去执行;信号通过发送信号的系统调用触发,但系统不一定马上对它进行处理;
  • 中断处理程序是在系统内核的上下文中运行,是全局的;而信号处理程序是在相关任务的上下文中运行,是任务的一个组成部分。

同步与互斥p159

  • 竞争条件
  • 解决之道:互斥的概念
  • 竞争条件问题的抽象描述:临界区,临界资源
  • 关闭中断的解决方案
  • 基于繁忙等待的解决方案:浪费CPU时间
  • 信号量
内存布局
  • 静态段
    • 代码段.text
    • 数据段.data
    • bss段(全局变量).bss
  • 动态段
    • 堆空间:动态分配的内存空间,malloc/free
    • 栈空间:保存运行上下文以及函数调用时的局部变量和形参。

I/0地址

I/O设备类型

按交互方向分类:

  • 输入设备
  • 输出设备
  • 输出/输出

按数据组织分类:

  • 块设备
  • 字符设备

设备控制器
机械部分:即为I/O设备本身
电子部分:设备控制器或适配器,它的功能是完成设备与主机间的连接和通讯

CPU如何与设备控制器当中的寄存器以及数据缓冲区来进行通信?

  • I/O独立编址;
  • 内存映像编址;
  • 混合编址。

I/O控制方式:
(1)程序循环检测方式
(2)中断驱动方式
(3)直接内存访问方式DMA方式

你可能感兴趣的:(嵌入式系统,risc-v,单片机,嵌入式硬件)