极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20563|回复: 20

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

[复制链接]
发表于 2014-4-3 17:06:48 | 显示全部楼层 |阅读模式
  1. static const byte  image[] = {
  2. 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,
  3. 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,
  4. 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,
  5. 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,
  6. 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,
  7. 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,
  8. 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,
  9. 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,
  10. 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,
  11. 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,
  12. 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,
  13. 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,
  14. 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,
  15. 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,
  16. 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,
  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,
  18. 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,
  19. 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,
  20. 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,
  21. 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,
  22. 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,
  23. 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
  24. ,28,10,29,10,30,10,31,
  25. 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,
  26. 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
  27. ,28,11,29,11,30,11,31,
  28. 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,
  29. 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
  30. ,28,12,29,12,30,12,31,
  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,
  32. 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
  33. ,28,13,29,13,30,13,31,
  34. 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,
  35. 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
  36. ,28,14,29,14,30,14,31,
  37. 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,
  38. 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
  39. ,28,15,29,15,30,15,31
  40. };
  41. void setup() {
  42.   // put your setup code here, to run once:
  43. Serial.begin(9600);
  44. for(int i=0;i<sizeof(image);i++)
  45. Serial.println(image[i]);
  46. }


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

  49. }
复制代码


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

使用道具 举报

发表于 2014-4-3 17:17:19 | 显示全部楼层
是否超出了 SRAM 的上限?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 17:18:36 | 显示全部楼层
Super169 发表于 2014-4-3 17:17
是否超出了 SRAM 的上限?

SRAM 这是Ardunio的存储器?
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:18:37 | 显示全部楼层
如果是 static const 的話, 用 PROGMEM 會更好, 節省寶貴的 SRAM.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 17:20:05 | 显示全部楼层
Super169 发表于 2014-4-3 17:18
如果是 static const 的話, 用 PROGMEM 會更好, 節省寶貴的 SRAM.

但是输出的结果不是原来数组的。。。。
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:21:46 | 显示全部楼层
PROGMEM定义的数据保存在flash中需要用专用函数读出来
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:24:11 | 显示全部楼层
suyulingxm 发表于 2014-4-3 17:18
SRAM 这是Ardunio的存储器?

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

使用道具 举报

 楼主| 发表于 2014-4-3 17:24:42 | 显示全部楼层
histamine 发表于 2014-4-3 17:21
PROGMEM定义的数据保存在flash中需要用专用函数读出来

那这个专用的函数名字是?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-3 17:26:24 | 显示全部楼层
Super169 发表于 2014-4-3 17:24
Yes, 是用來儲存可以在程式執行時改變數值的資料.
如果是 const, 放到 PROGMEM (flash) 中也可以了.

我这么大的数据量,,,其打印的数据都是乱的
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:28:38 | 显示全部楼层
suyulingxm 发表于 2014-4-3 17:20
但是输出的结果不是原来数组的。。。。

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

你看到的結果是怎樣的?
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:31:44 | 显示全部楼层
histamine 发表于 2014-4-3 17:21
PROGMEM定义的数据保存在flash中需要用专用函数读出来


只是改一句 code, 值得的.

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

使用道具 举报

 楼主| 发表于 2014-4-3 17:34:55 | 显示全部楼层
suyulingxm 发表于 2014-4-3 17:26
我这么大的数据量,,,其打印的数据都是乱的

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。。。难道买上山寨货了?
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:39:26 | 显示全部楼层
suyulingxm 发表于 2014-4-3 17:34
0
0
184

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

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

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

使用道具 举报

发表于 2014-4-3 17:44:44 | 显示全部楼层
suyulingxm 发表于 2014-4-3 17:34
0
0
184
难道买上山寨货了?


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

我用的可是貨真價實的 國產山寨貨.  
回复 支持 反对

使用道具 举报

发表于 2014-4-3 17:49:53 | 显示全部楼层
試試這樣修改, 看看用 PROGMEM 是否可以:


  1. PROGMEM byte  image[] = {


  2. };
  3. void setup() {
  4.   // put your setup code here, to run once:
  5. Serial.begin(9600);
  6. for(int i=0;i<sizeof(image);i++)
  7. Serial.println(pgm_read_byte(&(image[i])));
  8. }


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

  11. }
复制代码


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 00:06 , Processed in 0.036449 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表