gpt4 book ai didi

c++ - 嵌入式 RTOS 和使用 malloc/free

转载 作者:行者123 更新时间:2023-11-28 07:31:10 26 4
gpt4 key购买 nike

我目前正在评估运行在 Cortex M4F 上的 SEGGER 的 embOS。它有 128 KB 的内部 RAM 和 2 MB 的外部 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;/* 所需的堆栈数量 */

关于c++ - 嵌入式 RTOS 和使用 malloc/free,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17676816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com