3

Arduino IDE でコンパイルされた次のスニペットを検討してください。

PROGMEM  char charSet[]  = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF };
char reversed[]          = { 0x0, 0x8, 0x4, 0xc, 0x2, 0xA , 0x6, 0xE, 0x1, 0x9,0x5, 0xD, 0x3,0xB,0x7,0xF };
char ff;

for (int i=0; i < 16; i++) {
    Serial.print(" ");
    Serial.print(reversed[i], HEX);
}

Serial.println(" ");
for (int i=0; i < 16; i++) {
    Serial.print(" ");
    ff = pgm_read_byte(&charSet[i]);
    Serial.print(ff);
}

2 つの for ループが同じ出力を生成することを期待します。しかし、出力は次のとおりです。

  0 8 4 C 2 A 6 E 1 9 5 D 3 B 7 F
  FFFFFF94 FFFFFFB0 6 FFFFFF80 FFFFFF91 FFFFFFC7 3 62 FFFFFFE3 E FFFFFF94 5E 29 FFFFFF99 23 39

私は何が欠けていますか?

4

4 に答える 4

4

はい、constキーワードがありません。

gcc-avr で非推奨prog_charとしてマークされているため、使用するのはおそらく良い考えではありません。avr/pgmspace.hを参照してください。

于 2012-08-30T20:07:11.457 に答える
1

その答えは PROGMEM 宣言でした。constキーワードを追加して、関数から移動する必要がありました。データ型としてのその他の変更が機能していませんでした。

完全な答えはArduinoフォーラムにあります。

于 2012-08-30T07:50:53.323 に答える
0

データ型が間違っています。http://arduino.cc/en/Reference/PROGMEMから:

プログラム メモリ呼び出しに通常のデータ型を使用すると、いくつかの不可解なバグが生成されます。

使用できませんchar-使用する必要がありますprog_char

そう:

PROGMEM prog_char charSet[] = {0x0, 0xB}

それはうまくいくはずです。

ところで:あなたはする必要はありませんSerial.println(" "); あなたはただすることができますSerial.println();

于 2012-08-29T20:20:32.800 に答える
0
PROGMEM  char charSet[] = ...

これは良くありません。PROGMEM データの場合、通常のメモリ内型は使用できません。あなたがすべきことは

PROGMEM  prog_char charSet[] = ...
于 2012-08-29T20:23:26.103 に答える