Skip to content

由 bzhou830 贡献,Ai-Thinker 进行整理

1. 缘起

偶然一次听泽哥说对于出现crash的这种问题,bl616/618的芯片我们可以配置让他生成core dump文件。这样我们使用gdb 调试core dump文件就可以找到crash的原因了。 这个过程听起来和内核调试一毛一样。单片机强大到这样吗?带着这样的疑问,问了泽哥,泽哥说只要makefile中配置上就可以通过串口打印出来core dump。就像下面这样: image.png

2. 尝试

带着好奇,我打开aithinker_Ai-M6X_SDK\examples\helloworld,刻意的制造了一个crash。编译烧录后发现并没有core dump的生成。 image.png 泽哥又说需要在使用FreeRTOS的时候, 才有用。遂简单的将代码放在了task中。

cpp
#include "bflb_mtimer.h"
#include "board.h"
#include <FreeRTOS.h>
#include "task.h"
#define DBG_TAG "MAIN"
#include "log.h"
#define STACK_SIZE (1536)
#define TASK_PRIORITY (16)
static TaskHandle_t crash_task_hd;
void crash_task(void *params)
{
    char *pBuffer = 0x80000000;
    uint32_t i = 0;
    while (1) {
        pBuffer = i++;
        printf("%d\r\n", pBuffer);
        bflb_mtimer_delay_ms(500);
    }
}
int main(void)
{
    board_init();
    xTaskCreate(crash_task, "crash_task", STACK_SIZE, NULL, TASK_PRIORITY, &crash_task_hd);
    vTaskStartScheduler();
    while (1) {
    }
}

再次编译烧录,还是没有core dump生成。

3. 溯源

上班的路上我就在想,这些配置无非都是作用到gcc 编译参数上的,我追寻下这个core_dump的配置参数不就知道原因了吗? 当我打开aithinker_Ai-M6X_SDK,在里面搜了下关于coredump的参数解析的,竟然没有找到! image.png 这就能解释了,这个配置项人家压根都没有关注,咱们在上层一通配置肯定啥也不是啊。但是泽哥说这个能用,难道是我的SDK太老了?但是看了下安信可官方github上也没有更新sdk呀! 那我就转向了博流的SDK。打开就直接找到了相关内容了: image.png 至此,破案了。想要使用core_dump, 那就用bl_sdk,或者把bl_sdk中的core_dump引用过来。

遇到问题?

如有其他问题,请到统一的提问与讨论区:Ai-Thinker Discussions

Released under the MIT License. Build Time 2026-09-11 14:52:23