Cstyle的札记,Freertos内核详解,第5.0篇


    前面讨论了怎么把freertos移植到s3c2440上的话题,现在我看开始细细读一下freertos的代码。读代码之前先认识下代码规范,我们常见的类似的规范大多是一些命名规则,对齐什么的,比如驼峰命名法等等。但是freertos用了一个完全不同的规则,被称之为MISRA ( The Motor Industry Software Reliability Association),之所以使用这个规范我想除了历史原因和个人习惯之外,MISRA在实时系统尤其是汽车行业的应用可能是促使freertos选择的一个重要原因。
    MISRA规则详细的规范了,实时汽车系统软件编写的基本规范包括,C语言的版本标准C98这类,汇编语言的嵌入,编译器的选择,编译器的安全性评估,库的使用,第三方库的兼容性标准,标准c库的使用,以及系统代码的测试,覆盖,以及标准c语言里面的头文件,实现的c文件的使用,函数,变量的定义申明,命名规则,括号,空格等,以及一些对标准c的扩展,类似于结构体,共同体变量内存的分配,还有就是注释等等。总之一点就是尽可能让代码工作在我们设计的逻辑下,排斥人为编码错误和类似于编译工具的错误,编译环境的差异导致的错误等。有兴趣可以去他们官网查看这份标准。‘
    实际用在我们freertos里面的话,我们读代码的时候只要知道有这么回事,慢慢熟悉它的编码规范就好了,通过他里面的代码风格,我们可以获取到除了代码本身逻辑要表达的信息之外,还能通过类似命名规则等东西获取到额外的信息,比如说,该变量是全局的还是局部的,变量类型是什么类型等。     
使用typedef定义变量类型名,使用一些特定的前缀来定义变量名,函数名;
uint32_t  ul... ,表示unsigned long
uint16_t  us..,表示unsigned short
uint8_t    uc..表示unsigned int
非标准类型(Type_t) x..表示跟体系结构相关的基本类型,比如8位cpu就是表示8bit
unsigned Type_t  ux..表示无符号的Type_t
size_t     x...
枚举类型 x...
指针    p...
指向无符号16位整形的  pus...
unsignd char 只能用于处理字符,c..
char *只能用来指向字符串 pc...

函数:
私有函数 static 限制,prv..
API函数以其返回值作为前缀,如 void  v...
API函数以其存在于那个文件来作为其前缀,vTaskDelete  ,--返回值为void,被写在Task.c里面,功能是Delete

其他未尽,多少都包括,空格,tab,以及一些括号什么的风格,可以直接从代码里面看的出来,反正freertos的核心代码就只有几个文件,很容易就熟悉。不再表,之所以要在注意风格,最主要是方便阅读,做到一看别人的命名就知道,类型,作用域,返回值等等。

Ok,风格就到这,具体的MISRA的那100多条军规,大家可以自己去参考,网上有中文版本的。

转载请注明出处
[email protected]    //  http://blog.csdn.net/CStyle_0x007

你可能感兴趣的:(Freertos内核详解)