suyulingxm 发表于 2014-4-3 17:06:48

Ardunio的内存到底是怎么控制的?

static const byteimage[] = {
0,255,128,0,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0,9,0,10,0,11,0,12,0,13,0,14,0,15,0,16,0,17,
0,18,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,0,29,0,30,0,31,
1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1,8,1,9,1,10,1,11,1,12,1,13,1,14,1,15,1,16,1,17,
1,18,1,19,1,20,1,21,1,22,1,23,1,24,1,25,1,26,1,27,1,28,1,29,1,30,1,31,
2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,2,8,2,9,2,10,2,11,2,12,2,13,2,14,2,15,2,16,2,17,
2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,
3,0,3,1,3,2,3,3,3,4,3,5,3,6,3,7,3,8,3,9,3,10,3,11,3,12,3,13,3,14,3,15,3,16,3,17,
3,18,3,19,3,20,3,21,3,22,3,23,3,24,3,25,3,26,3,27,3,28,3,29,3,30,3,31,
4,0,4,1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,9,4,10,4,11,4,12,4,13,4,14,4,15,4,16,4,17,
4,18,4,19,4,20,4,21,4,22,4,23,4,24,4,25,4,26,4,27,4,28,4,29,4,30,4,31,
5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,
5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,5,28,5,29,5,30,5,31,
6,0,6,1,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6,11,6,12,6,13,6,14,6,15,6,16,6,17,
6,18,6,19,6,20,6,21,6,22,6,23,6,24,6,25,6,26,6,27,6,28,6,29,6,30,6,31,
7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,
7,18,7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,7,27,7,28,7,29,7,30,7,31,
8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,8,14,8,15,8,16,8,17,
8,18,8,19,8,20,8,21,8,22,8,23,8,24,8,25,8,26,8,27,8,28,8,29,8,30,8,31,
9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,
9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,9,27,9,28,9,29,9,30,9,31,
10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,
10,15,10,16,10,17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10,27,10
,28,10,29,10,30,10,31,
11,0,11,1,11,2,11,3,11,4,11,5,11,6,11,7,11,8,11,9,11,10,11,11,11,12,11,13,11,14,
11,15,11,16,11,17,11,18,11,19,11,20,11,21,11,22,11,23,11,24,11,25,11,26,11,27,11
,28,11,29,11,30,11,31,
12,0,12,1,12,2,12,3,12,4,12,5,12,6,12,7,12,8,12,9,12,10,12,11,12,12,12,13,12,14,
12,15,12,16,12,17,12,18,12,19,12,20,12,21,12,22,12,23,12,24,12,25,12,26,12,27,12
,28,12,29,12,30,12,31,
13,0,13,1,13,2,13,3,13,4,13,5,13,6,13,7,13,8,13,9,13,10,13,11,13,12,13,13,13,14,
13,15,13,16,13,17,13,18,13,19,13,20,13,21,13,22,13,23,13,24,13,25,13,26,13,27,13
,28,13,29,13,30,13,31,
14,0,14,1,14,2,14,3,14,4,14,5,14,6,14,7,14,8,14,9,14,10,14,11,14,12,14,13,14,14,
14,15,14,16,14,17,14,18,14,19,14,20,14,21,14,22,14,23,14,24,14,25,14,26,14,27,14
,28,14,29,14,30,14,31,
15,0,15,1,15,2,15,3,15,4,15,5,15,6,15,7,15,8,15,9,15,10,15,11,15,12,15,13,15,14,
15,15,15,16,15,17,15,18,15,19,15,20,15,21,15,22,15,23,15,24,15,25,15,26,15,27,15
,28,15,29,15,30,15,31
};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
for(int i=0;i<sizeof(image);i++)
Serial.println(image);
}


void loop() {
// put your main code here, to run repeatedly:

}

打印的结果不可控制,,,求解。。。

Super169 发表于 2014-4-3 17:17:19

是否超出了 SRAM 的上限?

suyulingxm 发表于 2014-4-3 17:18:36

Super169 发表于 2014-4-3 17:17 static/image/common/back.gif
是否超出了 SRAM 的上限?

SRAM 这是Ardunio的存储器?

Super169 发表于 2014-4-3 17:18:37

如果是 static const 的話, 用 PROGMEM 會更好, 節省寶貴的 SRAM.

suyulingxm 发表于 2014-4-3 17:20:05

Super169 发表于 2014-4-3 17:18 static/image/common/back.gif
如果是 static const 的話, 用 PROGMEM 會更好, 節省寶貴的 SRAM.

但是输出的结果不是原来数组的。。。。

histamine 发表于 2014-4-3 17:21:46

PROGMEM定义的数据保存在flash中需要用专用函数读出来:lol

Super169 发表于 2014-4-3 17:24:11

suyulingxm 发表于 2014-4-3 17:18 static/image/common/back.gif
SRAM 这是Ardunio的存储器?

Yes, 是用來儲存可以在程式執行時改變數值的資料.
如果是 const, 放到 PROGMEM (flash) 中也可以了.

suyulingxm 发表于 2014-4-3 17:24:42

histamine 发表于 2014-4-3 17:21 static/image/common/back.gif
PROGMEM定义的数据保存在flash中需要用专用函数读出来

那这个专用的函数名字是?

suyulingxm 发表于 2014-4-3 17:26:24

Super169 发表于 2014-4-3 17:24 static/image/common/back.gif
Yes, 是用來儲存可以在程式執行時改變數值的資料.
如果是 const, 放到 PROGMEM (flash) 中也可以了.

我这么大的数据量,,,其打印的数据都是乱的

Super169 发表于 2014-4-3 17:28:38

suyulingxm 发表于 2014-4-3 17:20 static/image/common/back.gif
但是输出的结果不是原来数组的。。。。

我用 Nano 328 測試過沒問題, 所以才懷疑你用的是只有 1K SRAM 的 Arduino.
如果記憶體足夠, 會不會是你的 Baudrate 不配合?

你看到的結果是怎樣的?

Super169 发表于 2014-4-3 17:31:44

histamine 发表于 2014-4-3 17:21 static/image/common/back.gif
PROGMEM定义的数据保存在flash中需要用专用函数读出来

只是改一句 code, 值得的. :victory:

最近在研究 顯示的問題, 一頁的 display buffer 就用了 1KB, 我還在研究是否要把最後的 1KB 內置 EEPROM 也用上.

suyulingxm 发表于 2014-4-3 17:34:55

suyulingxm 发表于 2014-4-3 17:26 static/image/common/back.gif
我这么大的数据量,,,其打印的数据都是乱的

0
0
184
0
0
0
1
0
0
184
184
184
184
184
184
184
0
0
135
0
0
184
0
0
1
3
0
184
18
0
0
0
0
0
0
0
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
1
4
239
0
0
184
0
184
0
248
254
255
0
0
184
184
2
184
6
184
207
0
0
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
184
。。。
我的是UNO。。。难道买上山寨货了?

Super169 发表于 2014-4-3 17:39:26

suyulingxm 发表于 2014-4-3 17:34 static/image/common/back.gif
0
0
184


我在 nano 上試過, 完全沒有問題.出來的數字跟程式中的一樣.

你可以試試用 PROGMEM, 在這裡有詳細說明: http://arduino.cc/en/Reference/PROGMEMhttp://arduino.cc/en/Reference/PROGMEM

基本上加一個 PROGMEM 的字, 讀取時改成 pgm_read_byte 或 pgm_read_word 的語法就可以了.

Super169 发表于 2014-4-3 17:44:44

suyulingxm 发表于 2014-4-3 17:34 static/image/common/back.gif
0
0
184


难道买上山寨货了?

arduino 可是 hardware opensource 的, 難道你用的是原廠來路正品??

我用的可是貨真價實的 國產山寨貨.

Super169 发表于 2014-4-3 17:49:53

試試這樣修改, 看看用 PROGMEM 是否可以:


PROGMEM byteimage[] = {


};
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
for(int i=0;i<sizeof(image);i++)
Serial.println(pgm_read_byte(&(image)));
}


void loop() {
// put your main code here, to run repeatedly:

}


页: [1] 2
查看完整版本: Ardunio的内存到底是怎么控制的?