[En-Nut-Discussion] Usage of NutDelay() in arch/avr/dev/ and probably else
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Mon Feb 23 19:28:37 CET 2009
Hello,
with the heartbeat setting on a port pin when idle (and not toggling), I could
see something hogging the AVR CPU for long on my board. After some looking I
saw that that was
_ioctl(_fileno(owi_uart), UART_SETSPEED, &baud_presence);
on the AT90CAN128 builtin device, when switching speeds to implement
One-Wire Transactions via the UART. This boiled down to the usage of
NutDelay(), even when NutSleep() was available. Appended patch fixes the
problem for arch/avr/dev/usartavr.c and arch/avr/dev/uartavr.c
But isn't the problem more general:
arch/avr/dev> grep NutDelay *c |wc
42 112 1402
> grep NutSleep *c | wc
31 84 1083
Shouldn't even NutDelay() itself resolve to NutSleep(), if NutSleep() is
available?
Any comments
Thanks
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: arch/avr/dev/usartavr.c
===================================================================
--- arch/avr/dev/usartavr.c (Revision 1033)
+++ arch/avr/dev/usartavr.c (Arbeitskopie)
@@ -528,7 +528,11 @@
/*
* Allow incoming or outgoing character to finish.
*/
+#if defined(NUT_CPU_FREQ)
+ NutSleep(10);
+#else
NutDelay(10);
+#endif
/*
* Disable USART transmit and receive.
Index: arch/avr/dev/uartavr.c
===================================================================
--- arch/avr/dev/uartavr.c (Revision 1033)
+++ arch/avr/dev/uartavr.c (Arbeitskopie)
@@ -344,7 +344,11 @@
/*
* Allow incoming or outgoing character to finish.
*/
+#if defined(NUT_CPU_FREQ)
+ NutSleep(10);
+#else
NutDelay(10);
+#endif
/*
* Now disable UART functions.
More information about the En-Nut-Discussion
mailing list