[En-Nut-Discussion] UART Ethernut3 stop receiveing bytes after a while

Alain M. alainm at pobox.com
Wed Feb 6 19:33:58 CET 2008


Hi Martin,

There is a test that can help: send a predictable sequence, like 
sequential bytes. As you receive them, just check and discard, display 
only the result. It could be that you are really loosing something...

Alain

ml escreveu:
> Hi Alain,
> 
> thank you for the hint. i test it only with 19200 Bauds so it´s rather slow
> for such a fast cpu.
> the problem isn´t completely solved when i disable debugging feature - it
> only appears much later.
> maybe it´s an reentry problem. It doesn´t matter if i send the char back to
> the same uart or
> to another device like my lcd display. for now i can ignore the problem
> because i really not 
> need the echo, but i think that points to a problem in (nut/gcc or ?) and
> such kind of problems 
> will reapear later whe you never need them. I will try to find out the
> reason for this to avoid later 
> problems. 
> 
> Martin
> 
> 
> Alain M. wrote:
>> Hi Martin,
>>
>> even being new to Nut/OS, I am in the RS232 thing for a loooong time. I 
>> would bet that you are having re-entry problems. Let's say that because 
>> of the debug option, the next char gets delayed up to a point that the 
>> next will renter the last one or that the sending char overrides the 
>> last. This could lead to one interrupt accurring while the last is 
>> running and if not properly coded this can cause problems.
>>
>> You can try 2 things:
>> 1) run the same test at much lower speeds so that you can discard some 
>> bug related to the debug part, then repeat it at very high speed with no 
>> debug just to see if it happens too
>> 2) send a known sequence and test it at the receiver side, you can then 
>> split the problem between receiving/sending/debugging.
>>
>> Alain
>>
>> ml escreveu:
>>> Solved a bit :( 
>>>
>>> if i build nutos without debug infos all work´s well. for now it´s a
>>> solution, but i wonder how this happens.
>>> in debugger i can see that the irq is never called again but the
>>> register´s
>>> are set correctly. i test with 
>>> the UART-loop in a thread. The main thread is still running after the
>>> mistake. The debugger sometimes tries to reach a breakpoint but want´s to
>>> examine a memory-adress far behind the physical memory - seems to be
>>> random. 
>>>
>>> Martin
>>>
>>>
>>>
>>> ml wrote:
>>>> Hi,
>>>>
>>>> i run into a problem with uart. the small loop in the example produce an
>>>> echo at the 
>>>> uart. Uart is initialized in normal Mode without handshake and so on.
>>>> If i type in some characters in the terminalwindow all is ok. But if i
>>>> transmit short
>>>> strings from pc with full speed after a while the receiver isn´t working
>>>> anymore.
>>>> In debugger i can see that the sig_UART Interrupt is never called again.  
>>>>
>>>> when i put in the nutsleep instruction  it works for hours. 
>>>>
>>>>    NutRegisterDevice(&DEV_UART0, 0, 0); 
>>>>    com1 = fopen(DEV_UART_NAME, "r+b");
>>>>
>>>>    for(;;) {
>>>>   //   NutSleep(20);
>>>>      if ((c=fgetc(com1)) != EOF) {
>>>>        fputc(c,com1);
>>>>        fflush(com1);
>>>>      }
>>>>    }
>>>>
>>>> any help for this strange problem ?
>>>> ENUT 4.4.0  with Eclipse and openocd
>>>> Martin
>>>>
>> _______________________________________________
>> http://lists.egnite.de/mailman/listinfo/en-nut-discussion
>>
>>
> 



More information about the En-Nut-Discussion mailing list