请问kile如何制作头文件?

[复制链接]
10412|24
 楼主| 青石向晚 发表于 2010-5-26 13:02 | 显示全部楼层 |阅读模式
写了一个有点长的程序,看起来很不方便,看过网上很多人把里面的函数封装成头文件什么的,看起来很方便,可惜一直不会,请各位大侠一定不吝赐教~~~
一棵小草 发表于 2010-5-26 13:40 | 显示全部楼层
第一:
弄成.H文件。把一段代码剪切,复制到新建的.H文件中,把.h文件加入工程,在main.c中include就行,不过要声明函数哦,有些人写函数是把main函数放最后,然后前面写的子函数都不声明就用了,这样是不好的习惯。
第二:
弄成.c文件(推荐)。把一个模块写出一个.c,如IIC.C。注意私有变量和共有变量的定义(这个网上查),如果main.c中有调用IIC.C的函数,要先main.c中声明。
 楼主| 青石向晚 发表于 2010-5-26 13:54 | 显示全部楼层
可以把第二种方法讲的详细一点吗,或者给个网上的链接我自己去看,谢谢啊~~~ 2# 一棵小草
ayb_ice 发表于 2010-5-26 13:56 | 显示全部楼层
这和KEIL没有关系,是C的问题
new1988 发表于 2010-5-26 17:46 | 显示全部楼层
买本C语言的书好好看看吧!
strang 发表于 2010-5-26 18:49 | 显示全部楼层
网上一大把
搜一下就知道啦、
zq_mcu 发表于 2010-5-26 20:10 | 显示全部楼层
谭老(谭浩强)的那本c语言还行
zjswuyunbo 发表于 2010-5-27 08:40 | 显示全部楼层
没用过。。。。
我是来看
KILE是什么的?
aeast5 发表于 2010-5-27 10:05 | 显示全部楼层
自己动手,太简单了。
冷漠 发表于 2010-5-27 10:34 | 显示全部楼层
本帖最后由 冷漠 于 2010-5-27 10:36 编辑

简单吗?下面一条语句:
#include"IIC.c"

其效果是下面1、还是2、  ???
1、把“IIC.c”模块名放在#include位置;
2、还是把IIC.c模块的整个代码内容放在include位置?
mochou 发表于 2010-5-27 13:28 | 显示全部楼层
参考别人的源程序,自己再弄下。
一棵小草 发表于 2010-5-27 20:40 | 显示全部楼层
我举个例子,我经常用的结构。

新建4个文件:main.c、def.h、IIC.c、ICC.h。其中,main.c和ICC.c要加入Keil工程中,头文件可以不加。

(1)main.c文件中:
#include  <reg52.h>       //特殊功能寄存器定义
#include   "def.h"           //主函数用到的常量、变量的定义,这样写看起来美观。
#include   "IIC.h"           //ICC.c的函数声明

void    main(void)
{
         uchar    a,b;
         system_init();       //初始化等
      //----------------
         while(1)                //主循环
         {
                   system_task();          //任务
             //-----------------------
                    write_cmd(0x11);
                    a= read_date();  //我把sum弄成公有变量,想说明extren的应用,注意它的定义。
                    b  =  sum;
                     //--------------------
         }
}

(2)def.h中:
#ifndef     _XX_H_
#define    _XX_H_

#define    uchar     unsigned   char

bit   flag_ram;
sbit  P11 =  P1^1;
uchar  date_up;
//----------------------等等
extren   uchar     sum  = 0;
//这里可以赋初值,在IIC.c中的定义不能再赋值了,extren大家可以网上查,也可以根据例子来理解。

#endif


(3)IIC.c中:
#include    <reg52.h>
#include    "IIC.h"         ;为了避免错误,不被其他.c文件中调用的函数不写里面。
#define   uchar   unsigned  char
bit  flag_down;
sbit  scl  = P2^7;
uchar   dee;
//等等私有变量
extren    uchar    sum;      //再赋值的话会报错的。

void   write_bye(void);     //私有函数的声明
//----------------等等函数


void    write_bye(void)
{
       uchar   a,b;
        a = 1;
        b =1 ;
        sum  =  a+b;         //当然,我这里只是举例
    //--------------
}

//----------------------等

void  write_cmd(uchar    date)
{
        write_bye();
        //-------------------
}

uchar    write_date(void)
{
          uchar   k;
          k =  10;
          //-----------
          eturn   k;
}

(4)IIC.h中:

#ifndef     _XX_H_
#define    _XX_H_

void  write_cmd(uchar  date);
uchar    write_date(void);

#endif


我在这里只是结构的举例,里面的程序是乱来的。
编译的过程貌似,main.c生成main.obj;IIC.c生成IIC.obj,最后才链接。
xlsbz 发表于 2010-5-27 21:31 | 显示全部楼层
我举个例子,我经常用的结构。

新建4个文件:main.c、def.h、IIC.c、ICC.h。其中,main.c和ICC.c要加入Keil工程中,头文件可以不加。

(1)main.c文件中:
#include         //特殊功能寄存器定义
#include   "def ...
一棵小草 发表于 2010-5-27 20:40




extren   uchar     sum  = 0;

在.h 中赋初值 好不好呢?
我觉得不妥!
sbit  P11 =  P1^1;这个东西放到.h里面也未必见得好

个人观点






回复楼主
.h 就是 .header 的意思  就是头的意思

其实你可以试试  弄成  .biede      行不行!??

很可能也行!
哈哈
ayb_ice 发表于 2010-5-28 08:17 | 显示全部楼层
"extren   uchar     sum  = 0;"
上面这句话根本编译不过

"sbit  P11 =  P1^1;这个东西放到.h里面也未必见得好"
这个是IO定义,当然放在头文件里好,不过建议集中放置,这样可以清楚整体项目的IO配置

评分

参与人数 1威望 +1 收起 理由
xlsbz + 1

查看全部评分

一棵小草 发表于 2010-5-28 13:19 | 显示全部楼层
呃~~~太认真了吧,我只是想回到LZ的问题----------结构。

至于这些定义你想放哪里就是那里,初始化你觉得放.h不好,你就不放。

好不好,妥不妥,总得有理由,不把理由说出来,很难说服人。

而且,我实践过了,能编译通过,能实现我的功能,我一直都用这样的结构,我不是凭着嘴巴乱说的。
 楼主| 青石向晚 发表于 2010-5-30 19:10 | 显示全部楼层
我想问一下,如果IIC.c里面封装的函数用到了全局变量,而全局变量是在def.h中声明的,那是不是也要包含def.h文件啊??谢谢了~~ 12# 一棵小草
liersong001 发表于 2010-5-31 11:18 | 显示全部楼层
同16楼问题。另外感谢一棵小草,看明白了一点,在头文件中只要声明函数,如IIC.H,函数的定义是在与该头文件同名的C文件中定义的,如IIC.C。是这样吧?
一棵小草 发表于 2010-5-31 19:38 | 显示全部楼层
16# 青石向晚

不用,有个全局变量(叫公有变量恰当些)example;已经在def.h中定义了。如果IIC.c中也想用这个exmaple变量,那么要加外部变量声明了。即,
在def.h中:   extren   uchar   example;  //有人说这里不能赋值,你试试看,行不行。当然,最好写一个InitRam函数,在初始化中调用会正规些。
在IIC.c中定义:extren   uchar   example;//extren 起到一个外部变量说明的作用。
当然,如果你有很多共用变量,就多写一些了。一般来说,一个模块不会有很多公有变量的。至于你说的,在IIC.c中也包含def.h,好像通不过,你可以试试看嘛。
一棵小草 发表于 2010-5-31 19:42 | 显示全部楼层
17# liersong001

是的,你可以照着例子写一个简单函数来试试,只有这样,才能理解得更深刻些,实践是最好的方法!
shu081 发表于 2010-10-18 22:55 | 显示全部楼层
学习了,有收获:):handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部