极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: lx872000

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

[复制链接]
发表于 2015-6-11 14:59:41 | 显示全部楼层
忽然看到一個地方想確認一下, drawBitmap 的位置是 0 開始還是 1 開始.
一般多是用  0 開始的, 但我看到你的程式, 似是用了 1 開始.
如果用 0 開始, 最大值是 479, 用了 1 開始, 最大值就變成 480, 有可能會超出預算範圍.
但你的程式並非經常出問題, 所以我也不太肯定.
回复 支持 反对

使用道具 举报

发表于 2015-6-11 15:06:51 | 显示全部楼层
再看 UTFT 的範例, 應該是 0 開始的.
  1. myGLCD.fillRect(0, 0, 479, 13);
复制代码
水平線是由 0 至 479.


你的程式中, 如果把圖貼到邊位時, 就可能會超出正常範圍了.
原本最後一行是 479,  你會發出 480 行的指令.  我不太肯定 UTFT 庫對這樣的拍令會有什麼反應.


回复 支持 反对

使用道具 举报

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

external unsigned int cm[3503];

没有特定关系,随便删走不影响
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-11 16:02:56 | 显示全部楼层
Super169 发表于 2015-6-11 15:06
再看 UTFT 的範例, 應該是 0 開始的.水平線是由 0 至 479.

改了一下,有一条之前是1-480,超了范围,但是改回小于479以后还是不行
回复 支持 反对

使用道具 举报

发表于 2015-6-11 19:41:42 | 显示全部楼层
lx872000 发表于 2015-6-11 15:44
没有特定关系,随便删走不影响

那就有點奇怪, 沒有詞用的變量, 而且已設定成 pgm, 只會佔用 flash memory, 就像一般的字庫, 應該影響不大的.

由於我沒有你的 TFT, 很難測試問題在那裡.

只好嘗試 debug 了, 你先用串口接電腦, 用 serial.print 不斷發出 debug 訊息, 看看在那裡停下來.
然後再細看出問題的地方有什麼特別.  希望不是在發出硬件指令的地方出問題.
回复 支持 反对

使用道具 举报

发表于 2015-6-11 19:46:16 | 显示全部楼层
還有一個方法測試是否你的程式有問題, 就是把範例不斷改變.
如果是因為記憶體問題, 只要修改範例, 把你的 array 也 include 進去, 然後加入 external 的定義, 執行範例.
看看只在加大記憶體使用後, 範例會否出問題.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-12 21:28:47 | 显示全部楼层
Super169 发表于 2015-6-11 19:46
還有一個方法測試是否你的程式有問題, 就是把範例不斷改變.
如果是因為記憶體問題, 只要修改範例, 把你的  ...

我在范例的基础上改了,加入外部调用的array,一样不能正常显示
回复 支持 反对

使用道具 举报

发表于 2015-6-12 22:40:12 | 显示全部楼层
lx872000 发表于 2015-6-12 21:28
我在范例的基础上改了,加入外部调用的array,一样不能正常显示

既然這樣, 就有可能是庫的限制了.

剛才看了一下 utft 的庫, 找到個不知是否有關的地方.

在 UTFT 庫, 讀取圖片資料時, 是用 pgm_read_byte 或 pgm_read_word 的, 再看看這兩個funtion:

#define pgm_read_byte(address_short)   
#define pgm_read_word(address_short)   

而 address_short 應該是 unsigned 16 bit addressing 的, 所以最大可用範圍只有 64KB.
這是不一定是直接有關, 但最少知道 UTFT 庫是不能盡用 mega 的 256KB 的.

或者你嘗試插入一些 debug message, 看看在那裡出問題吧.   可能會有一些啟示.
當看不出問題時, 這是最好的方法了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-15 19:19:04 | 显示全部楼层
Super169 发表于 2015-6-12 22:40
既然這樣, 就有可能是庫的限制了.

剛才看了一下 utft 的庫, 找到個不知是否有關的地方.

谢谢你这么耐心的解答,我已经想办法用别的方案了,不用读取那么多图片文件,把内存空间使用控制在30%以下,也勉强能用
回复 支持 反对

使用道具 举报

发表于 2015-6-15 23:43:09 | 显示全部楼层
lx872000 发表于 2015-6-15 19:19
谢谢你这么耐心的解答,我已经想办法用别的方案了,不用读取那么多图片文件,把内存空间使用控制在30%以下 ...

把原本有 256KB 的 mega 限制在只用 37% (約 94KB), 實在有點浪費.

不過, 我懷疑可能當你總數超過 37% 時有問題, 是因為要讀取的圖總數已超過 64KB, 所以觸發了 pgm_read_byte/pgm_read_word 的極限.

如果你沒需要這麼多圖, 暫時可以用限制  37% 的方法.

但是如果真的是因為這個原因, 可以嘗試把庫中的 pgm_read_byte 轉成 pgm_read_byte_far, pgm_read_word 轉成 pgm_read_word_far 看看.

回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 23:32 , Processed in 0.037815 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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