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
相关产品推荐
相关产品推荐

