2013-11-13 3 views
1

В моем текущем проекте я пытаюсь создать документацию с помощью doxygen. Однако у меня проблема с переменной. Как-то doxygen распознает переменную как функцию.doxygen переменная распознается как функция

Код:

__xdata __at (0x0F00) volatile static unsigned char Programmed; /*!< an indicator if  the board is programmed or not, during init copied from flash to xram*/ 

/*! 
* The main loop that does all the magic 
* besides the "compiler startup" _sdcc_external_startup (in HWInit.c) is called to handle some "urgent" init (disabling of the watchdog) 
*/ 
void main(void){ 
    unsigned short int TempUSInt; 
    //init the device. 
    Init_Device(); 

Примечание о коде: код написан для SDCC compiler для 8051 микроконтроллера. Директива __xdata __at() - это специальная инструкция, поэтому компилятор знает, что она должна помещать данные в отдельный сегмент памяти (называемый XDATA) в заданном месте (адрес 0x0F00).

Мое предположение заключается в том, что doxygen распознает __at() как функцию вместо переменной и таким образом перезаписывает функцию main().

Хотя есть способы сделать doxygen игнорировать заявление __xdata __at() char Programmed, это имеет обратную сторону, что переменная игнорируется и, следовательно, не документирована.

Так есть ли кто-нибудь, кто знает, как заставить doxygen распознать __xdata __at() char Programmed как переменную вместо функции?

ответ

2

Моя стратегия была бы скрыть (определить как пустое) магия компилятор из Doxygen с Doxygen макросов (непроверенной; поиграться):

PREDEFINED = __xdata= \ 
      __at()= 

Вы также можете посмотреть на документы для EXPAND_AS_DEFINED.

PS: Действительно ли ваша ОС разрешает void -принятие основной? Если нет, вы должны использовать int main(void).

+0

Все. Спасибо за быстрый ответ. я должен упомянуть, что это также требует настройки 'ENABLE_PREPROCESSING = YES' ' MACRO_EXPANSION = YES' 'EXPAND_ONLY_PREDEF = YES' остальное может быть по умолчанию – user2986756

+0

О возврате основной(): Я на микроконтроллере с нет ОС. Так что, если мои основные выходы у меня есть большая проблема ;-). Моя основная суть «void main (void) {while (1) {}}'. Это нормально для микроконтроллеров. – user2986756

+0

+1 Прекрасный подход; но он заставляет те другие настройки, которые могут быть не идеальными в общем случае. Альтернативой было бы окружение только '__xdata __at (0x0F00)' преамбулы комментариями '\ cond' ...' \ endcond', предполагая, что компилятор рад сломать строку xdata. – Cheeseminer

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