【发布时间】:2021-12-25 05:41:09
【问题描述】:
我正在尝试为存储在闪存中的字符指针动态分配内存。
我需要使用 LittleFS 文件系统从闪存中读取文件并将其复制到字符数组中,该字符数组也需要使用 PROGMEM 存储在闪存中。由于空间有限,我无法将其存储在 RAM 中。我也不能直接在草图中对字符数组进行硬编码,因为我需要能够在运行时更改文件并让它在重启后保持不变。
如果我不使用 PROGMEM 作为 char 指针,则草图可以正常工作。但是添加 PROGMEM 会导致 ESP8266 抛出异常并重新启动并成为无限循环。这是一个简化的草图,展示了我想要实现的目标。
#include "LittleFS.h"
char* arr PROGMEM;
void setup() {
Serial.begin(115200);
LittleFS.begin();
File file = LittleFS.open("/test.txt","r");
arr = (char*)malloc(file.size()+sizeof(char));
int len = file.size()/sizeof(char);
for(int i = 0; i < len; i++){
arr[i] = file.read();
}
arr[len] = '\0';
while(1){
Serial.println(arr);
delay(1000);
}
}
void loop(){}
它适用于 WifiClientSecure 库。该类是 BearSSL::X509List。要为这个类创建一个对象,我需要将一个 char 指针作为参数发送给构造函数。 char 指针应包含 SSL 证书字符串的地址。我在草图数据文件夹中有我的 SSL 证书作为“ca.crt”。
【问题讨论】:
标签: c++ arduino arduino-esp8266