首页 理论教育 语法约定:事件处理、宏定义与函数命名规范

语法约定:事件处理、宏定义与函数命名规范

时间:2023-06-28 理论教育 版权反馈
【摘要】:事件处理命令名称应该和产生该事件的起因命令相关。.nc文件中的宏定义#define必须用在模块或者配置关键字之后,以便明确限定其使用范围。即许多在TinyOS 1.x中用于特定硬件的宏在TinyOS 2.x中被nesC的组件所取代。函数名应该小写,词之间以下划线分割。

语法约定:事件处理、宏定义与函数命名规范

1.nesC约定

所有的nesC文件名都必须以.nc扩展名结束,nesC编译器要求文件名和接口或组件名匹配。目录名使用小写字母。接口或者组件名以大写字母开头的混合形式。所有的组件都带有扩展名“C”。所有的私有组件必须带有扩展名“P”。接口不能以“C”或“P”结尾。如果接口和组件相关,推荐使用除了扩展名其他都相同的命名。命令、事件、任务和函数应该使用小写字符开头的混合形式。事件处理命令名称应该和产生该事件的起因命令相关。推荐命名为xxxDone。常量应该全部使用大写形式,词语间使用“_”(下划线连接符)连接。推荐使用枚举类型定义整型常量,而不是使用#define方式。通用组件的参数类型同C类型,全部使用小写字符,以“_t”结束。模块变量应该使用以小写字符开始的混合形式。

每一个包名都使用其组件接口和全局C名称前缀。这个前缀可能在多个包中保持一致。比如所有的HPL命名都以Hpl开头(这是一个公用前缀示例)。具体芯片HAL组件和接口命名以芯片名字开头,如Atm128代表ATmega128。所有Mate虚拟机相关的文件都使用Mate前缀。

TinyOS的核心(例如timer组件、Init接口)命名不使用前缀。某些包可能使用多个前缀,比如ATmega128芯片(使用Atm128前缀)包中的硬件表象层组件使用Hpl前缀。

2.预处理

不要使用nesC风格的include语句。它不能正确地处理宏,应使用#include代替。.nc文件中的宏定义#define必须用在模块或者配置关键字之后,以便明确限定其使用范围。被多个.nc文件使用的宏定义应该在头文件中定义,并使用#include包含进去。尽量少使用宏,只有在不能使用enum和inline的情况下才使用#define。

unique()参数应该使用#define字符串常量,这样可以减少编译器无法捕获的编译错误。所有的C文件都有一个.h(头文件)或者一个.c(源文件)扩展名。和某个相关组件的文件名也应该保持一致。包中的文件名应该包含其包名前缀(如果有)。不属于任何组件的文件名使用小写形式。

C不提供任何形式的名称保护,如果包使用前缀,那么所有的类型、标识符、函数、变量、常量和宏都应该保持一致,这样自然使最小化的C代码在nesC文件之外。即许多在TinyOS 1.x中用于特定硬件的宏在TinyOS 2.x中被nesC的组件所取代。

C类型名(用typedef重定义的)应该使用小写形式,词语之间使用下划线分割,并以“_t”结束。.C标识符 名(如结构体、联合、枚举)应该用小写形式。这些类型应该提供一个typedef类型定义。

C中无类型指针(如参数中使用的),应该如同其他类型命名,但是以“_ptr_t”结束。函数名应该小写,词之间以下划线分割。宏函数应该使用大写形式,词间使用下划线连接。不推荐使用宏函数,建议使用inline函数。常量应该全部大写,词间用下划线。不推荐使用#define定义整型常量,建议使用枚举类型。全局变量应该使用混合形式,以小写字符开始。

3.编程风格提示

●尽量避免在命令中通知事件。

●任务应尽量短。

●尽量让代码同步。(www.xing528.com)

●尽量减少使用原子操作次数,且原子操作应尽量短。在原子操作中调用其他组件函数时应小心。

●任何时刻应只有一个组件修改指针数据。理想的情况是,在任何时候应该只有一个组件来存储指针变量。

●在组件中为所有的状态分配存储空间。如果一个应用程序需要动态的存储空间,应在组件中对其进行封装,并设法限制使用者的集合。

●应通过enum来保存存储空间,而不是把变量限制为整常数。

●在一个软件抽象的配件中,应把Init接口和MainC连接起来。这会减轻编程器连接Init的负担,在启动节点时消除不必要的工作,减少由于忘记连接带来的错误。

●如果组件是一个独立的可用抽象,那它的名称应该以C结尾。如果它是一个抽象的内部私有组件,名称应该以P结尾。永远不要从组件的外部连接一个以P结尾的组件。

●要多使用关键词as。

●不要忽略结合警告(combine warning)。

●如果函数的某个参数是一些常数中的一个,应考虑把这个函数定义为许多分开的函数来避免出现错误。如果接口函数的某个参数是一个很大范围内的常数,应考虑使用参数化的接口来节约代码空间。

●如果组件依赖于“unique”,那么就需要在头文件中#define一个字符串来避免错误。

●在任何时候都不要使用“packed”标志。

●在定义消息格式的时候要使用与平台无关的数据类型。

●如果不得不对一个与平台无关的数据类型进行有效的运算或者多次访问,那么应考虑把它复制到本地数据变量中。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈