养成良好的嵌入式C代码编码习惯要遵循哪些规则?_第1页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、养成良好的嵌入式c代码编码习惯要遵循哪些规则?-m这类微控制器编程通常采纳c代码,那么编程人员如何编写代码才干让c编译器产生高质量底层代码就成为一个很重要的话题。这里所说的高质量底层代码是指既达到编程人员意图又便利编译器优化的代码。本文将从编写利于优化的源代码,节约栈和内存空间,函数原型,整型和位取反,同时读写变量的庇护,不举行初始化的变量这几个方面来研究如何编写良好的c代码。一、编写利于优化的源代码我们在编写源代码的时候假如能够遵循以下几点,可以让编译器更好的对代码举行优化:1)局部变量(自动变量和参数)比静态或全局变量要更好。为什么这么说呢,由于优化器会假定任何一个函数都可能修改静态或全局

2、变量。当局部变量的生命周期结束的时候,它所占领的内存就可以被其它变量用法,而全局变量在囫囵程序的生命周期内都不会释放它所占领的内存空间。2)避开用&运算符取局部变量的地址。这里有两个缘由会导致该操作的效率低下。首先,变量必需放在内存中,不能放在处理器的寄存器中,这将导致更长更慢的代码效率。第二,优化器不再假设其它的函数,因此不会影响到该变量。3)编译器的内联函数能力。为了最大限度的影响编译器的内联转换,我们最好把那些多个模块都用到的小函数写在头文件中而不是实现文件中。二、节约栈和内存空间以下的编程技术可以让我们节约内存和栈空间:1)假如栈空间有限,那么我们就要尽量避开长的调用链和递归函

3、数。2)避开用法大的聚合类型(比如结构体)作为参数或者返回类型。为了节约栈空间,我们应当更多的用法指针来代替这种聚合类型。三、函数原型有两种函数的定义和声明方式可以用法。一种是原型风格,一种是kernighan & ritchie c风格。两种风格都是可以的,但剧烈建议应用原型风格,也就是说对每一个公共函数都在相应的头文件中提供一个原型声明。这是由于编译器对应用kernighan & ritchie c风格的参数不举行类型检查。应用原型风格在某些状况下将产生高效的代码,由于它不需要举行参数类型提升。为了保证全部的公共函数都在定义之前声明过,可以打开编译器选项 project&g

4、t;options>c/c+ compiler>language 1>require prototypes以下是两种风格的示例1)原型风格:原型风格中,必需写明每个参数的类型。int test(char, int); /* 声明 */int test(char ch, int i) /* 定义 */return i - ch;2)kernighan & ritchie风格:kernighan & ritchie风格中,不需要举行函数原型声明。取而代之的是一个空参数列表的函数声明。函数的定义也有些不同。int test(); /* 声明 */int test(c

5、h, i) /* 定义 */char ch;int i;return i - ch;四、整型和位取反在某些状况下,整数类型和它们的转换提升规章会导致难以理解的行为。这常常浮现在赋值或者条件表达式中,这里涉及不同长度类型的数据和规律操作尤其是位取反操作。这里的类型也包括常数类型。例如:1个8位的字符类型,1个32位的整数类型,根据二进制补码操作。void f1(unsigned char c1)if (c1 = 0x08);这里,测试条件总是false。由于右边的0x08 = 0x00000008,0x00000008 = 0xfffffff7。左边的c1是1个8位无符号字符类型,因此它不行能比

6、255大,也不行能是负数,这就意味着它的高24位不行能置1。所以这个测试条件总是false的。五、同时读写变量的庇护在中断程序或者单独线程中用到的变量常常是异步读写的,它们必需举行适当地标志和适当的庇护。编译器应用volatile关键字对这类变量举行标志。这个关键字通知编译器该对象的值无任何持久性,不要对它举行任何优化。它迫使编译器每次需要该对象数据内容的时候都必需读该对象,而不是只读一次数据并将它放在处理器的寄存器中以便后续拜访之用。六、不举行初始化的变量通常,运行时环境在应用程序启动的时候会初始化全部的静态和全局变量。编译器支持用_no_init关键字来声明不举行初始化的变量。用_no_init关键字声明的变量通常用在大的数据输入缓冲这样的地方。本文介绍了编写良好的嵌入式c代码涉及的多个方面。编写良好的嵌入式c代码需要大量的专业学问,本文虽尽力描述编写良好的嵌入式c代码所需要的各种技能,但难免

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论