嵌入式RTOS和使用malloc/free
Embedded RTOS and using malloc/free
我目前正在评估Cortex M4F上运行的SEGGER的embOS。它有128千字节的内部RAM和2兆字节的外部RAM,所以我知道我有足够的内存。
我的程序使用了一些动态分配(是的,我知道这在嵌入式系统上是不推荐的)。
在启动任务时,我尝试调用malloc/OS_malloc
,其中OS_malloc
是embOS提供的线程安全版本。在这两种情况下,malloc
都失败并返回NULL指针。
在操作系统启动前执行相同的malloc/OS_malloc
时,它工作正常:
**//Malloc here does not fail**
OS_IncDI(); /* Initially disable interrupts */
**//Malloc here does not fail**
OS_InitKern(); /* Initialize OS */
**//Malloc here does fail !!**
OS_InitHW(); /* Initialize Hardware for OS */
OS_CREATETASK(&TCBHP, "My Task", HPTask, 50, StackHP); //**<--And off course malloc failes inside teh task also**
OS_Start();
我去尝试使用MICRIUM的uCOS,我看到了同样的行为。你知道为什么会这样吗?
我认为我在路上解决这个问题。
链接器脚本中的设置似乎是:
_Min_Heap_Size=0x19000;/*所需堆数量*/_Min_Stack_Size=0x200;/*所需堆叠数量*/
而不是:
_Min_Heap_Size=0x00;/*所需堆数量*/_Min_Stack_Size=0x200;/*所需堆栈数量*/
malloc
可能在以下条件下返回失败
1) Running out of memory
,但正如你所说,我有足够的内存,所以事实并非如此。
2) malloc is not able to allocate contiguous memory of requested size
。
我想选项2对你的情况负责。
相关文章:
- 在 malloc 之后检查 &在调用 free() 之前
- Malloc()/free()在Windows上的几个线程中崩溃
- 如果在 C++ 中的 malloc() 之后调用 free() 则会出现错误
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- 如果malloc/free对显然做了同样的工作,为什么C++标准库容器使用内存池
- 在类中使用malloc/free
- 在 C++ 中将 malloc/free 替换为 new/delete
- 如何将'malloc'和'free'替换为'new'和"删除"?
- 在C++中,"new/delete"在结构上代替"malloc/free"有多好?
- 基于malloc/free的STL分配器
- 使用 malloc/free 来模拟新建/删除
- 标准C++的哪些部分将调用malloc/free而不是new/delete
- C++中的 malloc/free 和 new/delete 兼容性
- 编译器将 malloc/free 或 new/delete 对优化为 alloca
- 为什么使用 malloc/free,当我们有 new/delete 时
- 嵌入式RTOS和使用malloc/free
- 将static_cast<字符 *>malloc/free/free转换为新的/删除
- c++中的malloc/free:为什么free不接受const void*,有没有更好的方法?
- 列出Xcode, iOS中最后的X malloc/free调用
- 用静态链接重新定义malloc/free有多个定义错误