ESP32 中的那些坑

一、nvs_get_str()函数

NVS nvs_get_str
函数原型:
esp_err_t nvs_get_str (nvs_handle handle, const char* key, char* out_value, size_t* length);
坑:

length这个参数奇葩得很,如果out_value的值为NIULL,它将返回键所对应字符串的长度(含\0),而如果out_valueNULL,则将其当作out_value的长度与字符串长度比较,如果该值小于字符串长度,就会返回ESP_ERR_NVS_INVALID_LENGTH
如果错误地将required_size单纯认为是所读字符串,并使用如下调用方式会读到错误的数据:

nvs_get_str(my_handle, "server_name", server_name, &required_size);
正确姿势:
size_t required_size;
nvs_get_str(my_handle, "server_name", NULL, &required_size);
char* server_name = malloc(required_size);
nvs_get_str(my_handle, "server_name", server_name, &required_size);
教训:

nvs.h文件里面明确的说明了这一点,所以说,在使用函数前还是得仔细读读函数注释。

二、存储空间不足

分区表 1310720
问题:

就开了个蓝牙和WiFi,才写了几行代码,还没干别的呢,怎么就97%了?ESP32你行不行啊?
在这里插入图片描述
可是ESP-WROOM-32不是4MB的flash吗?程序存储空间最大值怎么才1M多点?

坑:

arduino中的ESP32默认分区表只给了1.2MB给APP,而ESP-IDF也只给了1MB给APP

正确姿势:
Arduino

arduino里改变分区表非常方便:工具->Partition Scheme
在这里插入图片描述
这里应该结合自己的板子上的SPI FLASH大小和所需功能选择合适的分区表,笔者的ESP32的FLASH有4MB大,对文件系统没有要求,为了应对可能存在的开发需求,选了个最大的"Huge APP"。选好后重新编译下载就完成了。

ESP-IDF

大致讲一下流程:
1、在…\esp\components\partition_table目录下找到partitions_singleapp.csv文件,复制一份到工程目录下,重命名一下以免混淆,(比如my_partitions.csv)打开改文件,将对应内容修改如下:

# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x6000
phy_init, data, phy,     0xf000,  0x1000
factory,  app,  factory, 0x10000, 3M

2、打开ESP-IDF Command Prompt,cd到工程目录,idf.py menuconfig->Partition Table->Partition Tabl->Custom partition table CSV->ESC->修改名称为my_partitions.csv
在这里插入图片描述
3、重新编译下载即可

参考资料:

乐鑫官方文档
【IoT】分区表(Partition Tables):ESP32 FLASH 分区功能简析

三、GPIO12

==HSPI ==

python espefuse.py -p COM25 set_flash_voltage 3.3V

四、ESP32 屏蔽bootloader信息

上电时,GPIO15接地

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值