[英]Printing array contents to Serial, Giving unexpected values
我正在嘗試通過串行發送數組內容。 這是代碼:
#include <PCM.h>
const unsigned char sample[] PROGMEM = {
126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128, 128, 126, 126, 127, 127, 127, 127, 127, 127, 126, 127, 129, 130, 129, 128, 126, 126, 126, 126, 127, 129, 130, 129, 127, 127, 127, 127, 128, 128, 128, 128, 127, 127, 127, 127, 127, 127, 128, 130, 131, 129, 127, 126, 126, 126, 127, 127, 128, 128, 128, 128, 127, 128, 128, 127, 127};
void setup()
{
Serial.begin(115200);
delay(3000);
for (int i=0; i<sizeof(sample); i++)
{
delay(100);
Serial.println(sample[i]);
}
}
void loop()
{
}
當我開始監視串口時,它給出了非預期的輸出,而不是數組中的原始值。 這是第一個代碼“with Println”的輸出:
0
0
6
0
0
0
1
0
0
6
6
6
6
6
6
6
0
0
135
0
0
6
0
0
1
3
0
6
171
0
0
0
0
0
0
0
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
6
2
6
1
4
45
0
0
6
0
6
0
248
254
這是“寫入”的輸出:我無法粘貼“寫入”的輸出,我將其捕獲為 jpg
但是,當我這樣做時,我得到了我想要的值,但是我會失去 FOR 循環,
#include <PCM.h>
const unsigned char sample[] PROGMEM = {
126, 127, 128, 128, 128, 128, 128, 127, 128, 128, 128, 129, 129, 128, 127, 128, 128, 127, 126, 127, 128, 129, 128, 127, 126, 127, 128};
void setup()
{
Serial.begin(115200);
delay(3000);
//for (int i=0; i<sizeof(sample); i++)
// {
delay(100);
Serial.println(sample[0]);
Serial.println(sample[1]);
Serial.println(sample[2]);
Serial.println(sample[3]);
Serial.println(sample[4]);
// }
}
void loop()
{
}
問題是什么? 我想不通。 任何幫助將不勝感激。
注意:對於數組中的前 5 個值,這兩個代碼應該給出相同的結果,但事實並非如此,第二個代碼給出“126 127 128 128 128”,這很好,但第一個代碼不會,它只有一個區別使用變量“i”而不是一一列出數組的所有內容。
先感謝您,
我將程序類型“ PROGMEM”的內存類型更改為普通或動態內存,此代碼中的所有內容均正常運行,我可以輕松地使用“ for”循環進行迭代,而不會出現問題。
開發人員應該找出如何使用“ for or while”或程序存儲器“ PROGMEM”中的任何循環指令進行迭代,而不僅僅是動態存儲器(或向我們展示如何存在^ _ ^)
謝謝,
Sizeof 返回系統為您的變量保留的字節數。 因為它是一個數組,所以 sizeof 不知道正在使用什么類型的變量。 要獲得可變數組大小並且您想遍歷數組,您應該檢查數組的大小以及數組一側變量的大小。
int array[] = {1,2,3,4}
size_t arraySize = sizeOf(array) / sizeOf(array[0])
這將按方面返回 4。 你明確地告訴函數它正在處理一個 int 因為它是在數組的第一個索引中定義的。 請查看此主題以獲取更多信息1 :
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.