Systick_Handler B.卡死处理方法

Systick_Handler B.卡死处理方法

注:鄙人在学习国产GD32芯片和STM32芯片做嵌入式时候出现过单片机卡死在*.s启动文件Systick_Handler B.处
现做系列总结


文章目录

  • 1.中断开启未处理!
  • 2.引入C/C++代码而未作配置处理
  • 总结


注:主要总结国产GD32和STM32单片机卡死在*.s启动文件Systick Handler B.处几种情况


问题描述:没什么问题,卡死此处而已!!!
Systick_Handler B.卡死处理方法_第1张图片

1.中断开启未处理!

打开了某个中断,但是没有中断处理函数,或者中断处理函数错误(系统未识别),检查中断函数名字是否未按要求书写。例如将出串口中断函数名写错如下:
Systick_Handler B.卡死处理方法_第2张图片
注意:后来查阅资料,在启动文件中,初始化中断向量表时候,有这么一段,系统已经完成了中断函数的编写并且已经留了接口([WEAK]表示弱符号,是可以自己重新定义同名函数的),一般情况下出发中断是可以直接进到中断函数SysTick_Handler里面的,如果没有则执行
B .操作,B表示跳转,“点”表示死循环,PROC,ENDP可以理解为函数括号。

SysTick_Handler PROC
                EXPORT  SysTick_Handler            [WEAK]
                B       .
                ENDP

2.引入C/C++代码而未作配置处理

使用Keli做单片机开发工具在引入C/C++代码后需要做相关处理,否则会报错,在keil魔术棒(懂的都懂)中C/C++项中底部Misc Controls中添加–C99或–CPP11标准。
Systick_Handler B.卡死处理方法_第3张图片

这时候编译不会报错,但是程序跑不起来,删除–CPP11就OK了,为了保证你的C++代码能嵌入使用,在你的中断处理部分添加如下代码,否则中断服务函数不会链接到下载文件中(我一般加在主要头文件中供其他文件使用)

#ifdef __cplusplus
 extern "C" {
#endif

#ifdef __cplusplus
}
#endif

总结

我遇到的就上面两种情况,如有其他方法欢迎交流,总之祝各位开发顺利

如有错误,欢迎指正,原创不易,转载留名!

你可能感兴趣的:(单片机嵌入式,单片机,嵌入式,keil,mdk)