极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12723|回复: 3

求助:ENC28J60和W5110同时使用的问题

[复制链接]
发表于 2014-7-30 10:54:22 | 显示全部楼层 |阅读模式
用UNO的板子,接W5110显示中文和ENC28J60的网络功能,发现ENC28J60的byte Ethernet::buffer[700]设置较大或W5110设置数组显示汉字的时候程序会无法运行,是何原因?是否是328的运行内存不足,能否有什么好的解决办法呢?
回复

使用道具 举报

发表于 2014-7-30 11:04:41 | 显示全部楼层
如果獨立使用沒問題, 加起來便出問題的話, 有可能是內存不足.
UNO SRAM 只有 2K, 如果 ENC28J60的 buffer 已用去 700 byte, 萬一 W5110 同時有字庫放在 SRAM 上, 2K 的 SRAM 應該不足夠.  要看看 W5110 庫的字, 是放到 flash 還是 SRAM 了.  

由於字庫是不需要在執行時更新的, 放到 flash memory 中, 可大大減低對 SRAM 的需求.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-30 11:29:26 | 显示全部楼层
本帖最后由 TOP 于 2014-7-30 11:38 编辑
Super169 发表于 2014-7-30 11:04
如果獨立使用沒問題, 加起來便出問題的話, 有可能是內存不足.
UNO SRAM 只有 2K, 如果 ENC28J60的 buffer  ...


谢谢回复!单独使用都没问题,而且我将buffer调小了也是可以正常运行的,W5110用的是LCD5110_Basic库,如何将字库文件放到 flash memory中呢?查看库文件中fontdatatype SmallFont[] PROGMEM 这样运行是在SRAM还是在falsh memory呢?
回复 支持 反对

使用道具 举报

发表于 2014-7-30 13:34:00 | 显示全部楼层
TOP 发表于 2014-7-30 11:29
谢谢回复!单独使用都没问题,而且我将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 是否被重新定義了.
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 19:50 , Processed in 0.048771 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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