完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
单片机内置有500K RAM,但是不够用,需要外扩2M的PSRAM,而这个外扩的PSRAM和内置的RAM空间是不连续的,现在的设想是把整个外扩的2M PSRAM来作为系统的内存堆,即系统的malloc,线程等等空间。 rt_system_heap_init((void *)(MALLOC_PSRAM_BASE), (void *)MALLOC_PSRAM_END); 在初始化内存的时候,我把该函数的参数改为PSARM的起始地址和结束地址,结果运行的时候报错,提示 thread:main stack overflow 也不知道问题出在哪 |
|
相关推荐
3个回答
|
|
|
我倒觉得你这里PSRAM本身映射可能有问题。
你用的主芯片和PSRAM是啥型号?建议先对PSRAM所在地址空间进行测试,单字节/双字节/4字节/连接多字节/非对齐。 都测试正常后,再参考这个贴子看看。 https://club.rt-thread.org/ask/question/421539.html 另外,默认malloc建议使用内部SRAM,psram因为性能问题,建议只做数据缓冲,可以封装出一个 psram_malloc |
|
|
|
|
|
static struct rt_memheap psram_heap;
void *psram_malloc(unsigned long size) { return rt_memheap_alloc(&psram_heap, size); } void psram_free(void *ptr) { rt_memheap_free(ptr); } void *psram_calloc(unsigned int n, unsigned int size) { void* ptr = NULL; ptr = psram_malloc(n * size); if (ptr) { memset(ptr, 0, n * size); } return ptr; } void *psram_realloc(void *ptr, unsigned long size) { return rt_memheap_realloc(&tcm_heap, ptr, size); } void psram_init(void) { rt_system_heap_init(RT_HW_SDRAM_BEGIN, RT_HW_SDRAM_END); // 默认malloc的heap,只能1次 rt_memheap_init(&psram_heap, "PSRAM", RT_HW_PSRAM_BEGIN, RT_HW_PSRAM_END-RT_HW_PSRAM_BEGIN); // 新加的独立块,这行可以多次不同的区域。 } |
|
|
|
|
|
需要先初始化单片机的PSRAM控制器吧,然后才能用地址直接访问。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 00:33 , Processed in 0.685978 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4814