| |
|
开发:
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个流派:
所以,整个架构的核心是对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例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |