2013-04-04 2 views
0

Nios_2_r2c 프로세서의 데이터 캐시를 우회하기 위해 코드를 제거하고 코드를 추가해야하는 다음 C 소스 파일이 있습니다. 나는 이것을 할 방법이 없다. Nios II 프로세서의 데이터 케이지 바이 ​​패스

// file: switches.c 
#include "system.h" 
#include "pio_regs.h" 
#include "bsu_macros.h" 
#include "switches.h" 

static struct pio_regs *SW = (struct pio_regs *)SWITCH_BASE; 
static REGISTER SH_SW; 

bits get_RUN (void) { 
    SH_SW = SW->data; 
    return getbit(SH_SW, 17); 
} 

-------------------------- 

// file: ledr.c 
#include "system.h" 
#include "pio_regs.h" 
#include "bsu_macros.h" 
#include "ledr.h" 

static struct pio_regs *LEDR = (struct pio_regs *)LEDR_BASE; 
static REGISTER SH_LEDR; 

void LEDR_Init (void) { 
    SH_LEDR = 0; 
    LEDR->data = 0; 
} 

void show_RUN (bits RUN) { 
    SH_LEDR = putbit (SH_LEDR, RUN, 12); 
    LEDR->data = SH_LEDR; 
} 

는 I/O를 읽고 사용하는 인라인 어셈블리 알았어요 및 쓰기 :

// file: switches.c 
#include "system.h" 
#include "pio_regs.h" 
#include "bsu_macros.h" 
#include "switches.h" 

static struct pio_regs *SW = (struct pio_regs *)SWITCH_BASE; 
static REGISTER SH_SW; 

bits get_RUN (void) { 
    //SH_SW = SW->data; 
    __asm("ldwio %0, %1" : "=r"(SH_SW) : "m"(SW->data)); 
    return getbit(SH_SW, 17); 
} 

---------------------- 

// file: ledr.c 
#include "system.h" 
#include "pio_regs.h" 
#include "bsu_macros.h" 
#include "ledr.h" 

static struct pio_regs *LEDR = (struct pio_regs *)LEDR_BASE; 
static REGISTER SH_LEDR; 

void LEDR_Init (void) { 
    SH_LEDR = 0; 
    //LEDR->data = 0; 
    __asm("stwio %0, %1" : "=r"(SH_LEDR) : "m"(SW->data)); 
} 

void show_RUN (bits RUN) { 
    SH_LEDR = putbit (SH_LEDR, RUN, 12); 
    //LEDR->data = SH_LEDR; 
    __asm("stwio %0, %1" : "=r"(SH_SW) : "m"(SW->data)); 
} 
+0

으로 캐시를 항상하고 그들이 어떻게 아니거나하면 ... –

+0

이궁, 당신이 나타납니다 돕고있다 이 질문을하는 유일한 사람 (인터넷에서). 축하해! BTW, 나는이 책을 가지고 있다고 가정합니다. http://www.altera.com/literature/hb/nios2/n2cpu_nii5v1.pdf 당신이하려는 일에 대한 설명은 2-14 페이지를보십시오. – KevinDTimm

+0

페이지 3-53 – KevinDTimm

답변

0

당신은 -mno-cache-volatile을 사용하고 volatile으로 변수를 선언 할 수 있습니다. IO는 일부 레지스터 읽기/쓰기로 이루어지며 레지스터 액세스는 항상 변동 가능해야합니다.

https://gcc.gnu.org/onlinedocs/gcc/Nios-II-Options.html

또 다른 옵션은 그것은 당신이 바라 보았다 것을 자원 대략적으로 도움이 될 수 있습니다 -mbypass-cache