Hi ,
thanks for this. Is it correct that the errors come in on the
messagebuffer where normal can frames also get read from? If so I
presume this is normal CAN behavior but it does cause the message-buffer
to overflow which in turn causes system messages to be generated which
in turn messes up the RT behaviour of the entire application. If I have
problems on the CAN bus I do not want the RT behavior of other parts of
the application to be affected. So how can i prevent the error messages
causing the message-buffer to overflow?
P.S. this question is related to another thread where the current
standing is that I would have to switch off whatever is writing the
system messages, i.e. syslogd?
If I can prevent the CAN errors coming in on the message buffer or
rather maybe reduce their intensity (once is really enough I don;t need
to be notified 100 billion times) that would be an elegant manner too.
Thanks for your time.
Regards,
Roland
Sebastian Smolorz wrote:
roland Tollenaar wrote:
Hi,
What I cannot find an example of is how to filter for more than one error?
ret = rt_dev_setsockopt(can_fd, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,
&err_mask, sizeof(err_mask));
will pick out the messages that correspond to err_mask. At the moment
I seem to be picking up CAN_ERR_BUSERROR but not for example
CAN_ERR_CRTL (mind you I presume the latter should have been
CAN_ERR_CTRL which is a bit more intuitive). If I want to pick up both
can I do this
ret = rt_dev_setsockopt(can_fd, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,
&err_mask1, sizeof(err_mask1));
ret = rt_dev_setsockopt(can_fd, SOL_CAN_RAW, CAN_RAW_ERR_FILTER,
&err_mask2, sizeof(err_mask2));
to set up to get errors of two types or can I only pick up one at a time.?
The error mask is called a *mask* because you can mask those errors you are
interested in. Of course you can set the error *bits* in one mask. Just OR
them.
This is what my CanID and the data sequence looks like:
!0x00000088!<0x088> [8] 00 00 80 19 00 00 00 00
0x00000080 is CAN_ERR_BUSERROR and
0x00000008 is protocol violation CAN_ERR_PROT.
So I seem to have those two errors. Correct?
-What is a protocol error?
Either consult the CAN specification or look at the protocol error types in
the RT-Socket-CAN documentation [1] which give you a rough overview what a
protocol error is. In short: It is a violation against the defined CAN
protocol.
The values in data 2 and 3 seem to say
data 2: 80 Error occurred on transmission
data 3 19 Ack Slot?
The first one I can understand I have nothing connected to the bus,
the second one
What does the second one mean?
It means that no one has ack'ed your transmission. This makes sense since you
didn't connect anything.
[1]
http://www.xenomai.org/documentation/trunk/html/api/group__rtcan.html#g6cf7ee3a3d83315ed2589bb3bdb816b3
--
Sebastian
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help