您的位置 首页 数字

嵌入式编程中函数回来类你遇到过问题吗

嵌入式编程中函数返回类你遇到过问题吗-返回数据就是把传入参数做了某一个运算后得到的结果;返回状态结果,主要指示函数是否正确执行。

在这几天,看到了之前常常重视的一个论坛上解说了函数回来类型规划的一些问题,我觉得说的很透彻,这儿共享给我们!

不知从什么时分起,对函数回来值,有一种下意识的知道:“0”是成功、非“0”表明失利。

先讲个故事,便是项目移植时的一段小插曲——

近期作业,运用一款新的芯片进行开发。移植进程中需调用官方的函数库接口,接口有uint32_t类型的回来值。根据手册的阐明,函数回来值“0”表明成功,“-1”表明失利。这儿的回来值比较简略,仅有成功、失利两种,一般选用“if(!ret){成功}else{失利}”判别。就这样,移植进程中,该芯片函数库绝大部分的接口回来值都是这两种,处理成果时图省劲也就把“if(!ret){成功}else{失利}”复制粘贴了。

意外呈现了,当我调用库的“比对”函数接口时成果一向过错,回来值总是“1”,也便是“真”的逻辑,所以上层接口一向对使用层向用户报错。翻阅手册检查了接口的输入参数,置疑其他接口处理的数据过错,又检查该接口之前的其他被调用接口。可偏偏,手册里对本接口描绘的回来值阐明,因排版而放在下一页,你怎么都无法想到,这儿的函数回来值,居然是成功时回来“1”,失利回来“0”!

回想起检查这一整个履行流程时,简直花了一正午时刻,万万没想到居然疏忽这个细节,真是“踏破铁鞋无觅处,得来全不费工夫”!

总而言之,芯片厂商供给的函数库接口,回来值规划的过于简略,也没到达彻底的共同标准。说到底,只能怪自己对这么重要的细节没有留心到位。作为开发者,要多从本身找原因,保证自己的每一个环节不出反常。即便面临多么扎手的代码,你都能够应对自若。

此事对自己的经验只能是不要疏忽细节。但有时分本能够做好的工作,为什么纷歧口气做到位呢!关于函数回来值的界说,其实能够做到相对标准一些,共同起来,对自己对他人都是有协助的。

回来值能够有两种,一个是函数履行完毕得到的数据,还有便是函数履行完毕的状况成果。

回来数据便是把传入参数做了某一个运算后得到的成果;回来状况成果,首要指示函数是否正确履行。

回来数据,这种回来值不能表明是否正确履行,只能认为,有回来值了便是正确履行了。所以这样的函数履行时,不应有参数正确性判别,不论传什么样的参数应该都能履行。

最简略的比便利是一个求和运算函数:

uint16_t func_sum(uint8_t val1, uint8_tval2)

{

Return (val1+val2);

}

这样的回来值便是函数履行后得到的数据成果。这个没有必要做太多的评论。

回来状况成果,比方在上文说到的芯片官方的库接口,运用“0”和“-1”表明履行后成功或失利的成果。

在《嵌入式硬件通讯接口-运用RingBuffer处理数据(二)具体规划进程》一文中的“读一个字节”、“读多个字节”和后续的其他函数,履行完毕后回来的状况成果有成功和不成功的其他多个状况,这些个状况都是rb_ret_t枚举类型里的成员。

嵌入式编程中函数回来类你遇到过问题吗

比方写多字节接口,假如履行失利,或许是参数过错、空间缺乏,这时十分有必要对不同的过错回来不同的状况成果,因而回来码不再是“0”和“-1”了,而是零和非零的其他值。

嵌入式编程中函数回来类你遇到过问题吗

怎么规划回来状况,也是有考究的。假如由于一时的激动,一闭眼一跺脚就把回来状况码给定下来,而且同一层、同一类的接口,状况成果界说的还纷歧致,那就太随便了,这样的接口封装出来,假如没有逐一对接口阐明,指不定哪天蒙了自己也坑到他人。

界说回来状况成果,能够规划为:

布尔型(bool)的真、假;

枚举类型的各种状况码;

布尔型,在C++中运用,只需真、假两个状况,假如在根据C的嵌入式开发里运用,还需要从头界说。

类似于STM32的V3.5.0标准库里的三个枚举界说,每个枚举都只界说了两种状况,也可称之为布尔类型。

嵌入式编程中函数回来类你遇到过问题吗

在规划自己的体系时,也能够直接运用这种枚举来界说函数回来的状况成果。

可是这儿的枚举中,成员的值“0”表明失利、非“0”表明成功。这种方法界说的,失利只需一个状况,对后续的使用扩展也是个费事,比方不同的失利原因,怎么表现到不同的回来状况成果,因而再考虑引进枚举类型的各种状况码。

“0”表明成功、非“0”表明失利,这个思想也契合计算机“0”为假、非“0”为真的逻辑特色。在程序履行时,成功了便是成功了,没必要去考虑为什么履行成功了,可是失利的时分,总是存在问题导致失利,这时分就需要对失利做剖析,那么失利原因许多,对计算机而言,逻辑“真”也许多,1、2、3、…、99、…、N只需不是“0”,便对错“0”的逻辑“真”。

枚举类型的各种状况码,首要是为了处理,在呈现不同的失利原因时,回来过错码,能够便利上层使用对参数进行检查,测验调整参数从头调用接口再次履行;或许对过错码别离处理后展现在用户交互接口,提示用户履行某一功用时回来的状况。

可见在C开发里,同样是枚举类型的回来值,为什么不扩展枚举的成员来表明杂乱多样的履行成果呢。

一起在编写函数时,运用枚举类型界说函数的回来类型,对开发而言,检查枚举类型中的成员表,可快速知道,函数的履行成果或许会有什么样的状况,至少有个预期的判别。

这样一来就能够为每个模块、每个层封装好的函数,规划对应的回来类型。

总结,说到底这些都只是开发者日常的编程习气算了,或许接口规划的标准。回来值的类型界说,谈不上肯定的对和错,对错只需在程序履行的时分,判别的根据挑选。可是一个好的编码标准、共同的对照表,这对代码的保护和迭代,都有十分要害的效果!

来历:我国电子网

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/88287.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部