发新帖我要提问
12
返回列表
打印

总是不能这样,不能那样~FUCK~

[复制链接]
楼主: 阮天宇00
手机看帖
扫描二维码
随时随地手机跟帖
21
原野之狼| | 2012-12-13 08:23 | 只看该作者 回帖奖励 |倒序浏览
阮天宇00 发表于 2012-12-12 21:38
假如现在要我问这个问题的话,我会问
“为什么keil中用头文件.h可以LINKING通过,但是改成.C后就不行了”
...

说来听听呀~  别掖着:lol

使用特权

评论回复
22
McuPlayer| | 2012-12-13 09:24 | 只看该作者
总是看到有人用百度,感觉很发克

使用特权

评论回复
23
阮天宇00|  楼主 | 2012-12-13 10:43 | 只看该作者
原野之狼 发表于 2012-12-13 08:23
说来听听呀~  别掖着

没啥,已经解决了。
只是开始不懂这种文件组织方式~
头文件里面公用变量。C文件里面通过extern公用函数~
完了~

使用特权

评论回复
24
chenbb8| | 2012-12-13 11:03 | 只看该作者
很多人开始的时候都是一个main.c加上一堆模块头文件,在模块头文件中直接写函数和变量,因为只有一个c文件所谓不会出错。
但改成每个模块下一个C文件对应一个头文件的时候灾难就来了,需要将函数和变量全弄到C文件中,想要让外界使用的变量和函数
就在头文件中声明,并加extern关键词。
再进一步管理头文件,可以使用一个总的接口文件来包含头文件,而在C文件中只需要包含一个接口头文件就OK了,这样文件包含会变得
很直观和清爽,减少因为文件包含而导致的问题。
再再进一步就是文件结构分层,简单点的就是HAL层(硬件隔离层)和APPLICATION层(应用层)、LIB层(库层)每个层用一个接口文件
总领,HAL层包含LIB_PORT.H,APPLICATION层包含LIB_PORT.H和HAL.H。
另外在接口文件中的包含顺序是有讲究的,虽然顺序不会影响到C文件,但是会影响到H文件。
比如,app_menu.h中声明了这样一个函数  extern uint8_t menu_init(menu *me);其中uint8_t定义在LIB层的lib_stdint.h中,
那么application_port.h如果这样写的话就会报错:
#ifndef _application_port.h_
#define _application_port.h_

#include "app_menu.h" //0
#include "LIB_PORT.H" //1


#endif //_application_port.h_
提示uint8_t没有被定义~~将0步移到1后面就能解决问题。

使用特权

评论回复
25
chenbb8| | 2012-12-13 11:04 | 只看该作者
板子给经理拿去给客户做示范了,无聊的写了一堆文字~闪,回去继续写代码

使用特权

评论回复
26
阮天宇00|  楼主 | 2012-12-13 11:10 | 只看该作者
chenbb8 发表于 2012-12-13 11:03
很多人开始的时候都是一个main.c加上一堆模块头文件,在模块头文件中直接写函数和变量,因为只有一个c文件 ...

对头~
二师兄说的对

使用特权

评论回复
27
hdl551890| | 2012-12-13 15:20 | 只看该作者

使用特权

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

本版积分规则