打印

问个问题 yyy71cj 关于keil库的!多谢

[复制链接]
4094|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xlsbz|  楼主 | 2010-11-5 14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
yyy71cj 写到:(制作库时),项目里只添加模块的C源程序,不要有main()函数。

------------------

而我以前制作库时,都将main函数包括进去了然后编译

请问包括main函数和不包括main函数生成的库文件有什么区别么?
我刚才看了看生成的库文件的大小 都是一样的啊
好像没啥区别啊

多谢指点

相关帖子

沙发
ayb_ice| | 2010-11-5 14:37 | 只看该作者
有没有库函数没有关系的

使用特权

评论回复
板凳
xlsbz|  楼主 | 2010-11-5 15:57 | 只看该作者
楼上没理解我说的

使用特权

评论回复
地板
ayb_ice| | 2010-11-5 16:18 | 只看该作者
都说了没有区别,没有影响
在你的项目中仍写main函数即可,编译时自动相关的库函数,没有用到的不会链接的

使用特权

评论回复
5
xlsbz|  楼主 | 2010-11-8 00:05 | 只看该作者
KEIL说明书上有没有相关的说明?
现在网络上很多地方都说编译时候不应该有main函数。
楼上高人说下 keil哪里有说明啊?

使用特权

评论回复
6
xlsbz|  楼主 | 2011-4-8 11:35 | 只看该作者
以前问的东西 现在明白点补充一下

第一个就是要特别注意弄库的时候要特别 宏定义,搞了宏定义 对应的函数就别弄库了

第二个是有人建议 一个函数就弄一个C文件

总之  结论就是KEIl这玩意不太适合弄库  。如果一定要弄的话  先从与寄存器无关的函数弄起,并且不要弄宏定义,用参数就好

使用特权

评论回复
7
xlsbz|  楼主 | 2011-4-8 11:38 | 只看该作者
听说 神五  神几 的都用misra啊   现在比较流行 别OUT了

高科技啊 冲啊

使用特权

评论回复
8
ayb_ice| | 2011-4-8 11:58 | 只看该作者
以前问的东西 现在明白点补充一下

第一个就是要特别注意弄库的时候要特别 宏定义,搞了宏定义 对应的函数就别弄库了

第二个是有人建议 一个函数就弄一个C文件

总之  结论就是KEIl这玩意不太适合弄库  。如果一定 ...
xlsbz 发表于 2011-4-8 11:35

不要随便下结论
对于库的制作,KEIL和其它的IDE应该没有什么本质区别
对于做库时如果用了宏定义,建议将宏做成头文件,使用库时同时相应的头文件
其实标准库都是这样做的

使用特权

评论回复
9
xlsbz|  楼主 | 2011-4-8 12:12 | 只看该作者
使用库时同时相应的头文件??

这句话我没看明白。。。。

使用特权

评论回复
10
ayb_ice| | 2011-4-8 13:24 | 只看该作者
使用库时同时相应的头文件??

这句话我没看明白。。。。
xlsbz 发表于 2011-4-8 12:12

建议看KEIL帮助文档吧

使用特权

评论回复
11
刘前辈| | 2011-4-8 17:26 | 只看该作者
本帖最后由 刘前辈 于 2011-4-9 09:35 编辑

很简单的问题:你如果在制作库时项目中含有main( )函数,那么你做成的库文件中就带有main.OBJ文件。如果制作库时没包含main( ),做成的库文件就不带main.OBJ。这不会影响到你以后的库函数调用。

       关键这是不是你希望的?你不希望你就不加。你希望程序从库中引导main( ),你就加。


使用特权

评论回复
12
xlsbz|  楼主 | 2011-4-8 19:57 | 只看该作者
前辈 多谢 不过好像不是我要所要问的哦

我问的是怎么搞库啊

搞库了 再编程用这个库 会出问题

使用特权

评论回复
13
刘前辈| | 2011-4-9 09:22 | 只看该作者
本帖最后由 刘前辈 于 2011-4-9 09:38 编辑

举个具体例子?

我做过n个keil库了,从没遇到过问题。

关键可能是你如何用keil 环境设置自己的库路径的问题。


、、

使用特权

评论回复
14
刘前辈| | 2011-4-9 09:27 | 只看该作者
第一个就是要特别注意弄库的时候要特别 宏定义,搞了宏定义 对应的函数就别弄库了
第二个是有人建议 一个函数就弄一个C文件

总之  结论就是KEIl这玩意不太适合弄库  。如果一定要弄的话  先从与寄存器无关的函数弄起,并且不要弄宏定义,用参数就好


忽悠你呢,一点道理都没有。支持10楼。

总有人显得自己比keil高明,最后发现,是自己不会用而已。



//

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
xlsbz + 1
15
xlsbz|  楼主 | 2011-4-10 09:12 | 只看该作者
16# 刘前辈

10楼说的“使用库时同时相应的头文件”是啥意思?

使用特权

评论回复
16
刘前辈| | 2011-4-10 09:55 | 只看该作者
本帖最后由 刘前辈 于 2011-4-10 10:05 编辑

C语言基本概念:你要调用外部函数(库函数当然是外部函数),先要说明一下,告诉编译器这个函数在外部寻找;例如:你要调用库函数 char  f1(int); 你不是先要告诉编译器:
      extern   char  f1(int) ;   //或者  省略形式  char  f1(int);

这个外部库函数说明就是专门写在“相应头文件” 库名.h 里的。这样当你调用这个库里的函数时,只要包含库名.h,就不用一条条去说明 extern ……。

所以,现在的大学教授讲课都不详细讲这些内容,他觉得应该学生自己课外去看书。但是,谁给学生看书的时间?上午、下午都有课,讲了半天云里雾里;还不如只答疑不讲课,指定书,让学生自己看。
下面是2个头文件例子:一个关于库函数说明的;一个关于宏说明的。

stdio.rar (927 Bytes)

使用特权

评论回复
17
xlsbz|  楼主 | 2011-4-11 12:26 | 只看该作者
举个具体例子?

我做过n个keil库了,从没遇到过问题。

关键可能是你如何用keil 环境设置自己的库路径的问题。


、、
刘前辈 发表于 2011-4-9 09:22



你的库里面涉及到宏定义了么?

库里面宏定义

然后你在外面改宏定义  库里面的宏定义也不会变的啊!!!!

是不是啊??

是我没讲明白还是你没听明白????

使用特权

评论回复
18
ayb_ice| | 2011-4-11 14:03 | 只看该作者
你的库里面涉及到宏定义了么?

库里面宏定义

然后你在外面改宏定义  库里面的宏定义也不会变的啊!!!!

是不是啊??

是我没讲明白还是你没听明白???? ...
xlsbz 发表于 2011-4-11 12:26

谁规定外面改宏定义,库里也要跟着变的.

使用特权

评论回复
19
刘前辈| | 2011-4-11 14:30 | 只看该作者
LZ 还没明白宏定义的概念:宏代换是在编译阶段才进行的,库函数里面的只是宏名,它不代表任何东东,只有在编译之后才代换为实际东东。

举例:#define  HONG  0x32
你修改宏定义至多是 :
#define  HONG     ……

库函数里只有'HONG'这个标识,它代表什么是在库外面的XXX.h 头文件里定义的。即使你把宏定义头文件也做到了库里,但是项目中的头文件是优先编译的。——因为编译器默认最先查找当前项目中的文件,最后才查找库文件。

、、

使用特权

评论回复
20
ayb_ice| | 2011-4-11 14:34 | 只看该作者
库里没有宏定义,已经被转换过来了

使用特权

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

本版积分规则

190

主题

1614

帖子

4

粉丝