关于LPC4357接汽车的CAN导致系统卡死无法工作的问题
来源:互联网 发布:大数据概念涨停 编辑:程序博客网 时间:2024/04/29 18:42
新项目在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(),这么修改之后,解决了中断频繁导致的系统卡死问题。
在调试过程中发现,在收到数据中断之前,会收到一个状态中断,是一个接收成功中断,也就是说,每成功接收一个数据都会收到一个接收成功中断,那么接收一个10ms周期的报文,会收到两个中断,这样中断太频繁,为了避免增加CPU压力,在CAN初始化的时候不打开这个中断。
后经使用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(),这么修改之后,解决了中断频繁导致的系统卡死问题。
在调试过程中发现,在收到数据中断之前,会收到一个状态中断,是一个接收成功中断,也就是说,每成功接收一个数据都会收到一个接收成功中断,那么接收一个10ms周期的报文,会收到两个中断,这样中断太频繁,为了避免增加CPU压力,在CAN初始化的时候不打开这个中断。
阅读全文
0 0
- 关于LPC4357接汽车的CAN导致系统卡死无法工作的问题
- 关于Mac系统偏好设置卡死的问题
- 因tablespace不够导致的系统界面卡死
- 关于HAL.DLL文件丢失导致系统无法启动的问题
- 关于烧写开机logo之后导致无法启动系统的问题
- shellexecute起进程导致卡死的问题
- Linux进程多导致CPU卡死的问题
- Linux进程多导致CPU卡死的问题
- 关于Apache的ftp卡死问题
- 基于CAN总线的汽车内部网络系统研究
- 关于死不死的问题
- 误删VMware快照导致无法启动虚拟系统的问题
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 关于 quartz 1.6.1 的一个死等问题,导致任务不执行
- 关于Struts2.1.6的tiles的无法工作的问题
- 关于tomcat连接池爆满导致系统崩溃的问题
- 一次关于更改UI导致autolayout系统崩溃的问题
- mt6592 [Speech]修改acoustic loopback时延时
- ECharts 仪表盘的轴线宽度修改
- Junit4学习与使用
- Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION xxxx.$ does not exist
- mysql命令gruop by报错this is incompatible with sql_mode=only_full_group_by
- 关于LPC4357接汽车的CAN导致系统卡死无法工作的问题
- jq获取元素的所有宽高(包括内边距和外边距)
- 圆圈中最后剩下的数
- 安卓修改开机画面
- A child container failed during start
- Mysql中文汉字转拼音的实现(每个汉字转换全拼)
- Sentence Similarity问题及解法
- PHP获取给定IP网段信息
- Android studio 导入github工程