求助:ENC28J60和W5110同时使用的问题
用UNO的板子,接W5110显示中文和ENC28J60的网络功能,发现ENC28J60的byte Ethernet::buffer设置较大或W5110设置数组显示汉字的时候程序会无法运行,是何原因?是否是328的运行内存不足,能否有什么好的解决办法呢? 如果獨立使用沒問題, 加起來便出問題的話, 有可能是內存不足.UNO SRAM 只有 2K, 如果 ENC28J60的 buffer 已用去 700 byte, 萬一 W5110 同時有字庫放在 SRAM 上, 2K 的 SRAM 應該不足夠.要看看 W5110 庫的字, 是放到 flash 還是 SRAM 了.
由於字庫是不需要在執行時更新的, 放到 flash memory 中, 可大大減低對 SRAM 的需求. 本帖最后由 TOP 于 2014-7-30 11:38 编辑
Super169 发表于 2014-7-30 11:04 static/image/common/back.gif
如果獨立使用沒問題, 加起來便出問題的話, 有可能是內存不足.
UNO SRAM 只有 2K, 如果 ENC28J60的 buffer...
谢谢回复!单独使用都没问题,而且我将buffer调小了也是可以正常运行的,W5110用的是LCD5110_Basic库,如何将字库文件放到 flash memory中呢?查看库文件中fontdatatype SmallFont[] PROGMEM 这样运行是在SRAM还是在falsh memory呢?
TOP 发表于 2014-7-30 11:29 static/image/common/back.gif
谢谢回复!单独使用都没问题,而且我将buffer调小了也是可以正常运行的,W5110用的是LCD5110_Basic库, ...
用了 PROGMEM 的話, 應該是放在 flash memory 中了.
不過, 要小心點, 有些庫會多了一句 #define PROGMEM 的, 猜想可能是誤解了 flash memory 的用法, 以為要先設定 PROGMEM, 所以加上一句 #define PROGMEM.
要使用 flash memory 在讀取時都語法是不同的, 跟 SRAM 有很大分別, 如果加了一句 #define PROGMEM 並不會 enable PROGMEM, 反而是把 PROGMEM 設定成空白.
原來的一句:fontdatatype smallFont[] PROGMEM 就會變成 fontdatatype smallFont[], 之後執後時用 SRAM 的方式, 自然沒問題了....但只是等同於把 PROGMEM 刪去, 用回 SRAM.
所以, 要確定是否用了 flash memory, 除了看變數的定義, 最實際還是看程式中如何運用該變數, 又或確定 PROGMEM 是否被重新定義了.
页:
[1]