簡體   English   中英

將數組內容打印到序列號,給出意外的值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM