2012-10-23 1 views
-1

누군가이 코드가 수행 할 의도가 무엇인지 또는 avr-gcc에서이 구문을 컴파일하는 방법을 알려주시겠습니까? NanoVM 소스 코드에서 가져온 코드이며 avr atmega128rfa1 용으로 컴파일됩니다.이상한 C 코드를 avr-gcc에서 컴파일 할 때 사용하지 말 것

파일 자체에 대한

// 버퍼가 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

+0

I 코드의 첫 번째 줄의 시작 부분에 누락 된 해시가, 오타되지 않은 용의자 :

dirtyc.c라는이 파일을 고려? – alk

+2

컴파일 할 것인지 아닌지 판단하기 위해'nvmdefault.h'의 내용을 볼 필요가 있습니다. – alk

+0

플래그를 사용하여 찾으십시오. –

답변

5

nvmdefault.h 경우에 이것을 컴파일하고 있지 않다, 이런 식으로 뭔가 :

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

정확히 무엇을 할 지, 소스 코드를 살펴 봐야하지만 모든 것 같습니다. 그 배열을 플래시 또는 EEPROM 메모리에 저장하는 것도 좋은 방법입니다. 배열은 다른 프로그램 또는 스크립트에 의해 생성됩니다.

소스가 이것으로 사전 처리됩니다

다음
{1, 2, 3, 4}; 

로 초기화 목록의 정의로 시작까지 "nvmdefault.h"으로 나는,이 코드의 컴파일에 문제가 표시되지 않습니다

0

는 (이제 NVM_USE_FLASH_PROGRAM입니다 가정 해 봅시다 정의 됨) :

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

이것은 유효한 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 
+0

코드를 컴파일해도 정상적으로 실행되지 않기 때문에. C는 C'IS_DIRTY를'__STDC__'로 대체 할 수 있도록 많은 미친 것들을 허용합니다. – Lundin

+0

@ Lundin 좋은 사례라고 말하지는 않습니다. 그냥 비슷한 예제를 보여주고 싶습니다. –

+0

코드에 아무런 문제가 없다고 말했습니까? 하지만 당신이 가장 의도 한 것은 컴파일하는데 문제가 없다는 것입니다. – Lundin

관련 문제