浅谈C语言嵌入式软件的设计规范

(整期优先)网络出版时间:2023-07-28
/ 2

浅谈C语言嵌入式软件的设计规范

陈耀飞

江南机电设计研究所 贵州贵阳 550000

摘要:C语言作为一种面向过程的、抽象化的通用程序设计语言,广泛用于底层开发。在各航空航天院所的某些高实时性嵌入式系统中占有着重要地位。嵌入式软件工程师个人的编程习惯差异大、思路杂,易造成诸多程序问题。为保证嵌入式软件的产品质量,以及后期软件的维护升级、重用测评等,本文总结归纳了嵌入式软件中C语言的函数设计规范。

关键词:C语言;函数;设计规范

嵌入式系统已广泛应用于各行各业,在航空航天领域也发挥着越来越重要的作用。软件代码相当于嵌入式系统的大脑,控制着整个系统工作运转。软件代码质量的好坏直接决定了系统的工作质量,而清晰、良好的编码规范是提高代码质量的最有效手段之一。如何编写规范的嵌入式软件代码至关重要。

1 编码规范的意义

对编程代码的规范要求有诸多现实意义:

1)良好的编码规范可以降低软件的维护成本;

2)良好的编码规范可以提高软件的可读性,让开发人员尽可能快而彻底的理解新代码;

3)良好的编码标准可以提高软件开发的效率;

4)长期规范的编码还可以让开发人员养成良好的编码习惯,锻炼更严谨的逻辑思维。

2 函数的设计规范

一个庞大的程序通常会由很多子程序构成,每一个子程序都有其特定的功能。通常在程序设计中,会将一些常用的功能模块编写成函数。同一个函数可以被一个或多个函数调用任意多次。以下列举了几项软件工程师们比较容易忽略又特别重要的规范要点:

2.1函数应做到功能单一、结构简单

为了实现积木式的开发模式,应该尽量实现函数的功能单一或功能集中,结构简单。这样做不仅可以使函数的可读性更强,而且可以使函数的测试和维护变得简单。所以通常建议函数的长度不超过300行,且函数接口应该尽量设计精简。

2.2防止函数中产生随机内聚

函数的内聚是一个函数内部各代码之间相关联程度的度量,函数内部的各代码之间应该联系紧密、功能集中,即是最理想的内聚。如果函数中各代码之间联系松散,甚至代码之间的逻辑不相关,将导致随机内聚的产生。随机内聚通常会使函数在迭代的过程中陷入困难,所以通常建议将不相关的代码剥离,构成新的函数,从而减少函数中随机内聚的产生。例如矩形的长、宽与点的坐标没有任何关系,写在一个函数内则会造成随机内聚,如图1所示。

1.JPG

图1 防止函数中产生随机内聚

2.3应为简单功能编写函数

软件工程师为了寻求方便,通常会将非常简单的功能用一两行代码嵌入到上级函数中,这样做虽然缩短了程序的开发时间,但不利于函数可读性,从而不便于维护和测试。应当为简单功能编写函数,在函数的命名上,将其功能显式化,可大大提高函数的可读性,并且便于维护和测试。

2.4归并功能小调用少的函数

虽然建议将小功能编写为单独的函数, 但是如果出现上级函数调用(扇入)次数极低的情况,应考虑归并到上级函数中。功能小且扇入过低的函数如果单独存在,会使函数数量增加,使程序过于庞大,不利于维护。所以功能小且扇入过低的函数不建议单独存在。

2.5输入变量应进行必要的合法性检查

函数输入变量的方式主要有两种:一种是参数输入,另一种是非参数输入,即全局变量输入。函数应该在使用输入变量之前执行必要的合法性检查,能够有效避免出错。建议增加异常处理措施可使程序更加可控。

2.6防止将函数的参数作为工作变量

将函数的参数作为工作变量,可能会错误更改参数内容,这可能会很危险。因此,最好先用局部变量替换必须更改的参数,然后将局部变量的内容赋给该参数。

2.7函数的调用关系要考虑高扇入合理扇出

函数的扇入是指直接调用该函数的上级函数的个数,扇入大表示函数的复用程度高。函数的扇出是指该函数直接调用的下级函数的个数,扇出大表示函数的功能比较复杂,需要调用过多的下级函数。一般情况下,软件工程师通常追求函数的高扇入,同时合理扇出[2]。因为扇入越高,使用此函数的上级函数越多,说明函数使用效率高,但不能单纯追求高扇入而忽略了函数的独立性。而扇出越高表明函数越复杂,同时函数越不稳定。函数的稳定性遵循木桶原理,扇出越高表明组成木桶的木板越多,函数的稳定性越差。因为任何一个调用的函数出问题了,这个函数也就会出问题。一般建议函数的合理扇出数量一般为3~5个。

2.8避免省略“void”关键字

在C 语言中,“void”被翻译为“无类型”,在函数中的用法有两种:一是当函数不需要返回值时,在函数前使用void限定,例如void func(int a,char *b);二是当函数不接受参数时, 在括号里使用void限定, 例如int func(void)。“void”在不影响程序编译的情况下是可以省略的,但为了规范起见,建议不要省略“void”,因为有些编译器比(如ST芯片的编译器)必须要用该关键字,否则轻则出现编译警告,重则编译出错。所以,为了使软件代码具有较高的维护性和移植性,须避免省略“void”关键字。

3

函数优化时需遵循的原则

基于以上列举的规范性要素,对已经写好的代码和处于迭代期间的代码,应该进行规范的优化。通过优化可以使软件合作编程更加轻松,使代码维护性增强,使工程师们工作更加严谨,降低函数间的耦合度,并提高函数的独立性以及代码可读性、效率和可维护性。优化函数结构时,应遵守以下原则:1)函数的功能应当单一;2)函数的规模不应太大;3)函数的接口应当简单;4)函数的扇入尽量高;5)函数的扇出不能太高;6)函数的内聚性尽量提高[3-4]

4 结论

软件程序由无数的函数构成,提高函数的规范性是提高整个软件代码规范性的重要一环。对于嵌入式软件而言,无论是底层的驱动代码还是上层逻辑代码,规范性都能使软件合作编程更加轻松,使代码维护性增强,使工程师们工作更加严谨。好的编码规范是提高代码质量的最有效的手段之一。越早实现规范化编码的企业,也就越能够在市场竞争中处于优势。

参考文献

[1] 孙虎.C 语言编程中的主要问题探讨[J].南方农机,2019,50(7):125.

[2] 李宁.论C 语言中高质量代码编写的规范问题[J].电脑知识与技术,2015,11(35):53-54.

[3] 董高云,周庭梁.安全苛求系统下的嵌入式C语言程序调试技巧[J].铁路计算机应用,2014,23(6):62-64.

[4] 甄华.基于ARM嵌入式系统的C语言编程分析[J].哈尔滨职业技术学院学报,2015(1):148-149.