2016-02-23 46 views
0

我想用avr-gcc爲我的微控制器項目使用doxygen。
Doxygen工作正常,但我對變量有問題。使用帶有avr-gcc變量類型的doxygen

在avr-gcc中使用了doxygen無法識別的特殊變量類型。就像在這個例子中:

static uint8_t timeout;  ///< timeout counter 
static uint16_t bootcount;  ///< boot counter 
volatile uint8_t seconds;  ///< system time seconds 
volatile uint8_t minutes;  ///< system time minutes 

uint32_t EE_lifetime EEMEM = 0; ///< overall time in use 
uint8_t EE_dummy EEMEM = 0xFF; ///< http://www.atmel.com/webdoc/AVRLibcReferenceManual/FAQ_1faq_eeprom_corruption.html 

當我運行doxygen只有揮發性變量列出正確,所有其他全局變量被忽略。

EEPROM中的變量已經完全搞砸了,因爲在概覽中只列出了第一個變量,其餘的都沒有。
在詳細視圖中,只列出了EE_dummy,但帶有所有EEPROM變量的註釋。

變量類型在/usr/lib/avr/include/stdint.h
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdint.html

定義在的Doxyfile的設置應該是正確的:

SEARCH_INCLUDES = YES 
ENABLE_PREPROCESSING = YES 

我無法找出什麼錯了還是失蹤?

前一段時間,有一個類似的問題,這是沒有回答。
https://stackoverflow.com/questions/34796928/doxygen-uint8-t-and-other-stdint-h-inttypes-h-integer-types

Result in the browser

+0

關於靜態變量,檢查EXTRACT_STATIC的設置(我假設你也看到了靜態變量爲全局,你在你的代碼片段顯示它們) – albert

+0

關於uint32t和uint8_t可變看到「uint32_t的EE_lifetime」和「uint8_t EE_dummy 「作爲變量EEMEM的類型,從而導致組合其文檔(並忽略第二種類型)的一個變量。 – albert

+0

謝謝albert - EXTRACT_STATIC被設置爲NO。這是這個變量沒有記錄的原因。 EXTRACT_STATIC = YES,它們列出的是正確的。我認爲doxygen會根據上下文來提取全局變量,這對我來說並不明顯。 但類型EEMEM的變量的問題仍然存在。 我試圖將這個變量定義爲靜態 - 這被編譯器接受 - 但它們仍然是錯誤的。 – Karsten

回答

0

你可以告訴doxygen通過添加以下行到Doxyfile忽略EEMEM(和PROGMEM,而你在它)C預處理宏:

PREDEFINED += EEMEM:= 
PREDEFINED += PROGMEM:= 

然後doxygen會讀你的代碼行

uint32_t EE_lifetime EEMEM = 0; ///< overall time in use 

作爲

uint32_t EE_lifetime = 0; ///< overall time in use 

產生用於EE_lifetime預期文檔。