[En-Nut-Discussion] Bugs in Uart.c
Moritz Struebe
morty at gmx.net
Tue Mar 25 20:39:32 CET 2008
Hi there,
it's me again. I found some bugs. The reason was a stupid bug of mine
but suspecting some problem with the usart I had a closer look at the
usart.c. Here are some things I think should be changed:
1: UsartRead
if (NutEventWait(&rbf->rbf_que, dcb->dcb_rtimeout)) {
should be
if (NutEventWait(&rbf->rbf_que, dcb->dcb_rtimeout) == -1) {
As NutEventWait returns 0 or -1 the if-statement will always be false.
(I think this bug is at some other places, too. (A quick search for
"if?(NutEventWait(" found 38 matches - only three or four were ok!!! -
That's over 30 bugs on one afternoon! :-) )
2: Still UsartRead:
rc should be unsiged int. The is no reason to make it size_t as it will
never become bigger then size. The disadvantage is, that for the avr
size_t is an unsigned long, which costs performance.
3: The Cooked mode isn't very nice. If \r\n are the last chars in your
buffer and you read them character wise you first get \n and then
-1/EOF. I think the cooked mode should be either moved to the
interrupt-routine filling the buffer or to the wait statement waiting
for "at least one character".
4: Once again the return types are often much bigger then needed. This
costs registers and performance.
If I didn't get anything wrong I'll provide a diff.
Cheers
Morty
More information about the En-Nut-Discussion
mailing list