簡體   English   中英

如何使用共享 header 和代碼文件構建 C(嵌入式)項目

[英]How to structure a C (embedded) project with shared header and code files

這是一個嵌入式應用程序的問題,但我認為該解決方案是基於語言(C)的,而不是特定於我正在使用的嵌入式編譯器(XC16)。

問題

我從單個項目中提取了許多代碼文件,以創建可以在多個項目中重復使用的共享文件集合。 這些文件將需要主應用程序中的 config.h 文件來#define該項目的許多參數。

例子

項目中的文件

配置文件

#define BUFF_SIZE 4

main.c

#include "config.h"
#include <lib.h>
/*Application Code*/

“庫”中的文件(即不在項目結構中的另一個文件夾)

庫文件

extern uint8_t Buffer [BUFF_SIZE];

lib.c

#include "lib.h"
uint8_t Buffer [BUFF_SIZE];

問題

這會產生“在 lib.h 中未聲明 BUFF_SIZE”的問題。 我的理解是編譯器將從main.c開始,從config.h加載“#define”值,然后嘗試處理lib.h header。 但似乎情況並非如此。

我是否必須將庫反向引用到 config.h 文件? 這似乎可行,但它會強制應用程序具有特定的文件名。

有沒有很好的例子說明這種結構應該如何進行?

補充說明

當我嘗試使用 map 引腳輸出以實現 bit-bang 功能時,也會出現同樣的問題。 IE

配置文件

#define DATA_OUT LATBbits.LATB4

lib.c

void SetPin(void)
{
  DATA_OUT = 1;
}

干杯:)

C 代碼是在翻譯單元的基礎上編譯的。 一個翻譯單元是一個單一的.c 文件及其包含的所有 h 文件。 所以你必須從“lib.h”中包含“config.h”。

您還需要在每個 header 中使用所謂的“標題防護”/“包含防護”。 請參閱在 C 中創建您自己的 header 文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM