现在的位置: 首页 > 综合 > 正文

Keil uVision2下项目文件组织

2013年12月05日 ⁄ 综合 ⁄ 共 795字 ⁄ 字号 评论关闭
 Keil uVision2 项目文件的组织

一般的,C代码编写的项目文件的组织按照GNU C规范是很省心的,可是Keil C51环境下却有所不同,如果只是简单的对源文件和目录结构进行操作是达不到希望的组织结构的效果的,还需要修改Keil uVision2的项目属性、文件属性才行。

gnu C环境下我一般是这样组织项目文件的:
1、划分3类目录:全局共享目录global、子函数目录(多个)、静态数据目录(lib)。
2、global下的分为两类文件:数据定义类(.c)和其它类型声明、编译指示(.h)(!不包含函数声明)。这些全局数据都要在.h中用extern声明。
3、lib目录下放置全局的或者局部的静态数据、常量。其中的全局数据也要在.h中用extern声明。
4、子函数目录下放置子函数的实现(.c)和接口声明(.h),为了确保二者一致性,.c文件总是在第一行#include XXX.h。对于子函数所用到的头文件是这么处理的:跟接口直接有关的,放在 .h文件里;其余不公开的放在 .c 里面。.h文件不包含数据定义,即调用时的数据传递要么是以参数和返回值为载体,要么就是整个程序的全局共享数据(!没有什么局部共享数据
5、为了确保 .h 文件包含的唯一性,所有内容都用 #ifndef XXX   #def XXX .......... #endif 包围起来,让 .h 文件自身检查有无重复。
6、最上层的主函数通过include直接下一层的文件来解决依赖关系。

但是在 Keil uVision2下,这样做还不够,往往会出现重复引用、未解析的外部引用、多重公共定义之类链接器的抱怨(错误或者警告)。其实并不是源文件编写、组织的问题,而是项目配置属性不对,需要把所有的接口声明文件 .h 从建构环节去除:在文件属性中勾掉始终建构和产生汇编SRC两项。就是说只是在编译阶段说明一下那些自函数的实现是在别的文件里就行了,不要参与下一步链接工作。

抱歉!评论已关闭.