-1

嘿,有人可以告诉我这段代码是做什么的,或者这个语法是如何在 avr-gcc 下编译的?它是从 NanoVM 源代码中获取的代码,为 avr atmega128rfa1 编译它。

// 文件本身的缓冲区在 eeprom 中

ifdef NVM_USE_FLASH_PROGRAM
static u08_t nvmfile[CODESIZE] PROGMEM =
#include "nvmdefault.h"
#else
static u08_t EEPROM nvmfile[CODESIZE] =
#include "nvmdefault.h"
#endif 

注意我没有用 -DNVM_USE_FLASH_PROGRAM 编译它

4

2 回答 2

5

如果nvmdefault.h包含数组初始值设定项,则此代码应该可以正常编译,如下所示:

nvmdefault.h
{0x01, 0x02, 0x03, etc...};

至于它到底做了什么,你必须查看源代码才能确定,但​​它看起来像是在闪存或 EEPROM 存储器上分配该数组,而且,这样写它可能有充分的理由,例如数组由另一个程序或脚本生成。

于 2012-10-23T13:13:42.853 回答
0

"nvmdefault.h"就初始化列表的定义开始而言,我在此代码的编译中没有看到任何问题,如

{1, 2, 3, 4};

然后你的源将被预处理成这个(假设NVM_USE_FLASH_PROGRAM是定义的):

static u08_t nvmfile[CODESIZE] PROGMEM =
{1, 2, 3, 4};

这是一个有效的 C 代码。

考虑这个名为dirtyc.c

#ifndef C_IS_DIRTY
    #define C_IS_DIRTY
    #include <stdio.h>
    int main (void)
    #include "dirtyc.c"
#else
    { printf("hello dirty world!\n"); return 0; }
#endif
于 2012-10-23T13:19:26.063 回答