【问题标题】:doxygen a variable is recognized as functiondoxygen 变量被识别为函数
【发布时间】:2013-11-13 08:56:09
【问题描述】:

在我当前的项目中,我正在尝试使用 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();

关于代码的注意事项:代码是为 8051 微控制器的 SDCC compiler 编写的。 __xdata __at () 指令是一个特殊指令,因此编译器知道它必须将数据放在一个单独的内存段(称为 XDATA)中的预定位置(地址 0x0F00)。

我的问题是 doxygen 将 __at() 识别为函数而不是变量,因此覆盖了 main() 函数。

虽然有一些方法可以让 doxygen 忽略 __xdata __at () char Programmed 语句,但缺点是变量被忽略,因此没有记录。

那么有没有人知道如何让 doxygen 将 __xdata __at () char Programmed 识别为变量而不是函数?

【问题讨论】:

    标签: c doxygen 8051 sdcc


    【解决方案1】:

    我的策略是使用 doxygen 宏隐藏(定义为空)编译器魔法(未经测试;玩弄):

    PREDEFINED = __xdata= \
                 __at()=
    

    您还可以查看EXPAND_AS_DEFINED 的文档。

    PS:你的操作系统真的允许void-returning main 吗?如果没有,你应该使用int main(void)

    【讨论】:

    • 就是这样。感谢您及时回复。需要提一下,它还需要设置ENABLE_PREPROCESSING = YESMACRO_EXPANSION = YESEXPAND_ONLY_PREDEF = YES其余的可以默认
    • 关于 main() 的返回:我在一个没有操作系统的微控制器上。所以如果我的主要出口我有一个大问题;-)。我的主要是void main(void){ while(1){} }。这在微控制器上是完全正常的。
    • +1 简洁的方法;但它确实会强制执行在一般情况下可能不理想的其他设置。另一种方法是用\cond ... \endcond cmets 将__xdata __at (0x0F00) 前导码包围起来,假设编译器对断开xdata 行感到满意。
    • @Cheeseminer 看起来你的方法也有效。虽然我确实为这个案子保留了一行:/*!\cond XDATAIGNORE*/__xdata __at (0x0F00) /*!\endcond*/ volatile static unsigned char Programmed; /*!&lt; ...*/。这种方法的缺点是代码有一种更混乱的“感觉”。所以我将使用@Jens 的方法,但这也有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 2017-01-19
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    相关资源
    最近更新 更多