完善资料让更多小伙伴认识你,还能领取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控制器吧,然后才能用地址直接访问。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
快速部署!米尔全志T527开发板的OpenCV行人检测方案指南
7486 浏览 0 评论
3047 浏览 0 评论
边缘设备的奇妙之旅:在小凌派-RK2206上部署AI模型来实现视觉巡线
1457 浏览 0 评论
5178 浏览 0 评论
超强算力+实时响应!米尔发布基于STM32MP25x核心板Debian系统
9885 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-5-10 00:10 , Processed in 0.481610 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191