关于LPC4357接汽车的CAN导致系统卡死无法工作的问题

新项目在11月中的时候到汽车厂装机调试,该项目使用的LPC4357芯片,使用UI demo显示系统工作正常,能正常显示对应的内容。当接收汽车CAN数据时,发现不能显示正确的UI并且无法调节LCD亮度及combiner的角度。在平时开发过程中,使用USBCAN模拟器可以正常使用。
后经使用J-Link调试发现,程序卡在CAN的中断处理函数中出不来,一直在while里面死循环,没有调到接收数据的回调函数RX_cb();if((1<<(msg_no-1))!= LPC_C_CAN1->ND1)总是成立,认为是错误,再查看,msg_no = 1,LPC_C_CAN1->ND1 = 0x07,msg_no = 1是一个报文周期为10ms的CAN数据。开始以为是中断来的太频繁导致中断处理不及时,但是通过查找资料发现CAN是有接收缓存的,应该不会出现处理不及时的问题。LPC_C_CAN1->ND1这个是指哪个位置有新数据就会置1,那么msg_no = 1确实是有新数据的那一位,就发现这个语句的bug,当数据来的比较快的时候,CAN会缓存一部分数据,不是一个一个msg处理的,那么 LPC_C_CAN1->ND1不会只置一位,那么 判断就会不等于,后来修改为if((1<<(msg_no-1))& LPC_C_CAN1->ND1 == 0),对应位有数据就调用RX_cb(),这么修改之后,解决了中断频繁导致的系统卡死问题。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值