IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> M-Arch(1)架构设计 -> 正文阅读

[嵌入式]M-Arch(1)架构设计

说明

M-Arch的主要目标是实现同厂家不同M系列单片机之间的兼容,以及不同厂家M系列单片机之间的兼容,方便业务开发(尤其是更换MCU的场景)的软件框架。

所谓不同M系列,是指Cortex M0,M3,M4,M7等系列;所谓不同厂家,是指STM(意法半导体),GD(兆易创新),MM(灵动微),新唐等厂家,具体大家可以上网去查查。

就难度而言,很明显,不同厂家之间兼容性难度要高于同厂家不同M系列之间的差异,如果能够解决掉不同厂家之间的兼容性,同厂家不同M系列之间的兼容性是很容易搞定的。

花了点时间研究了下目前业界的M系列,厂家提供的封装库可分为2个流派:

  • STM派,硬件工程师做派,其特点是库代码充分体现了硬件思维,命名可读性差,需要自己封装大段的代码,资源的下标从1开始,例如:USART1,USART2,...。其代表就是STM,以及一众的国产小弟。

  • 非STM派,软件工程师做派,其特点是库代码充分体现了软件思维,封装的比较彻底,调用简单,资源的下标从0开始,例如:USART0,USART1,...。其代表是国内的兆易创新,其目前存在的问题是不同发布版本的兼容性比较差,早期版本的接口有些全改了,另外,提供的例程bug也比较多。

所以,整个架构的核心是对IO的封装,屏蔽不同厂家提供API的差异性,同时提供灵活抽象的接口,方便业务层使用。

本架构目前只提供了简单的定时器调度,不涉及嵌入式OS(指μ-Cos,RT-thread等)。

整体架构层次

整个架构的层次比较清晰,如下图所示:

对每一层的说明如下:

最底下一层是厂家提供库,包括驱动接口(.h,.c),启动文件(.s)以及必要的core库(core_cm3,core_cm4等);一般而言,这一层去厂家的官网上下载即可。

IO封装层的目标是屏蔽各厂家,不同M系列之间的差异性,对外提供统一的封装接口,保持不变,例如:GPIO读写,串口读写,CAN口读写等等。

IO抽象层的目标是屏蔽底层接口特性,方便业务层调用,本质上这一层属于业务层,例如:控制继电器动作(实际调用的是GPIO操作)。

业务层就没啥好说的了。

核心软件逻辑

这里主要讲一下IO封装层,其核心的软件设计思路如下图所示:

其中,IO.h是对外的调用头文件,其他模块只需要包含这一个头文件就行了。

IO.h中包含了各个资源的头文件(例如:io_system.h,io_gpio.h等,这些头文件中通过宏定义来体现差异性),它们的具体实现通过不同的文件来体现(例如:stm32的io_system.c就放在stm文件夹下,gd32的io_system.c就放在gd文件夹下面)。

需要说明的是MCU之间的差异性都是体现在编译时,而不是运行时,所以才可以通过宏(编译配置)以及文件组织来解决差异性。

宏的Keil编译配置如下:

目标文件的Keil配置如下(区分app和boot):

IO的代码组织如下:

剩下的事情就是定义IO对外的接口,以及对应的代码实现了。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:36:26  更:2021-08-31 15:38:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 8:29:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计