嵌入式技术论坛
直播中

王尚岱

8年用户 1515经验值
擅长:电源/新能源
私信 关注
[问答]

rt_application创建失败的原因是什么呢?如何解决?

问题:线程创建后打印log 会出现(tid != RT_NULL) assertion failed at function:rt_application_init, line number:214
我用的是n32l4xcl,sram有24k, 用的是rtthread 标准版
这样创建的线程

audio_thread = rt_thread_create("audio",
Audio_thread_entry,
RT_NULL,
2048,
2,
5);
board.h里面是这样的

#define N32_FLASH_START_ADRESS ((uint32_t)0x08000000)
#define N32_FLASH_SIZE (128 * 1024)
#define N32_FLASH_END_ADDRESS ((uint32_t)(N32_FLASH_START_ADRESS + N32_FLASH_SIZE))
/* Internal SRAM memory size[Kbytes] <24>, Default: 24 */
#define N32_SRAM_SIZE (24)
#define N32_SRAM_END (0x20000000 + N32_SRAM_SIZE * 1024)
void rt_hw_board_init(void);
#if defined(__ARMCC_VERSION)
extern int Image
RW_IRAM1

ZI
Limit;
#define HEAP_BEGIN ((void *)&Image

RW_IRAM1
ZI

Limit)
rtconfig.h里面 内存管理

/* Memory Management */
#define RT_USING_MEMPOOL
#define RT_USING_SMALL_MEM
//#define RT_USING_MEMHEAP
//#define RT_MEMHEAP_FAST_MODE
//#define RT_USING_SMALL_MEM_AS_HEAP
#define RT_USING_HEAP
我.s文件中给heap的试了0x800~0x3000 都还是报内存分配不够
看了下.map 剩余ram是从 0x20002868开始管理 应该是够的呀
1.png

我debug了下 看这里返回是空 就是没有内存可以分配
2.png

我后来把内存管理里面的宏都打开了 然后又报线程我发启动

(thread != RT_NULL) assertion failed at function:rt_thread_startup, line number:375
请问可能是哪里原因 还是不能这样创建 之前用的静态内存创建的方式是可以的 求指教

回帖(2)

chunhuahua

2023-9-7 16:27:40
既然可以调试,就单步进去,看看内存分配为何返回 NULL 吧

备注: 我.s文件中给heap的试了0x800~0x3000 都还是报内存分配不够,这里 的 heap 原则上越小越好,越小, 剩下的空间越大
举报

张昂笙

2023-9-25 10:17:37
该错误通常是由于在创建线程之前初始化RT-Thread内核时,系统堆栈和线程大小设置不正确导致的。这可能会导致应用程序无法成功创建线程并显示该错误消息。

解决方法是:

1. 确保在创建线程之前正确设置了RT-Thread内核的系统堆栈和线程大小。

2. 检查您的板级支持包(BSP)是否正确配置,特别是关于SRAM和堆栈的设置。

3. 确定您的板级支持包是否与选择的内核版本兼容。

4. 考虑调整您的应用程序代码以防止分配过多的内存和堆栈空间。

5. 如果以上方法都无法解决问题,请尝试使用调试工具来查找其他错误原因。

建议您参考RT-Thread官方文档和论坛帖子,以获取更多关于此错误的信息和解决方案。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分