完善资料让更多小伙伴认识你,还能领取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控制器吧,然后才能用地址直接访问。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
868 浏览 0 评论
1337 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
5440 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1746 浏览 0 评论
2708 浏览 0 评论
76513 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-7 20:44 , Processed in 0.521575 second(s), Total 43, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号