环境:
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”错误的贴子,但依然没有找到问题原因。
举报
举报
举报
举报
举报
更多回帖