无标题文章

姓名:朱硕雅

学号:14020120008

转载自http://www.hw100k.com/forum.php?mod=viewthread&tid=3437&extra= 有修改

【嵌牛导读】:公司里做项目,嵌入式系统大大小小,到处都是。对API封装有了整体把握,有利于提高自身的编码质量。

【嵌牛鼻子】:嵌入式,封装接口

【嵌牛提问】:封装驱动或者抽象API的前期分析方法是什么?API的命名规则是什么?实现API的时候需要注意的地方?

【嵌牛正文】:

使用对象分析

首先强调一点,封装API是一个复杂性和综合性都较强的工作,不是一蹴而就。可能一些人会说,这有啥复杂的,不就是把功能包装一下,加几个参数完事。其实不然,一组API,应该能应对各种使用情况,应该是安全、高效、易使用的,也应该有统一的标准。

一个基本原则是处在使用者的角度出发,结合自身的特点,来分析这些问题。在对一个驱动或者某些功能封装API的时候,应该先做丰富的调查和举例,然后才开始后续工作。调查从功能本身出发,向你的下游(提供者)和上游(使用者)拓展,归纳出使用方法、使用方式和限制。

第一步是需要搞清楚你能使用的资源,即你的提供者的提供有那些功能和数据;

第二步是对你的调用者进行分析,他们的常用使用方法、使用步骤,以及是否有特殊需求等等;

第三步即对一二步的内容进行归纳总结,需要得出功能、用法和要求3个方面的内容。

功能:需要封装的接口能实现哪些功能,各个功能之间有何调用关系;用法:接口怎么使用,是同步还是异步调用,是否需要记录错误信息;要求:使用这组接口的要求,是否需要其他组件配合,是否有速率的限制等等。

所有这些调查工作最好是能把提供者和使用者召集起来一起开会讨论,他们各自表述自己的功能和需求。但是这种情况比较难以实现,那么你至少应该把归纳出来的情况让有经验的人士来review。

完成这些工作后,应该对要定义的API有了初步的概念,即应该定义哪些接口,接口间的调用关系等等。如果有机会porting,那你是幸运的。当然也要注意修改不合理的地方。

抽象接口

抽象接口要有统一的标准,要保证一组API只做一类工作。一般来说,每组API均有共性,是有章可循的。这里介绍一种从功能角度来分类的抽象接口框架,包括:资源管理、状态控制和数据传输。

资源管理,一般来说这类接口主要是完成入口和出口的资源分配和管理,比如:入口的工作,会创建对象,初始化变量,申请资源,句柄注册等;出口的工作会有对象删除,资源回收,句柄删除等,所以这一类接口可以用以下的关键字来表述:initialize/uninitialized, register/ unregister,open/close等。

状态控制,一般用于控制进程和状态维护。常用:start、stop、suspend、resume、sleep等。

数据传输:get/set data,send/receive data,get/set status等。

这个框架能应对大部分设计。分析完设计对象的功能后,就可以按功能归入对应框架。还有一点不要忽略,就是抽象接口函数参数不能太多,因为过多的参数不仅会增加调用时间,浪费资源,同时还很不方便使用。接口函数还要避免值传递,对于小型嵌入式系统来说尤为重要。

API命名

这个涉及到code rule ,每个公司都有自己的规定,就不多说了。但是应该把握的基本思想是API名称意思明确,没有歧义,参数顺序合理,形参名称直观易懂。应该避免的是简单的命名如write/read,因为这不仅让使用者困惑,在多个接口的使用还容易产生冲突。C++中有namespace的区分,也要避免使用简单的命名来污染命名空间。

接口实装

写程序的环节,是攻城狮最喜欢的,因为这是相对简单和纯粹的事情。主要就是代码质量,关于代码质量的书籍很多,这里也不累述。提一些注意点:

参数合理性判断,以及对于非法值处理。

接口函数线程安全,以及接口的重入性。

使用的资源管理,申请的内存,打开的文件句柄,等都要正确释放。

异常处理。

接口函数尽量避免值传递。

是否越界。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,511评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,495评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,595评论 0 225
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,558评论 0 190
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,715评论 3 270
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,672评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,112评论 2 291
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,837评论 0 181
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,417评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,928评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,316评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,773评论 2 234
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,253评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,827评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,440评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,523评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,583评论 2 249

推荐阅读更多精彩内容

  • JAVA面试题 1、作用域public,private,protected,以及不写时的区别答:区别如下:作用域 ...
    JA尐白阅读 1,121评论 1 0
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,549评论 0 3
  • 1.要做一个尽可能流畅的ListView,你平时在工作中如何进行优化的? ①Item布局,层级越少越好,使用hie...
    fozero阅读 631评论 0 0
  • 见证过从南到北的爱情,陪伴过从昼到夜的朋友,从远方归来的这个夏季,依然为朋友经历的一切同喜同忧。盛夏的夜晚,我们四...
    馨雪清菡阅读 2,134评论 2 8
  • 你太久没有找过我,我觉得你是真的快要忘了我了。 我不喜欢叫你老师,因为我打小就讨厌老师。我喜欢连名带姓的叫你。你心...
    ottmann阅读 234评论 0 1