Projekte.ctBot2_OberlaenderLi.unterseite4 (Struktur)


Problem 4: Mitsenden merkwürdiger Zeichen beim HyperTerminal

Die erste Ungereimtheit, die auffiel, war, dass im GtkTerm fuer die Ansteuerung des HyperTerminals der Buchstabe "s" vorgesehen war. Sowohl im Code von menue.c als auch in der int main(void) des zusammentest.c wurde dafür allerdings ein "h" benutzt. Deshalb sollte auf dem GtkTerm auch ein "h" ausgegeben werden, womit jedoch noch nicht alle Probleme behoben waren.

Denn die Zeichenketten die auf dem HyperTerminal erschienen, waren nicht alle erwünscht. Kurzerhand wurden alle \r gelöscht und die Zeilenlänge angepasst, da neuere Compiler automatisch an den Zeilenanfang springen. Nebenbei haben wir gleich noch die Rechtschreibung und die Sensornamen einheitlich gestaltet, damit ungeübte Benutzer nicht durch unterschiedliche Bezeichnungen für die dieselben Sensoren zwischen Display und HyperTerminal, verwirrt werden. Aber auch das brachte noch nicht das ersehnte Ergebnis.

Als der entscheidende Durchbruch stellte sich eine kleine Änderung in void PrintInt(long int wert) im Code von uart.c heraus. Über den UART kann ein AVR-Mikrocontroller leicht mit einer RS-232-Schnittstelle eines PC verbunden werden.

uart.c

void PrintInt(long int wert)
{  	char text[10]="         ";
	ltoa(wert,text,10);     //Diese Funktionen wandelt eine Zahl vom angegebenen Format in einen String.
	CTWrite(text,10);      //Hierbei wird eine 0 gesendet, aber aus irgendwelchen Gruenden bedeutet das
			      //eine Verwirrung fuer GtkTerm,  
}

Statt des vorherigen "CTWrite(text,10)", welches Probleme verursachte, da eine Null mitgesendet wurde, wird in uart_neu.c jetzt "CTWrite(text,strlen(text))" verwendet. Strlen liefert die Länge einer Zeichenkette OHNE das '\0' Endezeichen. Der Text wird also solange hochgezählt bis eine 0 kommt.

uart_neu.c

void PrintInt(long int wert)
{  	char text[10]="         ";
	ltoa(wert,text,10);          //Diese Funktionen wandelt eine Zahl vom angegebenen Format in einen String.
	CTWrite(text,strlen(text)); // Hochzaehlen des Textes bis die 0 kommmt
}

Nach dieser einfachen Änderung wurden über das HyperTerminal keine unerwünschten Zeichen mehr mitgesendet und die GtkTerm-Ansicht war lesbar geworden.

Zum Schluß wurde noch ein Stop-Befehl für beide Motoren mit der Nummer 7 in den GtkTerm eingefügt und die Auflistung der Befehle und der Sensorwerte sowohl im GtkTerm als auch im HyperTerminal ein klein wenig lesbarer gemacht.


Autor: ifko, Letzte Änderung: 19.09.2008 19:44:13


 TU Clausthal 2020  Impressum