标题:
51单片机模块化编程问题
[打印本页]
作者:
cjtdz
时间:
2025-3-15 14:51
标题:
51单片机模块化编程问题
对51单片机模块化编程不得法,老是出问题。请大师们详细说明应该注意的问题:h头文件里必写什么,可写可不写什么?c文件里必写什么,可写可不写什么?各个不同模块之间要写什么?哪些文件怎么添加,添加到哪里等等。一一罗列出来。
作者:
hjh800512
时间:
2025-3-15 18:47
没必要重复造轮子,你找一个模块化的例程,在里面改改头文件名称,还有处理器型号什么的比较方便。
作者:
ztzp
时间:
2025-3-15 18:59
我的经验,供你参考:
***********************************************
模块化编程的步骤
一、创建头文件
建立一个.c文件(源文件)和一个.h文件(头文件)。原则上.c文件和.h文件同名;文件名要有意义,最好能够体现该文件代码的功能。例如延时函数相关的源文件和头文件命名为:delay.c与delay.h
二、防重复包含处理
在.h文件文件中加入如下代码:
#ifndef XXX
#define XXX
……
#endif
在同一个工程中各个.h文件的XXX不能相同,因此推荐使用一下规则:将.h文件的文件名全部大写,“.”替换成下划线“_”,首尾各添加两个下划线“__”作为XXX。
例如delay.h
#ifndef __DELAY_H__ //如果没有定义这个宏
#define __DELAY_H__ //则定义该宏
……
#endif
三、代码封装
将需要模块化的代码封装成函数与宏定义。函数先在头文件里面声明一下,函数体放在.c文件中,需要被外部调用的宏定义放在.h文件中,仅会被本.c文件调用的宏定义放在.c文件中。
尽量少用或不用全局变量,必须要用的全局变量的定义放在.c文件中,当需要调用外部全局变量,需要在.h文件中用extern重新声明一下。
四、使用源文件
将.c文件添加到工程之中,同时在需要调用.h文件中的宏或者函数的.c文件中添加代码将该.h文件包含进去。
所包含的头文件中的函数,宏定义,全局变量可以在.c文件中自由调用。
#include <reg52.h> //系统的头文件用尖括号
#include "delay.h" //自己定义的头文件用引号
五、特别注意
在主源文件中只能包含.h文件,因为.h文件中已定义了所有的函数名称,而不能包含与.h文件同名的.c文件。
六、如果要声明一个全局数组(或变量),则除了在.h文件中声明外,还要在.c文件中定义,比如:
在.h文件中声明:
extern uchar xdata RX8025TimeBuffH[]; //转换好的时钟数据:秒、分、时、周、日、月、年
在.c文件中定义:
uchar xdata RX8025TimeBuffH[]={0,13,3,3,10,4,24}; //转换好的时钟数据:秒、分、时、周、日、月、年
特别注意:在.h文件中,全局变量只能声明,而不能赋初值。
七、本模块使用的普通变量在.c文件中定义,但常量和I/O口的宏定义放在.h文件中。
作者:
62651345
时间:
2025-3-16 22:10
楼上的大神讲的很详细,点赞
作者:
万家灯火51
时间:
2025-3-18 00:18
这是一个非常值得赞扬的问题。可以说,认真“学会”一门语言后,还想继续深入,就会碰到这个问题。特别是嵌入式系统,跟纯软件还不同。赞!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1