30 通过rt_malloc()申请动态内存,就会报SCB_CFSR_BFSR错误

发布于 2020-12-01 20:48:10

环境:
1)、GD32F103ZET6, 通过FSMC总线挂载SRAM、CH438芯片》
2)、使用RTT4.0.3版本。定义了RT_USING_MEMHEAP_AS_HEAP宏

测试流程:
1) 系统启动后,通过系统管理SRAM芯片内存,显示挂载成功。
2) 测试CH438芯片都能够正常 操作,收发都正常。此时不会引起总线错误。
此时通过free命令查看剩余内存:

[20:29:49.914]收←◆free
memheap   pool size  max used size available size
-------- ---------- ------------- --------------
sram     1048576    48            1048528
heap     59056      58312         744  
msh >

芯片内部SRAM剩余744的时候,再通过rt_malloc()申请一个超过1024Byte的或者更大的内存空间,就会报总线错误。

收←◆msh >psr: 0x01000000
r00: 0x68000418
r01: 0x58565856
r02: 0x200006ec
r03: 0xffffffff
r04: 0x200006a8
r05: 0x68000000
r06: 0x00000400
r07: 0xf056583e
r08: 0x00000000
r09: 0x00000400
r10: 0xdeadbeef
r11: 0xdeadbeef
r12: 0x00000000
 lr: 0x08008d4d
 pc: 0x08007dbc
hard fault on thread: uart

thread   pri  status      sp     stack size max used left tick  error
-------- ---  ------- ---------- ----------  ------  ---------- ---
uart      11  running 0x00000088 0x00001000    03%   0x00000014 000
tshell    20  suspend 0x00000080 0x00001000    03%   0x0000000a 000
tidle0    31  ready   0x00000044 0x00000100    26%   0x0000001e 000
main      10  suspend 0x00000098 0x00000800    12%   0x00000013 000
bus fault:
SCB_CFSR_BFSR:0x04 IMPRECISERR 

通过单步跟踪进入程序,rt_malloc()函数分配内存地址,已经转到片外SRAM芯片地址上了,分配的地址指针都是0x68000000以上的了,但运行到在void rt_memheap_alloc(struct rt_memheap heap, rt_size_t size)函数中
以下语句的时候就会出现总线错误(memheap.c文件中213行)

                /* break down the block list */
                new_ptr->prev          = header_ptr;
                new_ptr->next          = header_ptr->next;
                header_ptr->next->prev = new_ptr;
                header_ptr->next       = new_ptr;

我查看了本论坛中 “SCB_CFSR_BFSR”错误的贴子,但依然没有找到问题原因。

查看更多

关注者
1
被浏览
327
3 个回答
JQRR_7669
JQRR_7669 认证专家 2020-12-02

连接脚本中有对SRAM区的定义和映射吗?

陈斌
陈斌 2020-12-02

sram启用后有个sram_test命令,你试一下

swordlifeRT
swordlifeRT 2020-12-02

问题解决。
是自己代码的原因。原因为:对SRAM读写测试后,没有将SRAM内部数据清零,导致后续rt_malloc()分配的时候,一些指针直接使用了这些野数据。

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览