2016-02-23 2 views
0

Я хочу использовать doxygen для моих проектов микроконтроллеров с avr-gcc.
Doxygen работает нормально, как и ожидалось, но у меня проблема с переменными.Использование doxygen с типами переменных avr-gcc

В 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 извлекает глобальные переменные sensitiv по контексту - это было непонятно для меня. Но проблема с переменными типа EEMEM по-прежнему существует. Я попытался определить эти переменные дополнительно как статические - это принято компилятором, но они все еще указаны неправильно. – Karsten

ответ

0

Вы можете сказать, doxygen игнорировать EEMEMPROGMEM в то время как вы на него) C препроцессора макросов, добавив следующие строки в Doxyfile:

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.

Смежные вопросы