自定义单片机字库的过程中,为了快速检索目标字符串,把所有字符的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: [=== ]