Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
堆_heap_动态内存管理
SDRAM
外部内存分配SDRAM
发布于 2020-09-18 14:06:04 浏览:1763
订阅该版
![20de4ac7501389d07753bf66c85d334b.png](/uploads/20200918/20de4ac7501389d07753bf66c85d334b.png) 用rt_memheap_init分配堆内存,一到初始化任务分配内存的时候就会出现问题 ![QQ截图20200918140332.png](/uploads/20200918/544479dc5b327f773a3a2f0d8791cc9b.png) 请教一下是什么原因导致这种情况
查看更多
2
个回答
默认排序
按发布时间排序
RXGC_5534
2020-09-18
这家伙很懒,什么也没写!
已经可以分配 ```c #if defined(RT_USING_MEMHEAP) && defined(RT_USING_MEMHEAP_AS_HEAP) rt_system_heap_init((void *) SDRAM_BANK_ADDR, (void *) STM32_SDRAM_END); rt_memheap_init(&system_heap, "sdram", (void *)SDRAM_BANK_ADDR, IS42S16400J_SIZE); #else rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END); #5567 ``` 但是还是会死机,是哪里操作不对吗
YMQQ_3390
2021-05-15
这家伙很懒,什么也没写!
先在.s文件 里面添加FSMC_SRAM_Init()函数,实现外部SDRAM的初始化如下图: ![s文件添加代码.png](https://oss-club.rt-thread.org/uploads/20210515/0a7c178e9671a84d82dcead7162fc004.png) 然后在初始化的时候先调用 ```c rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); ``` 初始化内部SRAM,然后调用 ``` rt_memheap_init(&system_heap,"sdram",(void *)0x68000000,0x100000); ``` 将外部SDRAM挂载到heap_map里面。编译下载后,就可以用rt_malloc等接口了。 FSMC_SRAM_Init()如下: ```c void FSMC_SRAM_Init(void) { /*-- GPIOs Configuration -----------------------------------------------------*/ /* Enable GPIOD, GPIOE, GPIOF and GPIOG interface clock */ RCC->AHB1ENR |= 0x00000078; //PD0,1,4,5,8~15 100M AF OUT_PP UP //PE0,1,7~15 100M AF OUT_PP UP //PF0~5,12~15 100M AF OUT_PP UP //PG0~5,10 100M AF OUT_PP UP /* Connect PDx pins to FMC Alternate function */ GPIOD->AFR[0] = 0x00CC00CC; GPIOD->AFR[1] = 0xCCCCCCCC; /* Configure PDx pins in Alternate function mode */ GPIOD->MODER = 0xAAAA0A0A; /* Configure PDx pins speed to 100 MHz */ GPIOD->OSPEEDR = 0xFFFF0F0F; /* Configure PDx pins Output type to push-pull */ GPIOD->OTYPER = 0x00000000; /* pull-up for PDx pins */ GPIOD->PUPDR = 0x55550505; /* Connect PEx pins to FMC Alternate function */ GPIOE->AFR[0] = 0xC00000CC; GPIOE->AFR[1] = 0xCCCCCCCC; /* Configure PEx pins in Alternate function mode */ GPIOE->MODER = 0xAAAA800A; /* Configure PEx pins speed to 100 MHz */ GPIOE->OSPEEDR = 0xFFFFC00F; /* Configure PEx pins Output type to push-pull */ GPIOE->OTYPER = 0x00000000; /* pull-up for PEx pins */ GPIOE->PUPDR = 0x55554005; /* Connect PFx pins to FMC Alternate function */ GPIOF->AFR[0] = 0x00CCCCCC; GPIOF->AFR[1] = 0xCCCC0000; /* Configure PFx pins in Alternate function mode */ GPIOF->MODER = 0xAA000AAA; /* Configure PFx pins speed to 100 MHz */ GPIOF->OSPEEDR = 0xFF000FFF; /* Configure PFx pins Output type to push-pull */ GPIOF->OTYPER = 0x00000000; /* pull-up for PFx pins */ GPIOF->PUPDR = 0x55000555; /* Connect PGx pins to FMC Alternate function */ GPIOG->AFR[0] = 0x00CCCCCC; GPIOG->AFR[1] = 0x00000C00; /* Configure PGx pins in Alternate function mode */ GPIOG->MODER = 0x00200AAA; /* Configure PGx pins speed to 100 MHz */ GPIOG->OSPEEDR = 0x00300FFF; /* Configure PGx pins Output type to push-pull */ GPIOG->OTYPER = 0x00000000; /* pull-up for PGx pins */ GPIOG->PUPDR = 0x00100555; /*-- FMC/FSMC Configuration --------------------------------------------------*/ /* Enable the FMC/FSMC interface clock */ RCC->AHB3ENR |= 0x00000001; //寄存器清零 //bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。 //这里我们使用NE3 ,也就对应BTCR[4],[5]。 FSMC_Bank1->BTCR[4]=0X00000000; FSMC_Bank1->BTCR[5]=0X00000000; FSMC_Bank1E->BWTR[4]=0X00000000; //操作BCR寄存器 使用异步模式,模式A(读写共用一个时序寄存器) //BTCR[偶数]:BCR寄存器;BTCR[奇数]:BTR寄存器 FSMC_Bank1->BTCR[4]|=1<<12;//存储器写使能 FSMC_Bank1->BTCR[4]|=1<<4; //存储器数据宽度为16bit //操作BTR寄存器 (HCLK=168M, 1个HCLK=6ns FSMC_Bank1->BTCR[5]|=8<<8; //数据保持时间(DATAST)为9个HCLK 6*9=54ns FSMC_Bank1->BTCR[5]|=0<<4; //地址保持时间(ADDHLD)未用到 FSMC_Bank1->BTCR[5]|=0<<0; //地址建立时间(ADDSET)为0个HCLK 0ns //闪存写时序寄存器 FSMC_Bank1E->BWTR[4]=0x0FFFFFFF;//默认值 //使能BANK1区域3 FSMC_Bank1->BTCR[4]|=1<<0; } ```
撰写答案
登录
注册新账号
关注者
0
被浏览
1.8k
关于作者
RXGC_5534
这家伙很懒,什么也没写!
提问
31
回答
30
被采纳
0
关注TA
发私信
相关问题
1
rt_malloc 申请内存失败
2
webnet heap最大使用量。
3
调度锁会引起线程内存不足
4
RT-Thread内存和字符串相关函数与C语言自带的内存和字符串相关函数冲突问题
5
webnet 是否可以做全动态网页,使用内存池来加快速度
6
boatload跳转到app反复重启,难道你们编译器有问题?
7
怎么释放动态线程占用的内存
8
内存堆使用时产生不对齐
9
pandora开发板使用cjson,内存不足。
10
小内存管理中rt_realloc的实现问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部