前提・実現したいこと
Arduinoのプログラムで、それぞれの配列の長さが違うので複合リテラルを使って初期化したポインタを変数としてPROGMEM機能を使った際に思った通りになりませんでした。
どうすれば上手くいくのか、できないのであれば理由を教えていただけると幸いです。
下記のプログラムは例ですが、同じ問題になっています。
ソースコード
Arduino
1const int *const Length[3] PROGMEM = { 2 (int[]){58, 63, 65, 58, 0}, 3 (int[]){62, 67, 69, 62, 0}, 4 (int[]){65, 70, 72, 65, 0} 5}; 6 7void setup() { 8 Serial.begin(9600); 9} 10 11void loop() { 12 Serial.println(pgm_read_byte(&(Length[0][2]))); 13 //「65」と出力してほしいが、「207」と出力される 14 Serial.println(pgm_read_byte(&(Length[1][2]))); 15 //「69」と出力してほしいが、「207」と出力される 16 Serial.println(pgm_read_byte(&(Length[2][2]))); 17 //「72」と出力してほしいが、「207」と出力される 18 while(1){} 19}
試したこと
######PROGREMだけ
Arduino
1const int Length[3][4] PROGMEM = { 2 {58, 63, 65, 58, 0}, 3 {62, 67, 69, 62, 0}, 4 {65, 70, 72, 65, 0} 5}; 6 7void setup() { 8 Serial.begin(9600); 9} 10 11void loop() { 12 Serial.println(pgm_read_byte(&(Length[1][2]))); 13 //「69」と出力される 14 while(1){} 15}
######複合リテラルだけ
Arduino
1const int *Length[3] = { 2 (int[]){58, 63, 65, 58, 0}, 3 (int[]){62, 67, 69, 62, 0}, 4 (int[]){65, 70, 72, 65, 0} 5}; 6 7void setup() { 8 Serial.begin(9600); 9} 10 11void loop() { 12 Serial.println(Length[1][2]); 13 //「69」と出力される 14 while(1){} 15}
補足情報
Arduino 1.8.13
Arduino Uno を使っています。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 13:40
2020/07/24 14:12
2020/07/26 08:35
2020/07/26 09:17