嵌入式技术论坛
直播中

刘伟

8年用户 1720经验值
私信 关注
[问答]

为何RTT使用SDRAM当作堆栈动态创建线程时会报错呢

用GD32F470外扩SDRAM(IS42S16400),已经测试了读写没问题,但是使用SDRAM当作堆栈动态创建线程的时候报错,提示:

(rt_object_get_type(&m->parent) == RT_Object_Class_Memory) assertion failed at function:rt_smem_alloc, line number:289

有人知道这是啥原因么?

这个是堆栈的挂载地址:

#define EXT_SDRAM_BEGIN (0xC0000000U) /* the begining address of external SDRAM /
#define EXT_SDRAM_END (EXT_SDRAM_BEGIN + (8U * 1024 * 1024)) /
the end address of external SDRAM */

sdram初始化没问题,运行测试代码也没问题

回帖(3)

王静

2022-12-30 15:47:29
SDRAM要在清BSS和搬运DATA前初始化好,建议只当堆使用
举报

刘伟

2022-12-30 15:47:36
INIT_BOARD_EXPORT(rt_hw_sdram_init);调用这个宏初始化的
举报

王静

2022-12-30 15:47:42
把除idle 外的所有线程都删掉,调试一下能不能跑
然后加一个main线程,只跑一个delay,这样能不能跑
逐步把timer finsh 等加上,这些都能跑就说明内存没问题
idle 线程都跑不起来就是有问题
举报

更多回帖

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