首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Arduino: PROGMEM malloc()问题引发异常

Arduino: PROGMEM malloc()问题引发异常
EN

Stack Overflow用户
提问于 2021-12-25 05:41:09
回答 1查看 261关注 0票数 0

我正在尝试为存储在闪存中的char指针动态分配内存。

我需要使用LittleFS文件系统从闪存中读取文件,并将其复制到字符数组中,该字符数组也需要使用PROGMEM存储在闪存中。由于空间有限,我无法将它存储在RAM中。此外,我不能在草图中直接对字符数组进行硬编码,因为我需要在运行时更改文件并在重新启动后使其持久存在的能力。

如果我不使用PROGMEM作为char指针,则草图工作得很好。但是,添加PROGMEM会导致ESP8266抛出一个异常并重新启动,并成为一个无限循环。这是一个简单的草图,展示了我想要达到的目标。

代码语言:javascript
运行
复制
#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“。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-25 07:32:25

PROGMEM在构建时由链接器处理。链接器将数组定位到闪存地址空间。只有常量才能使用PROGMEM指令。

malloc分配堆内存,这是动态RAM中的一个地址范围。可以像LittleFS库那样在运行时写入闪存,但这不是使用malloc完成的。

在读取文件时处理该文件。按照您计划处理从.文件读取的数组的方式进行。

对于WifiClientSecure,可以将来自LittleFS的证书与CertStoreBearSSL一起使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70478192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档