TI中文支持网
TI专业的中文技术问题搜集分享网站

am335x CAN缓冲区问题

最近在做can方面的应用,但是出现了缓冲区方面的问题:

1. 出现缓冲区不足错误后,can会出现无法接收数据的现象,且无法恢复
2. 数据发送后,若总线上无其他设备,发送的数据帧会缓存与系统中,待下次有设备加入总线后会发送上总线,缓存没有实际用处,反而会影响通讯流程
3. 没有有效接口清空缓冲区
4. 重新打开出现缓冲区错误的设备后,没有报错,也无法收发数据

所以就想知道如何清除CAN缓冲区里面的数据,希望大神们能够给与帮助。

shengquan ye:

打印出要执行的函数名字

情况一:

Can0接收

can1每隔0.1秒执行这个命令cansend can1 111#1111

但是没有线连接

情况二:

can0 为挂在上等待接受状态

can1每隔0.1秒执行这个命令cansend can1 111#1111

都出现一下情况

1

[   92.739134] d_can_start_xmit  1

[   92.742174] d_can_write_msg_object 1.1

[   92.745742] d_can_object_put 1.1.1

[   92.748800]  d_can_msg_obj_is_busy1.1.1.1

[   92.752358] d_can_is_next_tx_obj_busy 1.2

[   92.756184] irqreturn_t d_can_isr   //can_open

[   92.759647] d_can_interrupts

[   92.762675] d_can_poll

[   92.765140]  d_can_handle_state_change

[   92.769070] d_can_get_berr_counter

[   92.772638]  d_can_handle_state_change

[   92.776558] d_can_get_berr_counter

[   92.780121] d_can_interrupts

2

[   92.895036] d_can_start_xmit

[   92.898153] d_can_write_msg_object

[   92.901707] d_can_object_put

[   92.904715]  d_can_msg_obj_is_busy

[   92.908282] d_can_is_next_tx_obj_busy

…………………….. 

一直出现下面函数名字总计32次后出现报错信息write: No buffer space available

[   92.895036] d_can_start_xmit

[   92.898153] d_can_write_msg_object

[   92.901707] d_can_object_put

[   92.904715]  d_can_msg_obj_is_busy

[   92.908282] d_can_is_next_tx_obj_busy

write: No buffer space availablewrite: No buffer space availablewrite: No buffer space availablewrite: No buffer space availablewrite: No buffer space available

因为不可预知另外的can有没有连线,或者有没有挂载上等待接受,如果单方不断发送数据,是不是就会把缓冲区占满,那么有什么比较好的解决办法可以克服这样的情况。

Dendi:

回复 shengquan ye:

您好 我最近也遇到了类似的问题

我两块am335x的板子进can通信,刚开始我只启动发送的节点往总线上发数据,然后发着发着就会阻塞在write函数那里,当我打开接收节点接收数据时,发送节点才能恢复正常发送; 这时我把接收节点的接收关掉(并未断电只是不接收总线的数据),发送端发送已然正常;但我把接收节点给断电了,又会出现阻塞现象,重新上电后(并未打开接收程序,只是板子上电)发送端恢复正常发送。

请问您知道这是什么原因么?

赞(0)
未经允许不得转载:TI中文支持网 » am335x CAN缓冲区问题
分享到: 更多 (0)