极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 39533|回复: 24

Arduino mega2560驱动显示屏,程序占用存储空间超过37%就不显示了,程序无报错

[复制链接]
发表于 2015-6-10 21:57:06 | 显示全部楼层 |阅读模式
本帖最后由 lx872000 于 2015-6-10 22:13 编辑

     用Arduino mega2560驱动显示屏(ITDB02-4.3)显示图案,程序无报错,但是存储空间占用只要超过37%,显示屏就变成灰的了,不显示内容,但是空间占用小于37%的时候就可以正常显示,请问这是什么问题啊。。。有什么解决办法。。。急。。。。,感谢各位

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-6-10 22:53:55 | 显示全部楼层
只佔用 37%, 一般不會是記憶體不足而造成.
有可能是程式中某些 pointer 亂了, 比如沒預番空間就使用, 又或是指到空間以外的地方, 不正常使用記憶體.
全白屏有可能是早期初啟的程序沒完成就出現記憶體錯誤調用了.

當然, 如果是高解像的屏幕, 而又要用上 buffer 的話, 一個 320x480 16色的畫面, 就要用上 75KB 的記憶體, 如果是 256色, 就要 150KB 了.  不過, 相信這樣耗記憶體的話, 在單片機上, 驅動中不會用上 display buffer 的設計吧.
回复 支持 反对

使用道具 举报

发表于 2015-6-10 23:52:02 | 显示全部楼层
改变默认buffer大小
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 00:01:18 | 显示全部楼层
Super169 发表于 2015-6-10 22:53
只佔用 37%, 一般不會是記憶體不足而造成.
有可能是程式中某些 pointer 亂了, 比如沒預番空間就使用, 又或 ...

感谢你的回答,请问有什么解决办法吗。。。怎么查看是否是pointer乱了或者预分配空间?
回复 支持 反对

使用道具 举报

发表于 2015-6-11 00:07:13 | 显示全部楼层
lx872000 发表于 2015-6-11 00:01
感谢你的回答,请问有什么解决办法吗。。。怎么查看是否是pointer乱了或者预分配空间?

如果是程式中的問題, 只可以看程式吧.
如果是 buffer 太大所致, 而又可以自己設定的話, 像樓上說的, 把 buffer 減少.  這個比較容易做, 可以的話, 先試試.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 00:55:51 | 显示全部楼层
Super169 发表于 2015-6-11 00:07
如果是程式中的問題, 只可以看程式吧.
如果是 buffer 太大所致, 而又可以自己設定的話, 像樓上說的, 把  ...
  1. #define SERIAL_TX_BUFFER_SIZE 32
  2. #define SERIAL_RX_BUFFER_SIZE 32
复制代码
这样改么,好像也没用啊
回复 支持 反对

使用道具 举报

发表于 2015-6-11 01:25:27 | 显示全部楼层
本帖最后由 Super169 于 2015-6-11 01:27 编辑
lx872000 发表于 2015-6-11 00:55
这样改么,好像也没用啊


這是 串口的 buffer, 只是 64 bytes, 不會有影響的.
我們說的是 display 用的 buffer, 一般如果有的話, 會在 屏幕的庫中設定.  
但並不一定有的, 之前寫1106/1306 的庫時, 也只是在畫圖功能才有需要.  一般文字顯示, 可以不需要的.
而且, 如果是一點一個 byte 的話, 甚至畫圖也不用 buffer, 除非需要做一些混色的功能.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 02:04:04 | 显示全部楼层
Super169 发表于 2015-6-11 01:25
這是 串口的 buffer, 只是 64 bytes, 不會有影響的.
我們說的是 display 用的 buffer, 一般如果有的話 ...

我是需要显示图片的,很多个很小的图片,屏幕分辨是480*272,用的是UTFT的库,好像没看到哪里有改buffer的额。。。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 02:04:24 | 显示全部楼层
Super169 发表于 2015-6-11 01:25
這是 串口的 buffer, 只是 64 bytes, 不會有影響的.
我們說的是 display 用的 buffer, 一般如果有的話 ...

我是需要显示图片的,很多个很小的图片,屏幕分辨是480*272,用的是UTFT的库,好像没看到哪里有改buffer的额。。。。
回复 支持 反对

使用道具 举报

发表于 2015-6-11 10:32:24 | 显示全部楼层
本帖最后由 Super169 于 2015-6-11 10:37 编辑
lx872000 发表于 2015-6-11 02:04
我是需要显示图片的,很多个很小的图片,屏幕分辨是480*272,用的是UTFT的库,好像没看到哪里有改buffer的 ...


我是用自己的庫, 不太肯定 UTFT 是否有類似的 buffer 設定, 有時間幫你看看吧.  可否給我庫的連結.

如果要繪圖, 就要看看它提供了什麼功能了.  如果是單色屏, 因為一次要輸出 8 個點的資料, 當要更新一個點時, 要同時知道有關的 7 個點當前的狀況, 如果屏幕沒有提供回傳當前狀況的功能, 就必須要自己建立 buffer 去把屏幕上每個粒都記下來.

但你的屏幕相信應該是多色的吧, 只要是 256色或以上, 每次單點輸出, 就不用理會其他點的狀況.  除非庫中提供混合顏色的功能, 又或有物件移動之類, 要知道原來的狀況, 又或要做快速轉頁, 先把頁面在背後造好了, 再用連續輸出作快速更新.  否則應該可以不需要用記憶體作 buffer.  以上要視乎所用的庫提供了什麼功能, 所以要看庫的內容才可以決定.  直接的圖片輸出, 只需要把想顯示的點輸出去, 不用理會原先的狀況, 可以不用 buffer 的.

但如果真的要用上記憶體作 Buffer, 以 480 * 272 (256色) 去計算....要儲存一個版面就要用 128KB 了.....不是每個 arduino 板子都可以應付的, 應該會提及板子的特別要求.  你那個庫有提及要用 mega 之類才可用嗎?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 11:30:49 | 显示全部楼层
Super169 发表于 2015-6-11 10:32
我是用自己的庫, 不太肯定 UTFT 是否有類似的 buffer 設定, 有時間幫你看看吧.  可否給我庫的連結.

...

http://www.rinkydinkelectronics.com/library.php?id=51
我用的就是这个库,不只是针对2560用,uno等其他的都可以,我使用的时候放进去的图没有480*272这么大的分辨,只是几个60*25等之类的小尺寸,只有一个版面,没有翻页
回复 支持 反对

使用道具 举报

发表于 2015-6-11 12:33:34 | 显示全部楼层
本帖最后由 Super169 于 2015-6-11 12:42 编辑

粗略看了一遍, 好像沒有用到缓冲的做法, 提供的功能都是直接把有需要的點改變, 沒有理會原來的狀況.


連結的庫有 480x272 的範例 (UTFT_Demo_480x272.ino), 你執行這個範例會有問題嗎?
如果沒有問題, 就是你的程式中有問題了.
回复 支持 反对

使用道具 举报

发表于 2015-6-11 12:51:08 | 显示全部楼层
你之前說 "空间占用小于37%的时候就可以正常显示", 即是那個庫沒有問題吧.  既然那個庫對記憶體沒特別要求, 相信是庫內佔用記憶體過多的機會不大.  而且簡單掃瞄了一次, 庫中並沒有在執行中要求額外記憶體.  換句話說, 如果 compile 時沒出問題, 就代表記憶體是足夠了.

你把空间占用減少, 應該是把程式的部份刪掉, 會否是剛掉了的地方才是問題所在.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 14:31:22 | 显示全部楼层
Super169 发表于 2015-6-11 12:51
你之前說 "空间占用小于37%的时候就可以正常显示", 即是那個庫沒有問題吧.  既然那個庫對記憶體沒特別要求, ...

程序都是类似这样调用的,不知道哪里有冲突,只要超过37%就不显示;随便去掉一个外部调用,只要减小到37%以下就又正常

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2015-6-11 14:47:25 | 显示全部楼层
你的意思, 是把當中幾句 comment out, 省下 9.5K 左右 就可以了嗎?

external unsigned int cm[3503];
external unsigned int tm[4681];
external unsigned int toff[1600];

當中應該有要調用資料的程序吧.

是否只把這三句改回來, 就會出現問題?  
而這三個 array 中的資料, 在程式中完全沒有調用, 可以隨便刪走也不影響程式?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 22:29 , Processed in 0.066610 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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