摘要:作为一个初学者如何具有良好的程序设计风格呢?下面小编将以avr单片机介绍它的c语言编程风格。
C语言编程风格介绍
1.变量定义
在定义变量时,前缀使用变量的类型,之后使用表现变量用途的英文单词或单词缩写,且每个单词或缩写的首字母大写,各种前缀缩写如下:
无符号变量使用 u8,u16,u32;例:unsigned char u8Temp;
有符号变量使用 s8,s16,s32;例:char s8Temp;
浮点数变量使用 f32,d64;例:float f32Temp;
结构体变量使用 st;例:struct Temp stTemp;
字符串变量使用 s;例:char sTemp;
数组变量使用 a;例:unsigned char aTemp[10];
指针变量使用 p;例:unsigned char *pTemp;
枚举变量使用 e;例:enum Temp eTemp;
2.宏定义
对于宏定义使用大写+下划线的方式。
3.程序排版
一行程序的开始使用tab键进行对齐,一行的中间使用空格键进行对齐。
这样防止不同的编辑工具打开时,造成代码混乱。
4.注释的书写
这里注释分为函数头注释,程序中代码注释,
函数头注释使用如下形式
/*
*Name:
*DescripTIon:
*Created:
*Author:
*/
这四项必选,其他的如函数的传入传出参数,视函数的需要适当增加。
5.测试代码
在编程的同时,需要注意添加适当的测试代码,这样可以减轻以后测试代码时的工作量。
AVR c语言优秀编程风格
文件结构
模块化的程序应该是有一个很好的程序结构的。AVR C语言程序有两种用户文件,.c程序文件,.h头文件,程序中编写过程中需要在.c文件中包含.h头文件。初学者往往出现重复包含或者头文件包含错误的问题,我当时也时常为这种错误而发愁。下面我以我写的电机驱动例程来给大家说明一下,优秀的编程文件结构。
这个工程中有8个文件,一个说明文件,如下图:下载程序例子 电机控制案例 。
我写的成型的程序的文件个数基本上都是偶数,因为每一个结构化的函数定义.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 《iom128v.h》
#endif
#if CPU_TYPE == M64
#include 《iom64v.h》
#endif
#if CPU_TYPE == M32
#include 《iom32v.h》
#endif
#if CPU_TYPE == M16
#include 《iom16v.h》
#endif
#if CPU_TYPE == M8
#include 《iom8v.h》
#endif
#include《filename》 与 #include “filename” 的区别 :前者是包含系统目录include下 的文件,后者是包含程序目录下的文件。
变量名与函数名
变量以及函数命名应该按照尽量短,按需长,具有实际意义。可以通过下划线或者大小写结合的方法组合动词和名词组成变量函数名。下面对比好的命名方法与不好的命名方法:
1.好的: Delay100us();
不好的: Yanshi();
2.好的: init_devices();
不好的: Chengxuchushihua();
3.好的: int temp;
不好的: int dd;
上一篇:avr单片机几个主要优点
下一篇:AVR单片机的特点及缺点解析
推荐阅读最新更新时间:2024-11-07 15:33
设计资源 培训 开发板 精华推荐
- TPS61088
- 实施血糖仪和血压监测仪医疗设备
- LTC3838IUHF-1 6.5V 至 34V 输入、5V/12A 和 3.3V/12A 双路输出、300kHz、RSENSE、5V 输出连接至 EXTVCC、降压转换器的典型应用电路
- ESP32 WiFi/蓝牙网关 ESP32 GetWay
- 使用 Analog Devices 的 ADP1149AR-5 的参考设计
- 宽输入电压范围升压控制器可在低至 1.6V 的输入电压下工作
- 可编程的OSD视频输出模块
- DC1431A-C,使用 LTC5542IUH 上/下转换器混频器的演示板针对 RF=1.6-2.7GHz、LO=1.7-2.5GHz 进行了优化
- LTC3624IMSE-2 具有 2.25MHz 可调输出电压、2A 同步降压稳压器的典型应用
- EZ-PD CCG2 USB Type-C 转 HDMI 适配器解决方案参考设计