2012-06-10 5 views
0

매우 큰 배열을 가지고있어서 소중한 SRAM을 사용하고 싶지 않습니다. 또한 PROGMEM에서도 도움이되는 도우미 배열이 있습니다.2 차원 어레이를 PROGMEM에서 호출하도록 변환하는 방법

배열은 다음과 같습니다

이 주소를 참조 나는 과정을 (문자 당 8 바이트 각각에 대해 하나) 8 번 호출하여 문자에 대한 데이터를 얻을 이러한 배열을 사용

fontLookUp[265] 
font[96][8] 

font[fontLookUp[character]][x] 

저는 PROGMEM에서 단일 차원 배열을 읽는 방법 만 알고 있습니다 ... 어떻게 두 번째 차원 [x]을 처리 할 수 ​​있습니까?

답변

1

배열은 메모리 주소에 대한 포인터 일뿐입니다.

int font [3][5]; 
int font [15]; 

너무 동등하다 :

font[2][1]; 
font[2*5+1]; // multiply by the 5 in font[3][->5<-] 
*(font+2*5+1); 

당신은 단지 sigledimmensional로 다차원 배열을 취급합니다.

+0

그래서 "font [fontLookUp [character]] [x]"는 "(pgm_read_byte (font + pgm_read_byte (fontLookUp + character) * 8 + x))와 같이 보일 것입니다. 나는 이것을 시도하고 올바르게 작동하지 않습니다. – Dev5994

+0

시작 부분에 -> * <-를 잊어 버리면 * 글꼴로 가리키는 값을 반환합니다. 또한 하나의 char은 1 바이트 (8 비트) 만 사용한다는 것을 알아야합니다. 그래서 왜이 8 바이트를 사용하는지 이해하지는 못합니다. – uDalillu

+0

font [fontLookUp [character]] [x]는 다음과 같아야합니다. * (font + fontLookUp [character] * 8 + x) 테스트되지 않은 코드입니다. – uDalillu

관련 문제