- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: Inhalt eines Arrays über USART ausgeben

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19

    Inhalt eines Arrays über USART ausgeben

    Anzeige

    Powerstation Test
    Hallo Zusammen,

    möchte gerne den Inhalt einer Variablen im Mega8, über den TX-Pin des
    USART ausgeben
    Möchte dazu den C-Code verwenden, den ich hier im Forum mal gefunden habe .
    Wäre euch sehr dankbar, wenn ihr mir sagen könntet ob ich den code richtig
    verstanden habe und ob man ihn für meine Zwecke so anwenden kann.

    Und wenn ja, könnte man nach dem selben Prinzip nicht auch den Inhalt
    eines Arrays über usart ausgeben ?

    Vielen Dank schonmal im Vorraus

    Gruß
    Casa74


    Code:
    void USART_puts(char* data)  /* Funktionsaufruf mit zeiger auf Variable
                                                    Data * (bin mir hier nicht ganz sicher)*/
    {
    uint16_t i;  /* uint16_t bekommt den Variablennamen i */
    
    for(i=0;i<strlen(data);i++)    /*16Bit langer Variableninhalt wird
                                               hochgezählt, solange i kleiner als die Länge
                                               von "data" (ohne \0) */
    
    	{
    		USART_putc(data[i]);  /* Innerhalb der for- Bedingung wird einzeln
                                          Jedes Bit uber usart ausgesendet */
    	}

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    01.08.2005
    Ort
    49.80248 8.59252
    Alter
    40
    Beiträge
    172
    USART_putc(data[i]); /* Innerhalb der for- Bedingung wird einzeln
    Jedes Bit uber usart ausgesendet */
    Hier wird jedes Zeichen einzeln gesendet. Sonst ist soweit alles richtig.
    Mit einem Array wuerde es auch gehen. Es wird solange gesendet, bis die Schleufe auf ein '\0' trifft das das ende vom String angibt.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    43
    Beiträge
    112
    Hallo,
    soweit alles richtig, würde allerdings "i<strlen(data)" gegen "*(data+i)" (bzw "data[i]" was genau das gleiche ist) austauschen(natürlich ohne die ").
    Da ist der Rechenaufwand für den Prozessor wesentlich geringer.
    Wenn Du Verständnissprobleme hast, meld Dich einfach.
    Philipp

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Zitat Zitat von Psiyou
    Hallo,
    soweit alles richtig, würde allerdings "i<strlen(data)" gegen "*(data+i)" (bzw "data[i]" was genau das gleiche ist) austauschen(natürlich ohne die ").
    Da ist der Rechenaufwand für den Prozessor wesentlich geringer.
    Wenn Du Verständnissprobleme hast, meld Dich einfach.
    Philipp
    Also um Effizienz ging es auch nicht, sondern erst mal ums Verständnis,
    und da ist der Code von casa74 genau richtig.

    Zum Verständnis ist so was wie

    Code:
    void USART_puts (char *data)
    {
    	char c;
    	
    	while (c = *(data++), c)
    		USART_putc (c);
    }
    nicht gerade hilfreich.
    Disclaimer: none. Sue me.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    43
    Beiträge
    112
    @ SprinterSB
    Hm, so im Nachhinein hast wohl recht, da war ich wohl etwas zu voreilig...
    Soll nicht wieder vorkommen.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    10.02.2005
    Beiträge
    19
    Ja super!
    Vielen Dank für eure Tips und Alternativen.
    Ist schön wenn man mal was richtig verstanden hat

    Habe hier das ganze mit einem Array probiert.
    Weiss hier allerdings nicht wie man innerhalb eines Array-inhalts das letzte /0 ausschliessen kann.


    Gruß und Danke !

    Casa
    Code:
    void USART_puts(char* array[255])  /* Funktionsaufruf mit zeiger auf array */
    
     int i                                                 /* Einfache Zählervariable */
    
     { for (i=0; i<255; i++)   /*array wird  hochgezählt, solange i kleiner als die Länge des arrays */
     {
         USART_putc(array[i]);    /* Innerhalb der for- Bedingung wird einzeln
                                                 Jeder Inhalt des Array seriell über usart 
                                                 ausgesendet */ 
    } 
    }

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Code:
    for (i=0; i<255; i++)   /*array hochgezählt, solange i kleiner als Länge */
    { 
         if (!array[i])       /* => if (array[i] == '\0')
               break;             /* bei NULL raus aus der Schleife */
         USART_putc(array[i]); 
    }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    17.11.2003
    Ort
    Alfeld (50km südl. Hannover)
    Alter
    41
    Beiträge
    237
    Hi,

    würde so doch auch gehen, dann spart man die if abfrage:

    Code:
    for (i=0; array[i] != '\0'; i++)   /*Schleife ausführen solange  */
         USART_putc(array[i]);
    Dann musst du aber sicher sein das eine \0 vorkommt, sonst schickt er den ganzen Speicher raus
    Open Minds. Open Sources. Open Future

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.04.2005
    Ort
    Hamburg <-> Bremen
    Alter
    43
    Beiträge
    112
    Hm...
    wenn ich das jetzt so sehe sind wir jetzt an genau dem gleichem Code den ich in meinem ersten Beitrag vorgeschlagen hatte...

Berechtigungen

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

12V Akku bauen