当前位置:首页 > 嵌入式 > 嵌入式大杂烩
[导读]关注「嵌入式大杂烩」,选择「星标公众号」一起进步!大家好,我是ZhengN。本次给大家分享一篇关于数据抽象的小短文:在往期文章:什么是不完全类型?中,我们清楚地知道了数据抽象的好处。这一篇再一起来看一个简单的小技巧。实际项目中,常常会有多个模块协同工作,各个模块之间会相互调用。两...

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!

大家好,我是ZhengN。本次给大家分享一篇关于数据抽象的小短文:

在往期文章:什么是不完全类型?中,我们清楚地知道了数据抽象的好处。

这一篇再一起来看一个简单的小技巧。

实际项目中,常常会有多个模块协同工作,各个模块之间会相互调用。

两种声明方法:

一种是在把对外提供的接口在本模块头文件中声明,其它模块需要调用时包含这个头文件就可以。另一种是调用者在调用之前使用extern进行声明。

我比较倾向于第一种方法,严格把只在本模块文件中使用的函数使用static声明,供外部使用的函数在头文件里声明,调用者直接包含头文件就可以调用。而不用自己使用extern进行声明,extern的方法我常常会临时使用一下。

特别的,有时候需要把本模块编译为动态库给他人使用,这时候更是要多花功夫在头文件上,把供外部使用的函数放在头文件中。因为最终提供的是动态库文件与头文件,别人看不到你的源码。

下面我们先简单看看数据抽象的概念:

「数据抽象」是一种仅向用户暴露接口而把具体的实现细节隐藏起来的机制。一个简单的C 例子如:

「test.cpp:」

#include 

using namespace std;
 
class test
{

   public:
      // 构造函数
      test(int x = 0)
      {
        a = x;
      }
      // 对外的接口
      void set_a(int x)
      
{
          a = x;
      }
      // 对外的接口
      int get_a()
      
{
          return a;
      };
   private:
      // 对外隐藏的数据
      int a;
};

int main(void)
{
   test a;
   
   a.set_a(100);
   cout << "a = " << a.get_a() << endl;
   return 0;
}
在C语言中,上面我们提到了使用extern的方法声明函数。同样的,对于全局变量,也有使用extern的方法来声明。如:

「a.c:」

int a = 0;
「b.c:」

extern int a;
int b = a;
a = 100;
我们在a.c中定义了一个全局变量a,在b.c中使用变量a之前前,先用extern对a进行声明。

对于这个小例子,有更好的方法,即面向对象数据抽象的思想:

「a.c:」

int a = 0;
int get_a(void)
{
 return a;
}

void set_a(int x)
{
 a = x;
}
「a.h:」

int get_a(void);
void set_a(int x);
「b.c:」

int b = get_a();
set_a(100);
这样我们在b.c中就不用直接操作变量a,而是通过a提供的函数接口来操作。这样,b模块作为调用者,只要遵守了a模块要求调用的函数,哪怕后续a模块里面的内容有修改时,b模块可以不用修改就可以正常使用。这个小例子只是简单介绍了这种小技巧。

在实际项目中的使用场景可能是这样的:假设a模块是对传感器的处理,b模块是传感器数据使用者,后面换相同类型传感器的时候,a模块负责进行适配,b模块作为调用者,不用担心换传感器而需要做大改动。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

随着摩尔斯微电子量产级Wi-Fi HaLow开发规模在全球范围扩展,美国工业嵌入式无线网络系统领域的领导者Gateworks获选成为首家合作伙伴

关键字: 嵌入式 无线网络 Wi-Fi

行业领先的产品组合规模在上季度进一步扩大,新增产品超过 387,000 种

关键字: 物联网 嵌入式 分立式电源

Microchip基于CLB的PIC®单片机在单一器件中结合了可编程逻辑与嵌入式控制,有助于降低延迟、成本和设计复杂度

关键字: 可编程逻辑 单片机 嵌入式

在嵌入式系统开发中,传感器数据采集与处理是核心环节之一。然而,受环境干扰、硬件特性等因素影响,采集到的数据往往混杂着噪声,这些噪声会干扰系统对真实信号的判断,甚至引发误操作。软件滤波算法作为一种无需额外硬件投入的信号处理...

关键字: 嵌入式 传感器

搭载英特尔酷睿 3系列处理器的全新 COM Express 模块,助力实现高性价比与高能效的嵌入式计算应用

关键字: 边缘AI 处理器 嵌入式

全新合作将支持工程师在 MATLAB 和 PyTorch 中构建 AI 模型,将其集成到系统仿真中,并部署到嵌入式设备

关键字: 嵌入式 AI FPGA

近日,全球知名分析与咨询机构Omdia发布最新研究报告,意法半导体(ST)凭借STM32系列产品的硬核实力,连续第五年蝉联全球通用微控制器(GP MCU)市场第一供应商。2025年,我们进一步扩大领跑优势,市场份额攀升至...

关键字: 微控制器 嵌入式 供应链

当下,中国家庭的厨房早已不再只是简单的烹饪区,更慢慢成为品质生活的核心空间。有限的空间、多元的烹饪需求与对效率的追求,催生了集成化厨电的持续升级。市场数据显示,具备微波功能的蒸烤一体机近年来保持高速增长,成为嵌入式厨电领...

关键字: 嵌入式 厨电

在嵌入式系统开发中,硬件定时器是实现精准定时、事件触发、频率测量等功能的核心外设,而定时器中断事件标志则是衔接硬件触发与软件处理的关键桥梁。当定时器满足预设触发条件(如计数溢出、比较匹配、捕获完成)时,硬件会自动置位对应...

关键字: 定时器 中断 嵌入式

在中国家庭对健康饮水与品质生活持续升级的背景下,嵌入式净饮水产品,正逐步从功能型单品迈向系统化解决方案。近日, 北京奥维云网数据显示,西门子「水玲珑」系列嵌饮机已连续两年获得中国市场销量第一。这一成绩不仅体现了品牌在高端...

关键字: 嵌饮机 触控屏 嵌入式
关闭