Hallo AVRCO
Fehlerbeschreibung:
Es treten Empfangsfehler bei UART auf, wenn die Funktion Append verwendet wird.
Der Fehler tritt nur auf, wenn der erste Parameter von Append vom Typ char ist.
Wenn der Fehler auftritt, dann wurde ein falsches Zeichen empfangen.
Das falsch empfangene Zeichen ist nicht zufällig. Es hat den Wert vom Vorgängerzeichen.
Diese Erkenntnis nutzt das Demoprogramm aus, um fehlerhafte Zeichen zu erkennen.
Workaround:
Existiert. Append nicht verwenden oder den ersten Parameter nicht als char übergeben.
Hardware:
Atmega32 mit 8 MHz Crystal, 5V, Fuses: SPIEN + CKOPT + BODLEVEL + BODEN
PC mit Terminal Programm Hterm, ST232 an RX0 und TX0
Vorgang:
Hterm sendet alle 100ms '{123456789abcdefghijklmnopqrstuvwxyz}' zum atmega
Wenn ein fehlerhaftes Zeichen empfangen wurde, sendet atmega 'Error' zurück.
Hinweis:
Wir haben im Interrupt RXRDY den Registerinhalt von UDR über SPI ausgegeben.
Im Fehlerfall war schon der Registerinhalt falsch.
program dlw04;
Device = mega32, VCC = 5;
Import SerPort;
Define
ProcClock = 8000000; {Hertz}
StackSize = $200, iData;
FrameSize = $200, iData;
SerPort = 19200, Stop1; {Baud, StopBits|Parity}
RxBuffer = 128, iData;
TxBuffer = 128, iData;
Implementation
{$IDATA}
var
previousByte : char;
PCstr : string[100];
charIn : Char;
charX : char;
begin
EnableInts;
Writeln(Serout, 'Reset');
loop
// store received bytes
if Serstat then
charIn := Serinp; // Daten auf puffer lesen
if ( charIn = previousByte ) then
Write(Serout, 'Error');
endif;
previousByte := charIn;
endif;
PCstr := '';
Append(charX, PCstr);
endloop;
end dlw04.
Fehlerbeschreibung:
Es treten Empfangsfehler bei UART auf, wenn die Funktion Append verwendet wird.
Der Fehler tritt nur auf, wenn der erste Parameter von Append vom Typ char ist.
Wenn der Fehler auftritt, dann wurde ein falsches Zeichen empfangen.
Das falsch empfangene Zeichen ist nicht zufällig. Es hat den Wert vom Vorgängerzeichen.
Diese Erkenntnis nutzt das Demoprogramm aus, um fehlerhafte Zeichen zu erkennen.
Workaround:
Existiert. Append nicht verwenden oder den ersten Parameter nicht als char übergeben.
Hardware:
Atmega32 mit 8 MHz Crystal, 5V, Fuses: SPIEN + CKOPT + BODLEVEL + BODEN
PC mit Terminal Programm Hterm, ST232 an RX0 und TX0
Vorgang:
Hterm sendet alle 100ms '{123456789abcdefghijklmnopqrstuvwxyz}' zum atmega
Wenn ein fehlerhaftes Zeichen empfangen wurde, sendet atmega 'Error' zurück.
Hinweis:
Wir haben im Interrupt RXRDY den Registerinhalt von UDR über SPI ausgegeben.
Im Fehlerfall war schon der Registerinhalt falsch.
Code
program dlw04;
Device = mega32, VCC = 5;
Import SerPort;
Define
ProcClock = 8000000; {Hertz}
StackSize = $200, iData;
FrameSize = $200, iData;
SerPort = 19200, Stop1; {Baud, StopBits|Parity}
RxBuffer = 128, iData;
TxBuffer = 128, iData;
Implementation
{$IDATA}
var
previousByte : char;
PCstr : string[100];
charIn : Char;
charX : char;
begin
EnableInts;
Writeln(Serout, 'Reset');
loop
// store received bytes
if Serstat then
charIn := Serinp; // Daten auf puffer lesen
if ( charIn = previousByte ) then
Write(Serout, 'Error');
endif;
previousByte := charIn;
endif;
PCstr := '';
Append(charX, PCstr);
endloop;
end dlw04.
Attachments
Filename: | htermAppend.png |
Filesize: | 37.67 KB |
Title: | htermAppend |
Download counter: | 153 |