STM32运行时程序卡在B.处

STM32运行时程序卡在B.处的问题处理的一天多,终于找到原因

1,表现

我所使用的芯片是stm32f427vit6,stm32f4系列芯片外设多数都相同,407,405的 用户也可以参考。

我的程序是使用can2收发数据,can2的外设的初始化函数,中断配置函数,中断服务函数都已经在另外一块板子,和工程上验证通过,故没有逻辑bug,本想遗址到新的工程上可以直接用,移植完成,编译通过,但是发现当出发发送中断时,程序会卡死,通过debug功能发现是卡死在startup_stm32f4xx.s文件中的 B. 处,如图:

感觉莫名奇妙,遂网上各种查,多数都是因为没有定义终端服务函数导致,其实我这次也是这个原因,但具体后面再说,网上查到的资料主要集中在can设备配置,中断函数定义,等,但始终为解决,

2,原因

知道今天晚上,始终找不到原因,最红还是回到原点,一定是犯了低级错误或者有些东西被忽视了,新的工程师C++11与c混编,起初我觉得C++包含c的各种语法规则,就一并写成cpp文件编译,由于问题没有解决,就想把stm32f4xx_it.cpp改为.c文件编译,这时发现,原有工程所带的几个系统错误中断函数都有声明且有

的表示,于是尝试将自己的中断服务函数做同样处理,编译,下载测试,问题解决,恍然大悟,原来是自己学艺不精。

3,相关知识

1)C++11与c以及c99,在keil中可能会由于硬件的问题被放大,所以尽量减少混编,

2)应用st官方出去hal库外的老版库函数的时候,严格遵守C语法,尤其与C++混编时,这次就是由于混编处理不当造成

3)标题卡死在 B. 处的问题多处于两种情况,一是使能了中断但是未定义中断函数,本次就是由于没有声名,按照c++语法编译,编译过程并没有把中断服务函数链接起来,导致进入终端后无法跳转到中断服务函数,二是bootloader跳转过程发生,未多做研究,系统复位直接跳转可以临时解决

4,反省

1)继续学习C++,以前一直用c,现在已经不够用了,赶紧充电

2)对语法和规则要严格遵守,

 

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值