Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
探索者407 添加外部sram 配合rt-thread 内存管理实效
发布于 2019-05-15 17:15:20 浏览:3344
订阅该版
407 外部sram rt_memheap_init(&system_heap, "sram", (void *)Bank1_SRAM3_ADDR, EXT_SRAM_SIZE); //对IS61LV25616/IS62WV25616,地址线范围为A0~A17 //对IS61LV51216/IS62WV51216,地址线范围为A0~A18 #define Bank1_SRAM3_ADDR (u32)(0x68000000) 我的想法是 将MCU 的128K ram 和外部 ram 结合起来,, 然后用户直接 调用 rt_malloc 分配内存。 为此 我开启RT_USING_MEMHEAP_AS_HEAP #ifdef RT_USING_MEMHEAP_AS_HEAP /* If RT_USING_MEMHEAP_AS_HEAP is enabled, SDRAM is initialized to the heap */ rt_memheap_init(&system_heap, "sram", (void *)Bank1_SRAM3_ADDR, EXT_SRAM_SIZE); #endif 然后 修改了下pacage 包里dynmem_sample.c 发现rt_malloc分配内存的时候老是出错
查看更多
10
个回答
默认排序
按发布时间排序
RT-WH
2019-05-15
这家伙很懒,什么也没写!
![110,0](https://www.rt-thread.org/qa/forum.php?mod=image&aid=8680&size=300x300&key=2fd2ac1df1bad6ac&nocache=yes&type=fixnone)
Spunky
2019-05-15
这家伙很懒,什么也没写!
同样的问题,你们初始化代码是怎么?能够贴出来吗?
RT-WH
2019-05-16
这家伙很懒,什么也没写!
/* * Copyright (c) 2006-2019, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2019-5-11 wh first version */ #include
#define LOG_TAG "drv.sram" #include
#include "stm32f4xx_hal.h" #ifdef RT_USING_EXTSRAM //使用NOR/SRAM的 Bank1.sector3,地址位HADDR[27,26]=10 //对IS61LV25616/IS62WV25616,地址线范围为A0~A17 //对IS61LV51216/IS62WV51216,地址线范围为A0~A18 #define Bank1_SRAM3_ADDR ((unsigned int)(0x68000000)) #define EXT_SRAM_SIZE (960 *1024) static SRAM_HandleTypeDef hsram3; static struct rt_memheap system_heap; static void MX_FSMC_Sram_Init(void) { FSMC_NORSRAM_TimingTypeDef Timing; FSMC_NORSRAM_TimingTypeDef ExtTiming; /** Perform the SRAM3 memory initialization sequence */ hsram3.Instance = FSMC_NORSRAM_DEVICE; hsram3.Extended = FSMC_NORSRAM_EXTENDED_DEVICE; /* hsram3.Init */ hsram3.Init.NSBank = FSMC_NORSRAM_BANK3; hsram3.Init.DataAddressMux = FSMC_DATA_ADDRESS_MUX_DISABLE; hsram3.Init.MemoryType = FSMC_MEMORY_TYPE_SRAM; hsram3.Init.MemoryDataWidth = FSMC_NORSRAM_MEM_BUS_WIDTH_16; hsram3.Init.BurstAccessMode = FSMC_BURST_ACCESS_MODE_DISABLE; hsram3.Init.WaitSignalPolarity = FSMC_WAIT_SIGNAL_POLARITY_LOW; hsram3.Init.WrapMode = FSMC_WRAP_MODE_DISABLE; //是否使能环路突发模式,此处未用到 hsram3.Init.WaitSignalActive = FSMC_WAIT_TIMING_BEFORE_WS;//存储器是在等待周期之前的一个时钟周期还是等待周期期间使能NWAIT hsram3.Init.WriteOperation = FSMC_WRITE_OPERATION_ENABLE;//存储器写使能 hsram3.Init.WaitSignal = FSMC_WAIT_SIGNAL_DISABLE;//等待使能位,此处未用到 hsram3.Init.ExtendedMode = FSMC_EXTENDED_MODE_ENABLE;//读写使用相同的时序 hsram3.Init.AsynchronousWait = FSMC_ASYNCHRONOUS_WAIT_DISABLE;//是否使能同步传输模式下的等待信号,此处未用到 hsram3.Init.WriteBurst = FSMC_WRITE_BURST_DISABLE;//异步传输期间的等待信号 hsram3.Init.PageSize = FSMC_PAGE_SIZE_NONE; /* Timing */ Timing.AddressSetupTime = 0; Timing.AddressHoldTime = 0; Timing.DataSetupTime = 0x9; Timing.BusTurnAroundDuration = 0; Timing.CLKDivision = 0; Timing.DataLatency = 0; Timing.AccessMode = FSMC_ACCESS_MODE_A; /* ExtTiming */ ExtTiming.AddressSetupTime = 0; ExtTiming.AddressHoldTime = 0; ExtTiming.DataSetupTime = 0x9; ExtTiming.BusTurnAroundDuration = 0; ExtTiming.CLKDivision = 0; ExtTiming.DataLatency = 0; ExtTiming.AccessMode = FSMC_ACCESS_MODE_A; if (HAL_SRAM_Init(&hsram3, &Timing, &ExtTiming) != HAL_OK) { Error_Handler( ); LOG_E("SDRAM init failed!"); } else { LOG_D("sdram init success, mapped at 0x%X, size is %d bytes, data width is %d", SDRAM_BANK_ADDR, SDRAM_SIZE, SDRAM_DATA_WIDTH); #ifdef RT_USING_MEMHEAP_AS_HEAP /* If RT_USING_MEMHEAP_AS_HEAP is enabled, SDRAM is initialized to the heap */ rt_memheap_init(&system_heap, "sram", (void *)Bank1_SRAM3_ADDR, EXT_SRAM_SIZE); #endif } } INIT_BOARD_EXPORT(MX_FSMC_Sram_Init); #endif ** 以下自己 测试的代码** /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-08-24 yangjie the first version */ /* * 程序清单:动态内存管理例程 * * 这个程序会创建一个动态的线程,这个线程会动态申请内存并释放 * 每次申请更大的内存,当申请不到的时候就结束 */ #include
#define THREAD_PRIORITY 25 #define THREAD_STACK_SIZE 2048 #define THREAD_TIMESLICE 5 extern unsigned char KEY_Scan(unsigned char mode); /* 线程入口 */ void thread1_entry(void *parameter) { unsigned int i ,j; char *ptr[100] = {RT_NULL}; /* 内存块的指针 */ //char *ptr1 = RT_NULL; /* 内存块的指针 */ // ptr1 = rt_malloc(0x23a3); for (i = 0; ; ) { /* 每次分配 (1 << i) 大小字节数的内存空间 */ if(KEY_Scan(0)==1) { ptr[i] = rt_malloc(200); i++; /* 如果分配成功 */ if (ptr[i] != RT_NULL) { rt_kprintf("get memory :%d %x %d byte\n", (i),ptr[i],1024); } else { rt_kprintf("try to get %d byte memory failed!\n", (i)); // for(j=i;j>0;j--) // { // /* 释放内存块 */ // rt_free(ptr[j]); // rt_kprintf("free memory :%d %xbyte\n", (j),ptr[j]); // ptr[j] = RT_NULL; // } } } if(KEY_Scan(0)==2) { rt_free(ptr[i]); rt_kprintf("get memory :%d %x %d byte\n", ptr[i]); i--; ptr[i]=RT_NULL; } } } int dynmem_sample(void) { rt_thread_t tid = RT_NULL; /* 创建线程1 */ tid = rt_thread_create("thread1", thread1_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (tid != RT_NULL) rt_thread_startup(tid); return 0; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(dynmem_sample, dynmem sample); borad.h 没做改动 /* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-11-5 SummerGift first version */ #ifndef __BOARD_H__ #define __BOARD_H__ #include
#include
#include "drv_common.h" #include "drv_gpio.h" #ifdef __cplusplus extern "C" { #endif #define STM32_SRAM_SIZE (128) #define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) #define STM32_FLASH_START_ADRESS ((uint32_t)0x08000000) #define STM32_FLASH_SIZE (1024 * 1024) #define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) #ifdef __CC_ARM extern int Image$$RW_IRAM1$$ZI$$Limit; #define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) #elif __ICCARM__ #pragma section="CSTACK" #define HEAP_BEGIN (__segment_end("CSTACK")) #else extern int __bss_end; #define HEAP_BEGIN ((void *)&__bss_end) #endif #define HEAP_END STM32_SRAM_END void SystemClock_Config(void); #ifdef __cplusplus } #endif #endif
RT-WH
2019-05-16
这家伙很懒,什么也没写!
[attach]8684[/attach] [attach]8685[/attach] [attach]8686[/attach] [attach]8687[/attach] [attach]8688[/attach] [attach]8684[/attach] [attach]8685[/attach] [attach]8686[/attach] [attach]8687[/attach] [attach]8688[/attach]
RT-WH
2019-05-16
这家伙很懒,什么也没写!
>同样的问题,你们初始化代码是怎么?能够贴出来吗? --- 你是遇到了同样的问题吗?
Spunky
2019-05-16
这家伙很懒,什么也没写!
我现在遇到问题比较怪,我的FSMC的初始化代码跟你一样,但是我只能写开始的128个字节,后面的128字节写不进去,再一个128字节又能写。我一直以为是引脚初始化问题,但是反复查找也没有找到
Spunky
2019-05-16
这家伙很懒,什么也没写!
> --- 我找到问题了, 我用的正点F4开发板平时都是把液晶显示器插在上面, 而引脚初始化代码里面没有初始化FSMC_NE4, 造成TFTLCD 处于不定状态, 干扰了SRAM的正常时序. 我艹, 真的是太坑了. 整了我两天时间.
RT-WH
2019-05-17
这家伙很懒,什么也没写!
你好坑 ,答非所问 谁能解决下 我的问题 我都一个星期了
还没想好
2019-05-17
这家伙很懒,什么也没写!
从 log 上来看,是 mem 的头不对。可能被意外修改,可能是内存存在一些问题。 建议 1. 你使用一个最小工程,最简系统代码,防止其他代码干扰,扰乱查找问题的视线 2. 先不挂外部的内存,使用读写测试代码,直接测试外部内存。 3. 前面都没问题后。还是不挂外部内存,在内部内存上运行你的测试代码 4. 上述操作都试过之后,后续再讨论
littlehead
2020-07-31
这家伙很懒,什么也没写!
gpio不用初始化吗?没看到代码
撰写答案
登录
注册新账号
关注者
0
被浏览
3.3k
关于作者
RT-WH
这家伙很懒,什么也没写!
提问
19
回答
53
被采纳
1
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
组件 lwip v2.0.3 版本使用 netdev网卡的 ping 功能
2
简单两步配置RTT源码阅读环境 vsc+clangd
3
恩智浦[FRDM-MCXN947]初探 之 ADC与DAC
4
LVGL使用字库IC芯片显示中文
5
基于STM32H750和Rt-Thread的CANFD通信实现的记录(一)
热门标签
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
UART
WIZnet_W5500
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
编译报错
Debug
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
807
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部