我正在尝试为存储在闪存中的char指针动态分配内存。
我需要使用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“。
发布于 2021-12-25 07:32:25
PROGMEM在构建时由链接器处理。链接器将数组定位到闪存地址空间。只有常量才能使用PROGMEM指令。
malloc
分配堆内存,这是动态RAM中的一个地址范围。可以像LittleFS库那样在运行时写入闪存,但这不是使用malloc完成的。
在读取文件时处理该文件。按照您计划处理从.文件读取的数组的方式进行。
对于WifiClientSecure,可以将来自LittleFS的证书与CertStoreBearSSL一起使用。
https://stackoverflow.com/questions/70478192
复制相似问题