Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
堆_heap_动态内存管理
死机
GD32
GD32F470VGT6内存不能设置512KB
发布于 2023-09-16 09:26:51 浏览:586
订阅该版
大家好,请教个问题,就是我使用rt_thread stduio软件开发的使用GD32F470VGT6单片机,内存设置不能超过448KB, 如果设置超过了,就启动不了,打印错误信息如下: ``` >;?ſ?@sr: 0x41000000 r00: 0x00000001 r01: 0x2002585c r02: 0x20025851 r03: 0x20025850 r04: 0x00000000 r05: 0x20000d28 r06: 0x0805276d r07: 0x20000cc8 r08: 0xdeadbeef r09: 0xdeadbeef r10: 0xdeadbeef r11: 0xdeadbeef r12: 0x00000003 lr: 0x08025153 pc: 0x08024a28 hard fault on handler bus fault: SCB_CFSR_BFSR:0x04 IMPRECISERR ``` 而这个单片机是有512KB内存的,为什么用不了呢,我在board.h 文件 `#define GD32_SRAM_SIZE 512` 修改这个值的。 在link.ld文件如下设置: ```c MEMORY { CODE (rx) : ORIGIN = 0x08020000, LENGTH = 512k /* 3072KB flash */ DATA (rw) : ORIGIN = 0x20000000, LENGTH = 512k /* 256KB sram */ } ENTRY(Reset_Handler) _system_stack_size = 0x400; ``` 在link_sct文件 如下设置: ```c LR_IROM1 0x08020000 0x00080000 { ; load region size_region ER_IROM1 0x08020000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x20000000 0x00080000 { ; RW data .ANY (+RW +ZI) } } ```
查看更多
道友
2023-09-16
这家伙很懒,什么也没写!
~~抱歉,回复错误,删除回复~~
2
个回答
默认排序
按发布时间排序
wxfjog
2023-09-22
这家伙很懒,什么也没写!
🙂感谢[@道友](/u/e43bfe41f021df8d) 回复。 最近研究了下GD32F470芯片手册,发现标称的内存512KB, 其实是连TCMSRAM一起算的,即TCMSRAM+SRAM0+SRAM1+SRAM2+ADDSRAM = 512KB, 其中SRAM0 - ADDSRAM 这段内存地址是连续的,从地址0x20000000开始。而TCMSRAM地址却是从0x10000000 - 0x1000FFFF, 即64KB。如下图: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20230922/03a7fa538a83a4068142707a56076109.png.webp) 所以第一个连续内存只能写448KB。GD32F450芯片也是有类似同上的分存分布。相当于存在两个内存堆了,目前使用RT-thread 提供的memheap 多内存堆使用方法,在 broad.c文件手动加上TCMSRAM初始化,经测试可以正常使用。 部分代码如下: ```c #define HEAP_TMCSRAM_BEGIN (0x10000000) #define HEAP_TCMSRAM_SIZE (64*1024) struct rt_memheap tcmsram; void rt_hw_board_init() { /* NVIC Configuration */ #define NVIC_VTOR_MASK 0x3FFFFF80 #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x10000000 */ SCB->VTOR = (0x10000000 & NVIC_VTOR_MASK); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ SCB->VTOR = (0x08020000 & NVIC_VTOR_MASK); #endif SystemClock_Config(); #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif #ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME); #endif #ifdef BSP_USING_SDRAM rt_system_heap_init((void *)EXT_SDRAM_BEGIN, (void *)EXT_SDRAM_END); #else rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); rt_memheap_init(&tcmsram, "tcmsram", (void*)HEAP_TMCSRAM_BEGIN, (rt_size_t)HEAP_TCMSRAM_SIZE); #endif } ``` 测试函数: ```c void testm(void) { extern struct rt_memheap tcmsram; uint8_t *pt = RT_NULL; uint8_t *ps = RT_NULL; int i; pt = (uint8_t*)rt_memheap_alloc(&tcmsram, 1024); if(pt == RT_NULL) { rt_kprintf("pt no memory\n"); } ps = (uint8_t*)rt_malloc(1024); if(ps == RT_NULL) { rt_kprintf("ps no memory\n"); } memset(pt, 0x1a, 128); memset(ps, 0x2c, 128); for(i = 0; i < 128; i++) { rt_kprintf("%x ",*(pt+i)); } rt_kprintf("\n"); for(i = 0; i < 128; i++) { rt_kprintf("%x ",*(ps+i)); } rt_kprintf("\n"); LOG_D("pt = %x", pt); LOG_D("ps = %x", ps); rt_memheap_free(pt); rt_free(ps); } MSH_CMD_EXPORT(testm, test memory); ``` 测试效果图: ![screenshot_图片.png](https://oss-club.rt-thread.org/uploads/20230922/e9f73693e9a24c130756236009669bb7.png)
撰写答案
登录
注册新账号
关注者
0
被浏览
586
关于作者
wxfjog
这家伙很懒,什么也没写!
提问
15
回答
11
被采纳
3
关注TA
发私信
相关问题
1
加了bootloader后,为什么就卡死了
2
free a bad data block导致机器死机问题咨询
3
stm32f429上运行动态模块,加载运行死机
4
开启Iwdt看门狗,为什么还会“死机”(硬件干扰)
5
cmBackTrace定位后无法分析出问题原因
6
rt_timer_start 链表死循环
7
hard fault on thread: lcd_task 问题?
8
telnet功能开启之后,断开网线则死机
9
官方的定时器案例死机
10
RT-thread nano不能进入线程,好像死机了
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
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
AB32VG1 不同版本GCC CoreMark 测试
2
libc是什么?可以吃吗
3
[RA8D1-Vision Board] sd卡实践
4
FRDM-MCXN947开发板之RGB LED驱动
5
NXP MCXN947 测评(2)基于GPIO 控制实现DHT11 温湿度采集
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
编译报错
socket
keil_MDK
GD32
MicroPython
msh
Debug
ulog
SFUD
flashDB
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
用户名由3_15位
23
个答案
3
次被采纳
踩姑娘的小蘑菇
16
个答案
3
次被采纳
xiaorui
7
个答案
3
次被采纳
sakumisu
5
个答案
3
次被采纳
三世执戟
32
个答案
1
次被采纳
本月文章贡献
比特饼干
4
篇文章
11
次点赞
Z_Y
2
篇文章
5
次点赞
xusiwei1236
2
篇文章
3
次点赞
yinxiangxv
2
篇文章
3
次点赞
rvcore
2
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部