01. 嵌入式系统概要

文章目录

  • 嵌入式系统概要
    • 嵌入式系统的概念及特点
    • 嵌入式系统硬件
      • 嵌入式处理器
      • 计算机硬件
      • 微控制器MCU
      • ARM处理器
      • ARM内核架构
      • 嵌入式外围电路
    • 嵌入式系统软件
      • 传统的嵌入式软件框架
      • 演进的嵌入式软件框架
      • 板级支持包
    • 嵌入式系统的编程模式
      • 前后台编程模式
      • 基于RTOS的编程模式
      • 几种常用的RTOS
        • FreeRTOS
        • μC/OS II
        • RTX
        • RT-Thread
    • 微控制器的程序开发方式(STM32为例)
      • 寄存器开发
      • 固件库开发
      • 寄存器开发 vs 固件库开发


嵌入式系统概要

嵌入式系统的概念及特点

1. 概念

  • 国外的定义:用于控制、监视或者辅助操作机器或设备的装置
  • 国内的定义:嵌入到对象体系中,以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统

2. 特点

  • 嵌入性:嵌入到对象系统,满足对象系统的要求,如物理环境、电气环境、成本
  • 专用性:量身定做,专用开发环境,专用开发工具
  • 计算机系统:以计算机技术基础,光、机、电,算、软一体化,多学科融合
    01. 嵌入式系统概要_第1张图片

3. 嵌入式应用的演变
01. 嵌入式系统概要_第2张图片

嵌入式系统硬件

嵌入式处理器

  • 嵌入式处理器主要可以分为4大类:微处理器MPU、微控制器MCU、数字信号处理器DSP、片上系统SOC
    01. 嵌入式系统概要_第3张图片
  • MMU:Memory Management Unit,内存管理单元

计算机硬件

01. 嵌入式系统概要_第4张图片

  • 微机的硬件由CPU、存储器、输入\输出设备构成
  • 输入\输出设备通过输入\输出接口与系统相连
  • 各部件通过总线连接

微控制器MCU

01. 嵌入式系统概要_第5张图片

ARM处理器

01. 嵌入式系统概要_第6张图片

  • ARM是技术:Advanced RISC Machines的缩写
  • ARM是公司:ARM公司的特点就是只设计芯片,而不生产芯片
  • ARM公司将技术授权给世界上许多著名的半导体厂商

ARM内核架构

01. 嵌入式系统概要_第7张图片

  • V7是ARM内核的版本
  • Cortex-A应用处理器:主要用于移动计算、智能手机、车载娱乐、自动驾驶、服务器、高端处理器等领域;时钟频率超过1GHZ,支持Linux、Android、Windows等完整操作系统需要的内存管理单元MMU
  • Cortex-R实时处理器:可用于无线通讯的基带控制、汽车传动系统、硬盘控制器等;时钟频率200HZ到大于1GHZ,多数不支持MMU,具有MPU、Cache和其他针对工业设计的存储器功能;响应延迟非常低,不支持完整版本的Linux和Windows,支持RTOS
  • Cortex-M微控制器处理器:时钟频率较低容易使用,应用于单片机和深度嵌入式市场
  • cortex:大脑皮层

嵌入式外围电路

01. 嵌入式系统概要_第8张图片

  • SRAM:Static Random-Access Memory,静态随机存取存储器
  • DRAM:Dynamic Random Access Memory,动态随机存取存储器

嵌入式系统软件

传统的嵌入式软件框架

01. 嵌入式系统概要_第9张图片

演进的嵌入式软件框架

01. 嵌入式系统概要_第10张图片

  • HAL:Hardware Abstract ion Layer:硬件抽象层
  • 引进HAL层的目的与意义
    – (1)引进中间层(HAL层,硬件抽象层)屏蔽了底层硬件的多样性;应用程序与操作系统不再面对具体的硬件环境,而是面对由这个中间层所代表的、逻辑上的硬件环境
    – (2)减少嵌入式软件移植的工作量和难度,提高嵌入式软件的通用性和复用性
    –(3)应用程序与操作系统调用硬件抽象层(HAL层)提供的接口函数。只要接口函数能够在下层硬件平台上实现,那么操作系统和应用程序的代码就可以无缝移植:只要HAL层提供的接口方法不变,不同的硬件平台根据HAL层的接口方法提供不同的实现,对于应用程序与操作系统来说是透明的–>跨平台

板级支持包

  • 板级支持包BSP(Board Support Package)是硬件抽象层HAL的一种实现形式
    01. 嵌入式系统概要_第11张图片
  • BSP_LEB_Init在硬件A上有A的实现方式,在硬件B上有B的实现方法,但是BSP提供给上层(操作系统与应用程序)的接口就是BSP_LEB_Init
  • 操作系统与应用程序根本不关心HAL层的具体实现,他们只关心HAL层提供的接口能够完成什么样的功能:只要结果,不管过程

嵌入式系统的编程模式

前后台编程模式

温度采集程序设计:

  1. 温度的采集,每个1s;
  2. 温度显示在数码管上;
  3. 可以通过键盘设置温度的上/下限;
  4. 温度超过上/下限,声光报警
int flag1s		= 0;
int flag20ms	= 0;
int flag10ms	= 0;
int flagAlarm	= 0;

void GetTemperatrue() {} // 采集温度
void DispTemperatrue() {}// 显示温度
void ReadKey() {}		 // 读取按键
void SendAlarm() {}		 // 报警处理

int main(void) {
	while (1) {
		if (flag1s == 1)
			GetTemperatrue(); // 每隔1s采集温度
		if (flag20ms == 1) 
			DispTemperatrue();// 每隔20ms将温度显示在数码管上
		if (flag10ms == 1)
			ReadKey();		  // 每隔10ms就检测按键是否被按下
		if (flagAlarm == 0)
			SendAlarm();	  // 温度超过上/下限,产生报警
	}
	return 0;
}

01. 嵌入式系统概要_第12张图片

  • 用户编程
    – 定义标志变量
    – 编写定时中断服务程序
    – 判断标志变量并清除

基于RTOS的编程模式

01. 嵌入式系统概要_第13张图片

void GetTemperatrue(void) {} // 采集温度
void DispTemperatrue(void) {}// 显示温度
void ReadKey(void) {}		 // 读取按键
void SendAlarm(void) {}		 // 报警处理

// 温度采集任务
void Task_GetTemperatrue(void) {
	while (1) {
		GetTemperatrue();
		SendEventFlag(); // 如果温度超过上/下限就发送报警事件
		OsDelay(1000); // 1000ms
	}
}

// 温度显示任务
void Task_DispTemperatrue(void) {
	while (1) {
		DispTemperatrue();
		OsDelay(20); // 20ms
	}
}

//按键读取任务
void Task_ReadKey(void) {
	while (1) {
		ReadKey();
		OsDelay(10); // 10ms
	}
}

// 声光报警任务
void Task_SendAlarm() {
	while (1) {
		WaitEventFlag(); // 等待超过上/下限报警
		SendAlarm(); // 程序到达这里说明温度超过了上/下限
	}
}

01. 嵌入式系统概要_第14张图片

  • 使用RTOS提供的接口函数,用户不用编写定时中断程序与定义标志变量

几种常用的RTOS

FreeRTOS

  • 实时内核,提供完整功能
  • 开源免费
  • 稳定性强、市场占有率高
  • 开发文档完善,有大量的参考实例

μC/OS II

  • 实时操作系统
  • 闭源收费
  • 稳定性强
  • 开发文档完善,有大量的参考实例

RTX

  • 实时内核
  • 开源免费
  • 偏向物联网应用
  • 开发文档较少
  • ARM推出的嵌入式操作系统的统一接口,便于用户在不同操作系统之间的程序移植:RTX封装为CMSIS-RTOS

RT-Thread

  • 实时操作系统
  • 开源免费
  • 偏向物联网应用
  • 国产系统,开发文档丰富,社区活跃

微控制器的程序开发方式(STM32为例)

寄存器开发

优点

  • 从细节上更加清晰的了解和掌握STM32的架构、原理
  • 程序代码简练、短小,执行效率高

缺点

  • STM32外设多,每个外设对应多个寄存器,需要用户了解每个寄存器的功能以及寄存器中每一位的定义
  • 程序后期维护、移植会相对困难

开发要求

  • 熟悉所有外设的初始化设置流程,读写方法
  • 熟悉所涉及寄存器的功能以及每个寄存器的定义与作用

读写操作

  • 利用赋值语句设置或读取相关寄存器的值

固件库开发

优点

  • 对硬件的理解要求相对较低,会调用函数就会写程序,容易上手
  • 程序代码容错性好,后期维护相对简单

缺点

  • 程序冗余较多,代码量大,运行速度相对会有影响,但是现在的嵌入式处理器的速度越来越快,机会没啥影响

开发要求

  • 学习STM32的固件库官方手册和范例程序
  • 掌握固件库接口函数的功能与调用方法

读写操作

  • 通过函数调用来设置或去读相关寄存器的值

寄存器开发 vs 固件库开发

// 设置引脚PA5输出高电平

// 寄存器开发
GPIOA->BSRR |= 0x00000020;

// 固件库开发
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);

你可能感兴趣的:(STM32)