微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 之三——嵌入式C程序经验

之三——嵌入式C程序经验

时间:10-02 整理:3721RD 点击:
工程师解决问题的能力只有从实践中才能获得。
从实践经验中归纳出共性的知识,然后再将这些只是重新应用到实践中去,这是我们在实际工作中必须采取的方法。
       在学习STM32时应该关注两个比较重要的官方文档《STM32FXXX XXX参考手册》和《STM32FXXX XXX固件库使用手册》,阅读参考手册时不需要全部阅读,但是前几章必须重点阅读,包括存储器和总线构架,电源控制,备份寄存器,复位和时钟控制,通用和复用功能I/O,中断和定时器等。后续章节讲述的是具体的功能模块设计,如果用到哪个模块,就可以去阅读相应的章节。
       阅读  库函数使用手册  的主要目的是为了简化编程。STM32提供了一个非常好的固件函数库,只需调用即可,比51单片机上手还要容易。阅读时前几章也是必须阅读的,比如  文档和库规范中的命名规则,编码规则,固件库的构架以及如何使用固件库等。有了这些基础,就可以借助固件库写出自己的代码了。后续章节都是描述某个模块有什么函数,每个函数如何调用,可以根据需要来阅读。本人觉得对GPIO库函数、中断部分库函数、复位和时钟设置的库函数等内容需要重点阅读,毕竟要经常用到。

C程序经验谈:
代码效率包括两个方面的内容,即代码占据存储器容量大小和代码执行速度。代码效率高是指代码精简和代码执行速度快。一般情况下,代码精简了,速度也就相应提上来了。单片机ROM和RAM都很有限,编程时遇到单片机ROM和RAM不够用的情况,或者程序要求较高的执行速度时,就得解决代码效率问题了。
      这个代码效率在学校学习的时候,老师一般都不会去讲,大多数都是跑跑流水灯之类的裸机程序,课就上完啦。工作之后,跟了师傅,看他的代码的时候就感觉很条理,很清晰。自己后来又看了很多程序,好几本书籍总结了五种提高代码效率的方法。

1,尽量定义局部变量
      单片机程序的全局变量一般存放在通用数据存储器(RAM)中,而局部变量一般存储在特殊功能寄存器中。处理寄存器数据的速度比处理RAM数据要快,如果在一个局部函数里调用一个全局变量将会多生成代码。所以,多定义局部变量。
2.省略函数定义
在一个单片机程序中,习惯上在main函数的前面先定义被调用函数,然后在main函数的下面实现被调用函数。这样的写法固然是一个好习惯,但是每定义一个函数会增加代码,而且函数形参数据类型越大,形参越多,增加的代码就越多。如果不定义,编译器又会报错,由于C编译器的编译顺序是从上往下编译的,只要被调用的函数在主调函数调用前实现就没有问题啦。所以,比较好的写法是不用定义函数,但是要按照先后顺序,最后写main函数。
3.省略函数形参
       函数带形参,是为了在函数调用时传递实参,这样不仅可以避免重复代码出现,还可以通过传递不同的是参值,多次调用函数且实现不同的函数功能,代码也会精简。但是不常调用的函数,可以改成不带形参的函数。
4.改换运算符
       C运算符的运用也会影响程序代码的数量。
一般:
把求余运算表达式改为位与运算表达式,如 b=a%8可以改为  b=a&7.
把乘法运算表达式改为左移运算表达式,如 b=a*8可以改为  b=a<<3.
把除法运算表达式改为右移运算表达式,如 b=a/8可以改为  b=a>>3.
5.直接嵌入代码
       对于程序中只调用一次,而且又要求代码高执行速度,就不要采用调用函数的形式了,直接将此函数嵌入到主调函数中,这样代码的执行效率会大大提高。


当然这只是本人总结的感觉比较有用的,大家还是要多看书,多看牛人的程序,必将收获很大。
多写多练,就能写出好程序

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top