これは私がこのようなものを見るのは初めてです。私はそれがハードウェア障害であると思われ始めている。 私は配列 "test"の内容を送信しようとすると、その配列が4要素より大きい場合、または宣言のすべての要素を初期化します。初期化しようとする値の代わりに0xffが含まれています。AVR gcc、奇妙な配列の振る舞い
これは問題なく動作します。私は(LCDおよびUARTに送信)、一方の配列から値を読み出すときに、両方の読み取り値はテスト値と一致している:これはない
uint8_t i=0;
uint8_t test[4] = {1,2,3,4};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
、代わりにテストは0xFFを返し[i]の値:
をuint8_t i=0;
uint8_t test[5] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
でも、これが機能します。それは適切な値
uint8_t i=0;
uint8_t test[6] = {1,2,3,4,5};
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
これも作品を返す:私は別のMCUとスワップアウトのlinux
上でコンパイルし、それはそれが必要ように動作したときに、それが正常に動作
uint8_t i=0;
uint8_t test[5];
test[0]=1;
test[1]=2;
test[2]=3;
test[3]=4;
test[4]=5;
while(i<5){
GLCD_WriteData(test[i]);
USART_Transmit(test[i]);
i++;
}
。ハードウェアの問題である必要があります
この質問は特に明確ではありません。コードを貼り付けるだけでなく、私たちに精神的にそれを相違させてください。 *問題点を説明してください。あなたは "0xFF"を返します - どこからですか?そのコードはどこにも表示されません。送信に問題がある場合は、受信側の結果を気にするのはなぜですか?問題を切り分けてください。あなたはUARTを送信していますよね?さて、明白なデバッグのステップは、実際にポートから出てくるものを見ることです。 –
配列のサイズが変わっても、ループの境界は決して変化しません。それは常に「while(i <5)」です。これが 'ARRAY_LENGTH'マクロが便利な理由です。 –
投稿を編集して正しく作成しました。問題は、私は通常、配列[] = {1,2,3}を行う方法で配列を初期化すると、それが0xffを含む私の値の代わりに4つの要素よりも大きいことです。 6つ以上の要素配列を宣言し、最後の要素をスキップして初期化するとうまく動作します。 私は怠惰から(i <5)値を変更していませんでしたが、問題には影響しません。配列に4つの要素がある場合、それらを正しく出力する+ 1つの迷惑行を出力する、5つの要素を持つ場合は0xffを5回出力する、6つの要素を持つが5を初期化する場合は5つの適切な値がある – Barricadexx