2016-11-20 42 views
0

我正在開發一個嵌入式項目,但我的問題更多地是關於一般性的最佳實踐。從編譯庫的角度來定義extern聲明變量的地方

我正在寫一個源文件,它將在微控制器上運行一個外設,並在頭文件中聲明兩個緩衝區,這些緩衝區可以正常工作。

extern volatile struct my_buffer peripheral_Tx_Buffer; 
extern volatile struct my_buffer peripheral_Rx_Buffer; 

對於位上下文它們volatile,因爲它們應該在一ISR內工作和struct my_buffer是由一個陣列,讀出和寫入頭的一個簡單的循環緩衝器。

現在一切都好,但我打算將它編譯成一個庫,以便我可以在不透露任何內容的情況下將源代碼提供給其他人。現在,這不是有史以來最聰明的或革命性的代碼,但我更喜歡對自己保留某些東西。無論如何,那不是重點!

我想知道的是在哪裏定義兩個緩衝區。它們是全球性的,因此用戶可以處理存儲在peripheral_Rx_Buffer中的輸入數據並通過peripheral_Tx_Buffer寫入外設。

由於它們是在公共標題中聲明的(所以它們的存在是已知的)我應該讓最終用戶(可以是未來我)每次將庫用於其他項目時都有責任定義它們嗎?例如將它們定義在程序的主要部分,即main()所在的位置。

或者我最好在pheripheral.c中定義它們,它們將被編譯到庫中,以便我確信它們實際上會存在(消除一個潛在的錯誤來源)?

我應該如何溝通怎麼做?什麼樣的文件?

回答

0

我會建議封裝兩個緩衝區 - 把它們靜態放在源文件中。而不是暴露緩衝區,你應該寫在頭文件公共API來訪問它們(讀,寫等)。您可以使用doxygen爲其他開發人員提供文檔公開功能。通過這種方式,您可以確信兩個緩衝區在代碼中只存在一次,任何人都可以通過暴露的API訪問它們。

此外,通過以您想要的方式書寫訪問功能,您可以限制最終用戶可以對兩個緩衝區執行的操作。