On 04/24/2012 08:47 PM, Andrew Tannenbaum wrote:
> I'm running
>
> Linux 2.6.38.8
> Xenomai 2.6.0
> Atom N270 CPU
>
> I'm talking to CAN with a PEAK PCI SJA1000 CAN adapter.
>
> I have a control loop running at 200 Hz, and I use it to drive a motor
> and read an encoder using rtcan. My code is based on the
> rtcansend/rtcanrecv examples.
>
> I found a bug where my control loop was hanging, and I've isolated the
> problem so that it may be reproduced with Xenomai supplied tools,
> without using my own code.
>
> The problem is:
>
> When I have a loop that is sending CAN packets, if I read
> /proc/rtcan/rtcan0/registers at the same time, it causes the loop to
> hang. The hang is in rt_dev_sendto.
>
> To reproduce:
>
> Configure the CAN controller
>
> $ rtcanconfig rtcan0 --baudrate=1000000 start
>
> Send packets, in this case, SYNC messages at 1000 Hz
> with tty output 1 Hz.
>
> $ rtcansend rtcan0 -i 0x80 -p 1000 -l 1000000
>
> It will print CAN SYNC (0x80) messages:
>
> <0x080> [0]
> <0x080> [0]
> ...
>
> In another window, read rtcan0/registers in a loop (10 Hz):
>
> $ while :; do cat /proc/rtcan/rtcan0/registers; sleep .1; done
Hi Andrew,
I am probably not the one which will answer your question, because I
know nothing about CAN hardware. What I know however is that some
hardware registers, when read, have side effects. For instance reading
an interrupt status may deassert the hardware interrupt.
The code for /proc/rtcan/rtcan0/registers is compiled if
CONFIG_XENO_DRIVERS_CAN_DEBUG is #defined.
This would seem to indicate that perhaps some registers have side
effects, and so this /proc file more a debug tool than something which
should be used on a regular basis.
Regards.
--
Gilles.
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help