2016-06-19 11 views
0

PROGMEM에 여러 개의 2D 배열이 있습니다.PROGMEM 배열을 2D PROGMEM 배열로 만드는 방법

다른 배열에 저장하려고하므로 2 차원 PROGMEM 배열의 PROGMEM 배열이 필요합니다.

그런 다음 데이터를 읽고 싶습니다. 내가이 일을 생각하고 어떻게

error: cannot convert 'const byte (*)[2] {aka const 
unsigned char (*)[2]}' to 'const byte* const {aka const 
unsigned char* const}' in initialization 

: 여기

내가

void myFunc() 
{ 
    const static byte DATA1[3][2] PROGMEM = 
    { 
    -1, 6, 
    -3, 6, 
    -5, 5 
    }; 
    const static byte DATA2[3][2] PROGMEM = 
    { 
    1, 0, 
    1, 0, 
    1, 0 
    }; 
    const static byte DATA3[6][2] PROGMEM = 
    { 
    0, 1, 
    1, 3, 
    2, 4, 
    4, 4, 
    6, 3, 
    7, 1 
    }; 
    //PROGMEM array of 2d arrays in PROGMEM 
    const static byte* const MY_DATA[] PROGMEM = {DATA1, DATA2, DATA3}; 

    //read out the data now: 
    byte myData = pgm_read_byte(&((MY_DATA[arrayNum])[x][y])); 

    //use the data here, etc, etc... 
} 

내 오류입니다이 무엇입니까? 나는 주변을 읽었고, 이것을 1 시간 이상 잘 이해하려고 노력하고 있었다. 내가 뭘 잘못하고 있는지 모르겠다.

투표 참조 쪽

  1. http://www.nongnu.org/avr-libc/user-manual/pgmspace.html
  2. http://www.nongnu.org/avr-libc/user-manual/group__avr__pgmspace.html#ga963f816fc88a5d8479c285ed4c630229
  3. https://www.arduino.cc/en/Reference/PROGMEM
+0

왜 downvote? –

+1

먼저 올바른 유형을 사용해보십시오. '정적 정적 바이트 (* const MY_DATA []) [2] PROGMEM = {DATA1, DATA2, DATA3}; ' – MikeCAT

+0

그게 전부 야. 감사! 미안하지만, 나는 정확하게 이해하지 못한다고 말해야 만합니다. 대답 해 주시고 자세히 설명해 주시겠습니까? –

답변

1

MY_DATA 요소의 유형으로 const byte (*)[2]으로 변환 등 const byte* const하지만 DATA1이며 그 잘못 또는 메시지가 암시하므로 유형 불일치가 발생합니다. 표현식의 배열은 단항 연산자 & 또는 sizeof과 같은 일부 예외를 제외하고 첫 번째 요소를 가리키는 포인터로 자동 변환됩니다.

사용 올바른 유형이 같은 const byte (*)[2] 포인터 배열 :

const static byte(* const MY_DATA[])[2] PROGMEM = {DATA1, DATA2, DATA3}; 

이 "CONST 바이트의 어레이 (2)에 CONST 포인터 배열 정적 변수 MY_DATA"입니다.

cdecl에 따르면 const char(* const MY_DATA[99])[2];은 "const char의 배열 2에 대한 const 포인터의 배열 99"로 MY_DATA로 디코딩 될 수 있습니다. 몇 가지 수정을 통해 올바른 유형의 구현을 얻을 수 있습니다.

const없이 유형 선언을 일반 표현식 평가의 역순으로 디코딩 할 수 있습니다. (죄송합니다, 현재 디코딩 한정어가 좋지 않습니다.)이 방법에서는 byte(*MY_DATA[])[2]을 해독하겠습니다.

일반 식 평가 :

  1. MY_DATA
  2. MY_DATA[] : MY_DATA
  3. *MY_DATA[]의 일부 요소 : 요소
  4. (*MY_DATA[])[2] 역 참조 : 역 참조 것의 일부 요소

디코딩 타입 선언 (@ 의해 아직 표시되어 디코딩되지 일)

  1. byte @ : 무언가 갖는 형태 byte
  2. byte @[2] : byte
  3. 의 포인터 2 소자 어레이 : 2 소자 어레이 byte
  4. byte (*@)[2]
  5. byte (*@[])[2] : 2 요소 배열에 대한 포인터의 배열 byte
  6. byte (*MY_DATA[])[2] : MY_DATA, 2 요소 배열에 대한 포인터의 배열 byte