范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

小技巧数据抽象思想在嵌入式中的应用

  在往期文章:什么是不完全类型?中,我们清楚地知道了数据抽象的好处。
  这一篇再一起来看一个简单的小技巧。
  实际项目中,常常会有多个模块协同工作,各个模块之间会相互调用。
  两种声明方法:
  一种是在把对外提供的接口在本模块头文件中声明,其它模块需要调用时包含这个头文件就可以。另一种是调用者在调用之前使用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模块作为调用者,不用担心换传感器而需要做大改动。
  猜你喜欢:
  例说嵌入式实用知识之JSON数据
  STM32如何收发float类型数据?
  实用 | 如何远程登录开发板?
  手头上无LCD却又急着开发UI?LCD模拟器了解一下
  1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复1024,即可免费获取!

JAVA中for循环优化的思考一前言最近会使用到很多的数据处理,其中多出使用了for循环操作,于是思考了一下性能和优化相关的东西,遂有此文二循环的性能排序在之前的文章中已经对此作了简单的测试,链接for循环增强佩戴助听器久了,听力会变差吗?您好佩戴助听器久了,听力会变差吗?助听器调试适当,长期佩戴听觉功能会提升,听力会稳定,听力受损后比不戴助听器会减缓听力下降的速度。助听器是在残余听力的基础上增益合适的声音,让听损者华为收入是联想2倍,为何纳税几乎是联想的9倍?你还有没有公德心呐?纳税那么多高管年薪怎么办?人家也要生活的呀!联想作为中国著名的民族高科技企业,很早就与国际接轨,成为国际一流企业,旗下业务繁多,有电脑组装,金融实业,民生地产等在我国,最权威的官媒有哪些?原创人民日报是中央直属事业单位和中央的新闻机构新华社是隶属于国务院的正部级新闻通信机构负责囯家级新闻发布中央电视台国务院直属事业单位归中央宣传部领导故,这三家新闻机构是我国最权威的为什么杨元庆能个人贷款几十亿然后用来收购联想的股份?司马南已经说了,他用联想担保贷款,然后买联想。这两个环节的骚操作都触犯了刑法,构成犯罪。第一环他贷款时没有资格获取联想的信用担保,国有资产不能为个人贷款担保,这会让国有资产面临巨大中国有多少人玩比特币?感谢邀请。基于目前国家对比特币挖矿和交易的打击,即使是我在玩比特币等虚拟数字货币,我也不会说我也玩比特币等虚拟数字货币,所以,要统计中国目前有多少人玩比特币,这个统计结果真的有点难耳聋又耳鸣,配助听器有用吗?您好,助听器是一种辅听工具,并没有治疗耳鸣的作用。对耳鸣尚无非常有效的治疗手段。保持积极健康的心态,良好的作息时间,健康的体魄,长期坚持耳部穴位按摩,对耳鸣的缓解有一定效果。如果有国产手机大洗牌,华为之后谁将扛起领军大旗,和苹果掰一掰手腕?进入5G时代以后,整个手机行业迎来了大洗牌,曾经的王者三星,目前在国内已经成为其他,而国产之光华为,由于一些特殊的原因,只能生产4G手机,自研的麒麟芯片也无法生产,其中最大的受益者小姐姐入手OPPOReno7Pro直呼这是什么神仙颜色,背面实在太漂亮这是什么神仙颜色,背面实在太漂亮了,并且还不容易产生指纹。这个外观真的太绝了,无敌好看,直面是浅粉色,微微一侧便能看到不一样的颜色。这流畅的直角边,太好看了,就喜欢这种样式,太喜欢豆瓣下架怎么回事?豆瓣为什么下架原因揭秘昨日,针对被下架一事,豆瓣表示,经测试,在安卓9及以下系统版本,当用户切换到我tab时,对用户已经授权使用的手机设备信息,存在获取频次不合理的情况。因安卓9系统为2018年发布系统10款堪称黑科技的智能高效神器,重新定义什么叫效率10款堪称黑科技的智能高效神器,重新定义什么叫效率,不用安装还免费用!一智能高效工具1。智能抠图地址httpswww。6pian。cnkoutu。html对于大多数的普通人来说,使
急救包品牌Judy视觉形象设计Judy成立于2019年,并于今年推出,它是一款应急工具套件,其中包含您可能需要的自然灾害和家庭紧急情况所需的一切。今年早些时候,他们推出了由RedAntler设计的标识以及包装形食品杂货品牌YEMA视觉形象设计YEMA成立于2019年,是墨西哥一家食品杂货品牌,以优质且简单的食材,可持续的生产方式生产基本的日常用品,并以具有竞争力的价格出售。早些时间,他们公布了一款由Anagrama设计华为Mate20Pro降至退场价华为手机在余承东的带领之下,确实成长速度非常的快,已经超过了苹果成为世界第二大的智能手机厂商,但是在余承东的手上,华为手机也变得越来越加昂贵,很多人都觉得自己买不起华为最新的旗舰手夹缝中的小米,能否上演王者归来?双十一的热潮刚刚结束,与往年不同的是,在各大品牌都在忙着发喜报的时候,小米方面却出奇的安静,而各大平台自己公布的手机销量排行榜上也没有小米或者红米机型的影子。往回说2019一整年的华为Mate30Pro优缺点大PK作为华为年度旗舰,华为Mate30系列一发布就备受关注。作为第一批入手华为Mate30Pro的用户,在进行两天的深度体验以后,下面来说说华为Mate30Pro的优缺点。第一点优点,千元竟然可以得到这台手机,买到就是赚到手机的市场竞争早已形成了一片红海,尤其是制造门槛较低的千元机更是层出不穷,广泛的机型虽然为消费者提供了更丰富的选择,但是林林总总的机型总令人眼花缭乱,对于追求极致性价比的普通消费者后置五摄?最美华为P40渲染图来袭随着华为Mate30的正式发布,华为下一款即将发布的新旗舰手机将会是华为P40,近日发布的华为Mate30系列华为和P30系列都采用了后置四摄设计。那么下一款即将发布的旗舰机华为P从内到外的猛,千元机中的小钢炮一说到千元机,很多朋友都没有太好的印象,很多厂商都会在千元机上阉割很多的功能,让使用体验变得非常糟糕。然而在今年年初的时候,有一个新入局到国内市场的realme品牌,却在千元机档位为什么华为Mate30不用2K屏幕呢?如今的华为手机可以说是非常火的,许多人在购买手机的时候都会考虑购买一款华为手机。大家都知道去年的华为Mate20pro使用了一款2k的屏幕,要知道2k的屏幕比1080p的屏幕面看起降价后的骁龙855才是最值得入手的吗?在这个阶段最不缺少的可以说就是极致性价比的手机了吧!而消费者的选择性真的是越来越多,国产手机的工艺设计,还有用户体验也是越来越走向了同质化,因此只有明确自己对手机的需求才能更好的买2019年值得购买的四款手机随着这几年科技的快速发展,手机更新换代的频率简直太快了。很多人在买手机的时候都比较纠结,那么2019年最值得入手的几款手机有哪些呢?今天小编就来为大家盘点一下一OPPORenoAc