关于单片机库函数的问题——求高手帮忙解决

2019-07-16 05:00发布

最近在自己写一些.H文件,发现了一些问题。
#ifndef __MATH_H__
#define __MATH_H__

#endif


我以这样的格式写的 .H文件,里面的子函数,编译器在编译的时候,把所有的子函数都编译了进去。那些我在主函数中没有调用到的函数也编译进去。也就是说,只要是在这个文件里的函数,不管有没有被用到,都占用了单片机的资源。虽然资源占得不多,但心里还是很不舒服。
那些编译器自带的库函数,像什么math.h      stdio.h ................这些函数,我加载进来后,只要我不用,就不占单片机一点资源。我也想写一些这样的库函数,还请高手指教.....................

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
asas564403008
1楼-- · 2019-07-16 07:12
lovezjf234 发表于 2012-7-30 16:01
子函数是不放在.h文件里的。你放子函数进去当然要被编译,你用extern 加函数名调用,在编译的时候就会被优 ...

我用的 KEIL 4
我看到加载了它自带的库函数
#ifndef __INTRINS_H__
#define __INTRINS_H__
extern void          _nop_     (void);
extern bit           _testbit_ (bit);
extern unsigned char _cror_    (unsigned char, unsigned char);
extern unsigned int  _iror_    (unsigned int,  unsigned char);
extern unsigned long _lror_    (unsigned long, unsigned char);
extern unsigned char _crol_    (unsigned char, unsigned char);
extern unsigned int  _irol_    (unsigned int,  unsigned char);
extern unsigned long _lrol_    (unsigned long, unsigned char);
extern unsigned char _chkfloat_(float);
#if !defined (__CX2__)
extern void          _push_    (unsigned char _sfr);
extern void          _pop_     (unsigned char _sfr);
#endif
#endif
只告诉了一个函数名而已,它函数体放在了哪里?
猎人平凡
2楼-- · 2019-07-16 11:09
好像要建立两个文件,就可以不会你说的那样。一个是C文件,一个是H文件,两者同名但不同类型,C文件才是真正的函数,而H文件是接口文件,用来声明C文件用到的变量与函数。
asas564403008
3楼-- · 2019-07-16 14:05
猎人平凡 发表于 2012-7-30 23:20
好像要建立两个文件,就可以不会你说的那样。一个是C文件,一个是H文件,两者同名但不同类型,C文件才是真 ...

能说的详细一点吗?
oyl
4楼-- · 2019-07-16 18:18
其实也是可以直接放到.h  头文件里面的,楼主编程的时候试一下就知道了。模块化编程是一个好习惯。
asas564403008
5楼-- · 2019-07-16 19:35
 精彩回答 2  元偷偷看……
jn_zj
6楼-- · 2019-07-16 23:17
函数定义放在.c文件中,函数的声明放在同名的.h文件中,建一个工程总的头文件,把工程中的所有用到的.h文件包涵进去,去掉每个.c文件中的包涵头文件语句,只包涵上面建立的总的头文件就可以了,记的写每个头文件时必须用条件编译语句,全局变量的定义只能写在.c文件中,声明写在同名的.h文件中加extern,这就是多文件编译的标准做法

一周热门 更多>