打印

请问kile如何制作头文件?

[复制链接]
8317|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的问题

使用特权

评论回复
5
new1988| | 2010-5-26 17:46 | 只看该作者
买本C语言的书好好看看吧!

使用特权

评论回复
6
strang| | 2010-5-26 18:49 | 只看该作者
网上一大把
搜一下就知道啦、

使用特权

评论回复
7
zq_mcu| | 2010-5-26 20:10 | 只看该作者
谭老(谭浩强)的那本c语言还行

使用特权

评论回复
8
zjswuyunbo| | 2010-5-27 08:40 | 只看该作者
没用过。。。。
我是来看
KILE是什么的?

使用特权

评论回复
9
aeast5| | 2010-5-27 10:05 | 只看该作者
自己动手,太简单了。

使用特权

评论回复
10
冷漠| | 2010-5-27 10:34 | 只看该作者
本帖最后由 冷漠 于 2010-5-27 10:36 编辑

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

其效果是下面1、还是2、  ???
1、把“IIC.c”模块名放在#include位置;
2、还是把IIC.c模块的整个代码内容放在include位置?

使用特权

评论回复
11
mochou| | 2010-5-27 13:28 | 只看该作者
参考别人的源程序,自己再弄下。

使用特权

评论回复
12
一棵小草| | 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,最后才链接。

使用特权

评论回复
13
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      行不行!??

很可能也行!
哈哈

使用特权

评论回复
14
ayb_ice| | 2010-5-28 08:17 | 只看该作者
"extren   uchar     sum  = 0;"
上面这句话根本编译不过

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

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
15
一棵小草| | 2010-5-28 13:19 | 只看该作者
呃~~~太认真了吧,我只是想回到LZ的问题----------结构。

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

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

而且,我实践过了,能编译通过,能实现我的功能,我一直都用这样的结构,我不是凭着嘴巴乱说的。

使用特权

评论回复
16
青石向晚|  楼主 | 2010-5-30 19:10 | 只看该作者
我想问一下,如果IIC.c里面封装的函数用到了全局变量,而全局变量是在def.h中声明的,那是不是也要包含def.h文件啊??谢谢了~~ 12# 一棵小草

使用特权

评论回复
17
liersong001| | 2010-5-31 11:18 | 只看该作者
同16楼问题。另外感谢一棵小草,看明白了一点,在头文件中只要声明函数,如IIC.H,函数的定义是在与该头文件同名的C文件中定义的,如IIC.C。是这样吧?

使用特权

评论回复
18
一棵小草| | 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,好像通不过,你可以试试看嘛。

使用特权

评论回复
19
一棵小草| | 2010-5-31 19:42 | 只看该作者
17# liersong001

是的,你可以照着例子写一个简单函数来试试,只有这样,才能理解得更深刻些,实践是最好的方法!

使用特权

评论回复
20
shu081| | 2010-10-18 22:55 | 只看该作者
学习了,有收获:):handshake

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

41

帖子

0

粉丝