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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式设备的板级硬件接口管理 -> 正文阅读

[嵌入式]嵌入式设备的板级硬件接口管理

我们开发嵌入式设备时,每个板子的硬件配置都不同。

?

1,? ?按键、LED、高低电平、外部中断等使用不同的GPIO。
2,UART、I2C、SPI等外设使用的某个片上资源,比如电源管理芯片使用了I2C-1,一个传感器使用了I2C-2.
3,不同的功能或操作模式,还需要对MCU或MPU的片上资源进行不同的配置,比如这个GPIO是默认上拉,低电平中断,另一个SPI设备工作频率50MHz,使用了某个GPIO做片选信号。

?

这些硬件的配置根据硬件设计而来,软件需要根据硬件设计来进行系统的配置,才能使系统正常工作。
其实在一般的系统设计中,硬件功能和软件功能之间,会有一个对接接口,我们叫做hal层,hardware abstract layer。

?

在简单的嵌入式项目编程中,我们可以定义一个board_projectname.h和board_projectname.c文件,也可以自己取合适的名字。
然后将每个产品的板级的一些信息定义和接口,比如GPIO的定义,片上外设的使用情况,都放在这个头文件里,其他模块可以引用这些信息。而c文件里可以放一些板级硬件相关实现。
这呢就是个初级的使用方式,首先的缺点是不能复用,每多个项目,所有东西要重新定义一遍,费时费力。
当然也可以把里面一些内容拆分一下,分成多个文件,方便组合,达到复用的目的。
但还是有问题,就是对某个API没法覆盖其实现,只有面向对象语言才能有函数覆盖功能。
这样其中一些接口相同实现不同的api就不能共存,导致管理起来麻烦。

?

解决的一个办法,是利用C++的继承和多态,来解决复用和方便使用的问题。
基类使用某个实现,子类能够覆盖这个实现来达到自己定制的行为。
而通过多态,可以同一套代码执行,仅修改子类实现即可。

?

举例来说,在我们的Product产品中,顶一个一个Hardware类,用来管理相关的硬件功能。

class Hardware
{
public:
? ? Hardware(){};
? ? virtual ~Hardware(){};
? ? virtual void PowerUpBTModule(){
?? ?? ? // some default action
? ? };
}

class HarwareNFC : public Hardware
{
public:
? ? HarwareNFC(){};
????virtual ~HarwareNFC(){};
????virtual void PowerUpBTModule() {
?? ?? ? // do something?
?? ?};
}

class HarwareRFID : public Hardware
{
public:
? ? HarwareRFID(){};
????virtual ~HarwareRFID(){};
????virtual void PowerUpBTModule() {
????????// do something
????};
}

class Product {
public:
? ? Product(Hardware *hal):localHAL(hal){};
? ? virtual ~Product(){};
? ? Hardware *localHAL;
}

int main(int argc, char** argv)
{
? ? Product * myPro;
?? ?Hardware * hal;

? ? if(argc >= 2)
? ? {
?? ??? ?hal = new HardwareNFC();
?? ?}
? ? else
? ? {
?? ??? ?hal = new HardwareRFID();
?? ?}
? ??
? ? myPro = new Product(hal);
? ??myPro->localHAL->PowerUpBTModule();
}

?

举一反三的话,使用的Product类,也是可以使用多态。
不同的项目会有自己定制的Product类,每个Product类有不同的实现~~
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-07 12:15:04  更:2021-08-07 12:15:57 
 
开发: 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年11日历 -2024/11/25 20:21:58-

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