avr单片机c语言的编程风格
AVR单片机c语言编程风格
作为一个初学者如何具有良好的程序设计风格呢?我想引用一个关于初学者请教编程
大师的故事让读者自己去领悟。
有一位编程大师,他写非结构化的程序,一位初学者刻意模仿他,也写非结构化的程序。
当他让大师看他的进步时,大师批评了他的非结构化程序:“ 对一位编程大师合适的东西
未必对一个初学者同样合适,在超越结构化之前,你必须理解编程之道。” 我个人认为作
为一个初学者应该踏踏实实的打好程序设计的基础,不要急功近利,舍本逐末。我走过不少
弯路,希望大家能和我一样能牢记编程大师的忠告:“对编程大师合适的东西未必对一个初
学者同样合适”。
AVR c语言优秀编程风格
1文件结构
模块化的程序应该是有一个很好的程序结构的。AVR C语言程序有两种用户文件,.c
程序文件,.h头文件,程序中编写过程中需要在.c文件中包含.h头文件。初学者往往出现
重复包含或者头文件包含错误的问题,我当时也时常为这种错误而发愁。下面以电机驱动例
程来给大家说明一下,优秀的编程文件结构。
成型的程序的文件个数基本上都是偶数,因为每一个结构化的函数定义.c文件都会对
应一个.h文件。main.c对应config.h。我们来看看各文件的包含关系。下面我们看看这些
文件的包含关系与内容:[推荐的文件包含顺序与关系]
所有.c文件都包含了config.h文件。如: #include "config.h"
在config.h 中有如下代码:
#include "delay.h"
#include "device_init.h"
#include "motor.h"
这样做就不容易出现错误的包含关系,为了预防万一,我们还引入了宏定义与预编译。
如下:
#ifndef _UNIT_H__
#define _UNIT_H__ 1
//100us
extern void Delay100us(uint8 n);
//1s
extern void Delay1s(uint16 n); // n <= 6 ,when n==7, it is 1.
//1ms
extern void Delay1ms(uint16 n);
#endif
第一次包含本文件的时候正确编译,并且#define _UNIT_H__ 1,第二次包含本文件
#ifndef _UNIT_H__就不再成立,跳过文件。
预编译还有更多的用途,比如可以根据不同的值编译不同的语句,如下:
//#pragma REGPARMS
#if CPU_TYPE == M128
#include
#endif
#if CPU_TYPE == M64
#include