c语⾔多⽂件夹⼯程,⼀个⼯程⾥如何包含多个.c⽂件和多个.h
⽂件,然后让它能顺利编译通过...
俺⼿头这个项⽬是42个C⽂件,50个h⽂件,呵呵,全部是俺⼀个⼈写的。
要想多个⽂件链接好,⾸先你⾃⼰的⽂件组织结构要好,⾄少便于你⾃⼰搜索东西,⽂件命名也要有⼀定的规律。
⼀个C⽂件⼀定对应⼀个H⽂件,H⽂件主要作⽤是⼀个窗⼝作⽤,告诉别⼈你可以⽤我的哪些东西,别的⽂件想调⽤,包含它的H⽂件就可以了,然后你⼀股脑把那些C⽂件添加进去就OK了。注意extern和static这两个关键字。
⼤家不妨看看我随便从我项⽬中抓出的⼀个H⽂件:
DrvTimer0.h:
#ifndef _DRVTIMER0_H_
#define _DRVTIMER0_H_
#ifdef _DRVTIMER0_C_
#define EXTERN
#else
#define EXTERN extern
#endif
#define TIMER0_PRE_FREQ0 0 // T/C Stop
#define TIMER0_PRE_FREQ1 BIT(CS00) // CLK / 1
#define TIMER0_PRE_FREQ2 BIT(CS01) // CLK / 8
#define TIMER0_PRE_FREQ3 (BIT(CS01) | BIT(CS00)) // CLK / 32
#define TIMER0_PRE_FREQ4 BIT(CS02) // CLK / 64
#define TIMER0_PRE_FREQ5 (BIT(CS02) | BIT(CS00)) // CLK / 128
#define TIMER0_PRE_FREQ6 (BIT(CS02) | BIT(CS01)) // CLK / 256
#define TIMER0_PRE_FREQ7 (BIT(CS02) | BIT(CS01) | BIT(CS00)) // CLK / 1024
#define TIMER0_PRE_CLK0 0
#define TIMER0_PRE_CLK1 1
#define TIMER0_PRE_CLK2 8
#define TIMER0_PRE_CLK3 32
#define TIMER0_PRE_CLK4 64
#define TIMER0_PRE_CLK5 128
#define TIMER0_PRE_CLK6 256
#define TIMER0_PRE_CLK7 1024
#if (FOSC == 1000000)
#define TIMER0_PRE_FREQ TIMER0_PRE_FREQ5
#define TIMER0_PRE_CLK TIMER0_PRE_CLK5
#elif (FOSC == 8000000)
#define TIMER0_PRE_FREQ TIMER0_PRE_FREQ7
#define TIMER0_PRE_CLK TIMER0_PRE_CLK7
#endif
#if 0
#define TIMER0_FREQ (double)((double)FOSC / TIMER0_PRE_CLK)
#define TIMER0_CNT (double)(1 / TIMER0_FREQ)
#define TIMER0_COUNT(ms) (double)(((double)ms / 1000)/ TIMER0_CNT)
#define SET_TIMEO_TCNT(ms) (BYTE)(256 - (TIMER0_COUNT(ms) + 0.5))
#else
settimer头文件#define SET_TIMEO_TCNT(ms) (BYTE)(256 - (BYTE)(((double)ms * FOSC) / (TIMER0_PRE_CLK * 1000) + 0.5)) #endif
#define PAR_SYS_CLK 0
#define PAR_PAN_CLK 1
#define PAR_TIL_CLK 2
#define PAR_CAM_CLK 3
#define PAR_KEY_CLK 4
#define PAR_MAX_CLK 5
#define APP_STAT_CLK 0
#define APP_CAM_CLK 1
#define APP_CAM_SRV_CLK 2
#define APP_MAX_CLK 3
EXTERN void vSetTimer0(BYTE bVal);
EXTERN void vStartTimer0(BYTE bTimerPreFreq);
EXTERN void vStopTimer0(void);
EXTERN void vSetParClk(BYTE bClkId, BYTE bClk);
EXTERN BYTE bGetParClk(BYTE bClkId);
EXTERN void vSetAppClk(BYTE bClkId, WORD wClk);
EXTERN BOOL fgGetAppClk(WORD *pwClk, BYTE bClkId);
EXTERN BOOL fgTimer0Wizard(void);
EXTERN void vInitTimer0(void);
#undef EXTERN
#endif
关于系统架构,⼤家可以参考我另外⼀个⼩松⼯程下的回帖。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论