2016-02-23 64 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预期文档。