RT-Theard 配置报错No space in execution regions 和hard fault on handler,问题解决

1.No space in execution regions with .ANY selector matching can.o(.conststring).

使用rt-thread-v4.0.1版STM32f10x系列bsp出现错误
.\build\rtthread-stm32.axf: Error: L6406E: No space in execution regions with .ANY selector matching can.o(.conststring).
使用的是STM32C8T6,flash标定64k,去掉finsh功能可以编译成功,加上finsh则报这样错误,通过menuconfig删减驱动,在编译时可以发现报错数量随驱动多少增减,初步判断内存不够导致,在不改变芯片型号条件下做如下修改可以解决错误:
RT-Theard 配置报错No space in execution regions 和hard fault on handler,问题解决_第1张图片也就是将芯片flash修改成128k,因为C8T6在64K外的64K是可以读写的,具体可查阅https://blog.csdn.net/a568713197/article/details/84947409,
修改完成既可以编译通过。
同时注意下这里是否是一致的:
RT-Theard 配置报错No space in execution regions 和hard fault on handler,问题解决_第2张图片
注:在中低等芯片下,建议finsh使用FINSH_USING_MSH_ONLY比较省内存

2.hard fault on handler

错误如下:

 \ | /
- RT -     Thread Operating System
 / | \     4.0.1 build Oct 14 2019
 2006 - 2019 Copyright by rt-thread team
psr: 0x01000000
r00: 0x00000001
r01: 0x20000018
r02: 0x08005213
r03: 0x08002e5c
r04: 0x200012b0
r05: 0x200012b0
r06: 0x20010000
r07: 0x200012b0
r08: 0x20010000
r09: 0x00000001
r10: 0x08012020
r11: 0x00000000
r12: 0x0800d73f
 lr: 0x08002ff1
 pc: 0x08003050
hard fault on handler

bus fault:
SCB_CFSR_BFSR:0x04 IMPRECISERR 

处理器硬件故障,官方给的BSP在使用在具体芯片上会有配置不相同的问题,通过屏蔽代码排除法,指定错误代码段在startup的如下段:

#ifdef RT_USING_HEAP
#if STM32_EXT_SRAM
    rt_system_heap_init((void*)STM32_EXT_SRAM_BEGIN, (void*)STM32_EXT_SRAM_END);
#else
#if defined(__CC_ARM) || defined(__CLANG_ARM)
    rt_system_heap_init((void*)&Image$$RW_IRAM1$$ZI$$Limit, (void*)STM32_SRAM_END);
#elif __ICCARM__
    rt_system_heap_init(__segment_end("HEAP"), (void*)STM32_SRAM_END);
#else
    /* init memory system */
    rt_system_heap_init((void*)&__bss_end, (void*)STM32_SRAM_END);
#endif
#endif  /* STM32_EXT_SRAM */
#endif /* RT_USING_HEAP */

这里是关于芯片SRAM编译设置的,C8T6内部SRAM是20KB,第一反应SRAM大小标定有误,定位到board.h文件,果然看到如下配置:
在这里插入图片描述
修改为20K,编译烧录成功。

在使用RT-Thread是务必要关注芯片硬件配置和RT-Thread的配置是否一致。

你可能感兴趣的:(RT-Thread,STM32)