2014-12-05 43 views
2

그래서 저는 잠시 동안 DE2-155 보드에서 SD 카드 뮤직 플레이어를 만들고 있습니다. 나는 마침내 하드웨어를 마쳤으며 C로 코딩을 마무리했다. 그러나 프로젝트를 빌드하기 전에 계속 오류가 발생합니다. "정수가 0b00100000"인 접미사가 잘못되었습니다.NIOS II 오류 : 정수 상수의 접미사가 잘못되었습니다.

#include <io.h> 
#include <system.h> 

#include "altera_up_avalon_audio_and_video_config.h" 
#include "altera_up_avalon_audio.h" 

#define SD_CARD_OFFSET_RXTX 0 
#define SD_CARD_OFFSET_CMD 560 
#define SD_CARD_OFFSET_CMD_ARG 556 
#define SD_CARD_OFFSET_ASR 564 

#define SD_CONNECTED  0x02 
#define SD_COMPLETE  0x04 
#define SD_BLOCK_SIZE  512 
#define SD_CMD_READ  0x11 

int main() 
{ 
    int *sd_asr = (int *)(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE + SD_CARD_OFFSET_ASR); 
    short int sd_status; 
    int res; 
    int sector_count, byte_count; 
    unsigned int l_buff,r_buff; 

alt_up_av_config_dev* cfg_dev; 
alt_up_audio_dev* audio_dev; 

/* Wait for SD-Card */ 

printf("Wait for SD-Card to be connected...\n"); 

do{ 
    sd_status=(short int)IORD_16DIRECT(sd_asr,0); 
}while((sd_status & SD_CONNECTED) == 0); 

printf("SD-Card connected.\n"); 

/* Initialize CFG/Audio Device */ 

cfg_dev=alt_up_av_config_open_dev("/dev/audio_and_video_config_0"); 

if(cfg_dev == NULL){ 
    printf("Config device not found.\n"); 
}else{ 
    printf("Config device opened for configuration.\n"); 
} 

printf("Resetting config device and peripherals...\n"); 

res = alt_up_av_config_reset(cfg_dev); 

alt_up_av_config_write_audio_cfg_register(cfg_dev,0x08,0b00100000); 

if(res == 0){ 
    printf("Reset successful.\n"); 
}else{ 
    printf("Reset failed.\n"); 
} 

/* Play Music */ 

audio_dev = alt_up_audio_open_dev("/dev/audio_0"); 

if(audio_dev == NULL){ 
    printf("Failed to open audio device.\n"); 
}else{ 
    printf("Audio device opened.\n"); 
} 

printf("Starting playback!\n"); 

sector_count=0; 
while(1) 
{ 
    /* Read 512B sector from SD-Card */ 
    IOWR_32DIRECT(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE,SD_CARD_OFFSET_CMD_ARG,sector_count*512); 
    IOWR_16DIRECT(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE,SD_CARD_OFFSET_CMD,SD_CMD_READ); 
    do{ 
     sd_status=(short int)IORD_16DIRECT(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE,SD_CARD_OFFSET_ASR); 
    }while((sd_status & SD_COMPLETE) != 0); 

    byte_count=0; 
    while(byte_count < 512){ 
     l_buff = (unsigned int)IORD_16DIRECT(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE,SD_CARD_OFFSET_RXTX+byte_count); 
     r_buff = (unsigned int)IORD_16DIRECT(ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_BASE,SD_CARD_OFFSET_RXTX+(byte_count+2)); 
     byte_count+=4; 
     while(alt_up_audio_write_fifo_space(audio_dev,ALT_UP_AUDIO_RIGHT) < 4){ asm("NOP"); } 
      alt_up_audio_write_fifo (audio_dev, &(r_buff), 1, ALT_UP_AUDIO_RIGHT); 
      alt_up_audio_write_fifo (audio_dev, &(l_buff), 1, ALT_UP_AUDIO_LEFT); 
     } 

     sector_count++; 
    } 

    return 0; 
} 

답변

1

오류

alt_up_av_config_write_audio_cfg_register(cfg_dev,0x08,0b00100000); 

0b00100000 정수 값이 광고에

:

여기에 내 C 코드이다. 정수 값이 으로 시작하는 경우 다음 문자는 x이어야하며 정수를 16 진수로 선언해야합니다. 그렇지 않으면 octal number으로 해석됩니다. 8 진수 단지 숫자 0

0b00100000 제해야 할 것은 32가 0x20 또는 16 진수 인 이진.

0b00100000 같은 진수가 활성화 GCC 확장에만 GCC에서 지원도 Can I use a binary literal in C or C++?

참조하십시오.

+1

32로 바꾸 었으며 오류가 사라졌습니다. 나는 그것이 사실일지도 모른다라고 생각했다. 그러나 누군가 나에게 바이너리가 그들에게 도움이되었다라고 나에게 이야기했다. 그래서 나는 묻는다. 도와 주셔서 감사합니다! – mightynifty