-         

Ergebnis 1 bis 3 von 3

Thema: SerWrite vereinfachen (SerPrint nachbauen)

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    20.04.2008
    Ort
    Bremen
    Alter
    27
    Beiträge
    85

    SerWrite vereinfachen (SerPrint nachbauen)

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hi an alle!

    Ich bastle gerade für unsere Schule ein größeres Asuro Programm zusammen.

    Das Problem ist: ich möchte möglichst die originale Asuro-Lib verwenden die auf der CD mitgeliefert wird um so den Einstieg zu vereinfachen ohne jetzt dafür eine extra Lib zu installieren.
    Aber da ich auch zum Teil sehr faul bin ( ) hab ich keine Lust jedes mal wenn ich SerWrite benutze (ich benutze sehr viele davon um den Programmablauf dann am Hyperterminal beobachten zu können) jedesmall die Zeichen zu zählen.

    So dachte ich mir ich bau mir einfach die SerPrint funktion nach:
    Code:
    void SerPrint (char * data)   	
         {
         unsigned char i = 0;
    
         while (data [i] != 0x00)
              UartPutc (data [i++]);
         }
    Das nächste Problem: UartPutc ist auch nur in der erweiterten Lib vorhanden. Mein erster Versuch mit:
    Code:
    void SerCPrint (char* data)
    {
         int i;
    
         for (i = 0; i < sizeof (data); i++)
         {
              SerWrite (data[i], i);
         }
    }
    klappte leider nicht. Er gibt einfach nichts aus

    Kann mir irgendjemand vielleicht helfen? Ich bedanke mich jetzt schon mal. Einer der gründe dafür ist vielleicht das die länge beim SerWrite auch als unsigned char definiert ist. Ich kann mir aber gerade schwer eine Zählschleife mit einem char vorstellen

    Irgendjemand vielleicht eine geniale Lösung dafür?

    the.speciali
    Wer den Himmel auf Erden sucht hat im Erdkundeunterricht geschlafen!

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Ich denke nicht, dass man das schon als genial bezeichenen kann:
    Code:
    #include "asuro-probot.h"
    #include "asuro-probot.c"
    
    void SerPrint(unsigned char *data)
    {
    	unsigned char i = 0, j=0;
    	UCSRB = 0x08; // enable transmitter
    	while(data[i]) // nächstes Zeichen auf Endekennung 0 prüfen
    	{
    		if (UCSRA & 0x20) { // wait for empty transmit buffer
    			UDR = data[i++]; // Zeichen ausgeben
    		}
    	}
    	while (!(UCSRA & 0x40));
    	for (i = 0; i < 0xFE; i++)
    		for(j = 0; j < 0xFE; j++);
    }
    int main(void)
    {
       int i;
       char zeichenkette[8]="testtext";
    	Init();
    
       while(1)
       {
          SerWrite("SerWrite: abcABC123\n\r", 21);
          SerPrint("SerPrint: abcABC123\n\r");
          SerPrint(zeichenkette);
          SerPrint("\n\r");
    
    		for(i=500; i--; Sleep(72));
       }
    }
    In C werden Zeichenketten mit dem Zeichen 0 abgeschlossen, deshalb überprüft diese Version von SerPrint() lediglich, ob das nächste zu sendende Zeichen >0 ist. Das Beispiel oben funktioniert bei mir zufriedenstellend, die Ausgabe im Terminal sieht so aus:
    Code:
    SerWrite: abcABC123
    SerPrint: abcABC123
    testtext
    SerWrite: abcABC123
    SerPrint: abcABC123
    testtext
    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    20.04.2008
    Ort
    Bremen
    Alter
    27
    Beiträge
    85
    Dankeschön für des Programm.
    Und es muss ja nicht immer als genial bezeichnet werden, solang es möglichst einfach seinen Zweck erfüllt

    beste Grüße
    the.speciali
    Wer den Himmel auf Erden sucht hat im Erdkundeunterricht geschlafen!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •