单片机C语言风格,单片机c语言优秀编程风格.doc

本文分享了单片机C语言编程的一些优秀风格,强调初学者应注重基础,避免急功近利。通过电机驱动例程,阐述了如何构建清晰的文件结构,包括.c和.h文件的正确包含,以及防止重复包含的宏定义。同时,讨论了变量和函数命名的规范,提倡使用有意义的命名。此外,还提到了外部函数调用的注意事项,建议在.c文件中定义函数,避免在模块化程序中直接调用,以简化调试。
摘要由CSDN通过智能技术生成

单片机c语言优秀编程风格

单片机 c语言优秀编程风格

对一位编程大师合适的东西未必对一个初学者同样合适,在超越结构化之前,你必须理解编程之道。” 我个人认为作为一个初学者应该踏踏实实的打好程序设计的基础,不要急功近利,舍本逐末。我走过不少弯路,希望大家能和我一样能牢记编程大师的忠告:“对编程大师合适的东西未必对一个初学者同样合适”。

AVR一个月之后,你什么都明白了。

模 块化的程序应该是有一个很好的程序结构的。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

#endif

#if CPU_TYPE == M64

#include

#endif

#if CPU_TYPE == M32

#include

#endif

#if CPU_TYPE == M16

#include

#endif

#if CPU_TYPE == M8

#include

#endif

#include 与 #include "filename" 的区别 :前者是包含系统目录include下 的文件,后者是包含程序目录下的文件。

变量以及函数命名应该按照尽量短,按需长,具有实际意义。可以通过下划线或者大小写结合的方法组合动词和名词组成变量函数名。下面对比好的命名方法与不好的命名方法:

1.好的: Delay100us();

Yanshi();

2.好的: init_devices();

Chengxuchushihua();

3.好的: int temp;

int dd;

外部调用

1.首先在模块化程序的.h文件中定义extern

2.//端口初始化

3.extern void port_init(void);

4.

5.//T2初始化

6.void timer2_init(void);

7.

8.//各种参数初始化

9.extern void init_devices(void);

10.模块化程序的.c文件中定义函数,不要在模块化的程序中调用程序,及不要出现向timer2_init();这样函数的使用,因为你以后不知道你到底什么地方调用了函数,导致程序调试难度增加。可以在定义函数的过程中调用其他函数作为函数体。

11./**************************采用timer2 产生波形***********************/

12.// PWM频率 = 系统时钟频率/(分频系数*2*计数器上限值))

13.void timer2_init(void)

14.{

15. TCCR2 = 0x00; //stop

16. TCNT2= 0x01; //set count

17. OCR2 = 0x66; //set compare

18. TCCR2 = (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值