BSP

为STM32F407VET6 制作的BSP堆初始化失败

发布于 2019-08-10 10:45:01
按照官方提供的BSP制作文字教程为STM32F407VET6制作BSP的时候出错。该芯片不使用RT-thread是可以使用的。 已经调了一天,主要是个人对RT-thread初始化堆内部实现不了解,看着源码佷懵,同时也是要尽快做项目。
麻烦遇到过的大神指点一下,或者有基于这个芯片实现了的BSP能发一份就好了,不胜感激。
一、出错的地方
其中该芯片的Flash为512K,RAM为192K。
使用Jlink在线调试,发现出错的地方在堆初始化函数 rt_system_heap_init
1.png
具体执行到该函数的这一步 heap_end->next = mem_size_aligned + SIZEOF_STRUCT_MEM;
2.png
会跳转到HardFault_Handler
3.png
最后会跳转到 rt_hw_hard_fault_exception函数的while (1);死循环。
二、修改BSP具体的细节
之前也是制作过STM32F1的BSP,没有出现过这种错误。
使用原子的STM32F407ZGT6探索者的BSP修改也出现这种情况。
修改的一些细节如下:
1、board.h
4.png

2、Kconfig
5.png

3、linker_scripts(我使用MDK5)

6.png
4、SConscript 脚本
7.png

查看更多

关注者
0
被浏览
1.4k
12 个回答
Glen_Young
Glen_Young 2019-08-10
后来看了另外BSP(stm32f407-st-discovery),发现RAM的大小当做128K来配置就成功了(目前正常,不知道是否有隐患),查看数据手册才知道所谓的
192K 中有64K是CCM (core coupled memory) data RAM(咱也不懂这是干什么的),应该和这个有关吧。
又是碌碌无为的一早上过去了:(

好奇的是:
原子的407BSP的board.h里面选择的RAM大小是192K,(我改成128K才正常)
然后lin.sct 配置却是按照128K来配置。
手头也没有原子这一款板子,不知道会不会出现我这个问题。

whj467467222
whj467467222 2019-08-10
Glen_Young 发表于 2019-8-10 11:31
后来看了另外BSP(stm32f407-st-discovery),发现RAM的大小当做128K来配置就成功了(目前正常,不知道是否 ...

楼主去查看一下你这个芯片的RAM大小是不是分了好几块,比如F469就是分了2块 https://github.com/RT-Thread/rt- ... F%E4%BA%8B%E9%A1%B9,H7系列分成了5块。
Glen_Young
Glen_Young 2019-08-10
whj467467222 发表于 2019-8-10 12:56
楼主去查看一下你这个芯片的RAM大小是不是分了好几块,比如F469就是分了2块 https://github.com/RT-Thread ...


好的,谢谢
sync
sync 2019-08-10
ram有一部分64K是CCM,只有cpu能访问,其他总线无法访问,目前rt是不支持的,所以能用的ram只有128k
Glen_Young
Glen_Young 2019-08-11
sync 发表于 2019-8-10 14:26
ram有一部分64K是CCM,只有cpu能访问,其他总线无法访问,目前rt是不支持的,所以能用的ram只有128k ...


明白了,谢谢
我夏了夏天
我夏了夏天 2019-08-11
同样的 407 新品,理论上就是拿现有的 407 bsp 简单改一下就好了。
Dominic
Dominic 2019-08-13
同样问题修改board.h里面选择的RAM大小后可以跑起来了,原本32Kram改为16K,还么找到原因
Glen_Young
Glen_Young 2019-08-14
Dominic 发表于 2019-8-13 16:20
同样问题修改board.h里面选择的RAM大小后可以跑起来了,原本32Kram改为16K,还么找到原因
...


找到了,楼上的大佬已经说了
Dominic
Dominic 2019-09-05
Glen_Young 发表于 2019-8-14 22:42
找到了,楼上的大佬已经说了


是这样的
denglongbing
denglongbing 2019-09-24
我也是同样的问题,其他地方192K 不变,将bord.h中改为128K,就能正常运行;不然就是硬件故障:总线错误;
denglongbing
denglongbing 2019-09-24
我看了F407VGT6的RAM 分为两部分128K 的RAM(起始地址:0x20000000,大小:0x20000) 和64的CCM ,CCM:起始地址:0x10000000,大小:0x10000;那64K的RAM 可以添加到RT_Thread吗?在link.sct中直接操作,还是用系统的API函数加入;
MalcolmGong
MalcolmGong 2019-10-20
前几天配置stm32f429的时候同样遇到这个问题,堆初始化尾指针的时候出错,SRAM宏定义的时候把CCM部分的大小剔除出去就能运行。今天就看到了这个帖子,看来还是要多来这里逛逛。哈哈哈

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友