You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM Cortex-M中SVC处理函数因printf随机触发BusFault的问题求助

ARM Cortex-M中SVC处理函数因printf随机触发BusFault的问题求助

我刚接触嵌入式编程,正在琢磨ARM Cortex-M上的SVC(Supervisor Call)到底是怎么运作的。

我写了个小程序来触发SVC调用,在SVC处理函数里,我尝试通过访问异常发生时入栈的PC值来提取SVC编号。有时候这能正常跑起来,但有时候会因为代码里的printf语句随机触发BusFault。我已经修改了syscall.c脚本,还配置了SWO,可问题还是没解决。

下面是我的代码:

void SVC_Handler(void)
{
    // 获取主栈指针指向的栈帧
    uint32_t *stack_frame = (uint32_t *)__get_MSP();
    // 栈帧中索引为6的位置是入栈的PC值
    uint32_t pc = stack_frame[6];
    // SVC指令占2字节,PC指向SVC下一条指令,往前偏移2字节取指令低8位即为SVC编号
    uint8_t svc_num = *((uint8_t *)(pc - 2));
    
    printf("SVC Number: %d\n", svc_num); // 此处随机触发BusFault
}

// 触发SVC的裸函数,避免编译器优化干扰
__attribute__((naked)) void trigger_svc(uint8_t svc_num)
{
    __asm volatile (
        "MOV R0, %0\n"
        "SVC #0\n"
        "BX LR\n"
        : : "r"(svc_num)
    );
}

备注:内容来源于stack exchange,提问作者Kishore Raju

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:48:17