Arduino,esp8266,esp32 处理String 类型的暗伤

31 篇文章 2 订阅
25 篇文章 0 订阅

自定义单片机字库的过程中,为了快速检索目标字符串,把所有字符的unicode编码全部读到了一个String 类型的变量上,然后调用indexof来获取对应的位置,再然后按照位移找到目标字符的编码数据。

 运行好好的程序切换到esp8266下居然不能用了,查找了大半天原因,最后发觉出现在数据类型string上。

对于string的操作会出现赋值不全的情况,举例来说,我的字符数据31K,在esp8266上只能读取到16k左右,而esp32却是正常的31k。

这个问题之前也类似出现过,一直不知道原因,还一直以为string是有操作长度,今天终于搞明白了:RAM不够。

ESP8266 

HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash

ESP32

HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash 

 在esp和arduino环境下,对string进行累加过程中,它能累加的长度是受限于ram的可用空间,8266下的ram有限,它能对string的赋值就有限。

这个问题的关键是这种累加产生的缺失它不报错,所以压根都不知道字符串出现了缺失。

所以如果不是特别必要,不论那种类型存储的数据都不要特别的多。

相同的代码,在不同类型编译下:

esp32

RAM:   [=         ]   6.7% (used 21964 bytes from 327680 bytes)
Flash: [===       ]  28.9% (used 378921 bytes from 1310720 bytes)

esp8266

RAM:   [====      ]  36.4% (used 29828 bytes from 81920 bytes)
Flash: [===       ]  31.8% (used 331811 bytes from 1044464 bytes) 

某种角度如果不是简单的控制,需要的GPIO不多,esp8266已经是不应该选择了,我是由于当时烧的太多,一口气买了太多8266了。大哭。

补充说明一点:

过去对于esp32 系列的单片机,wroom和wrover系列到底有什么不同一直没有搞明白,其实就是这个,wrover提供了更多的rom,一般情况下玩玩wroom已经够了,需要更多的内存就需要考虑wrover了或者扩展psram空间。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值