Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Probleme bei Ausgabe (Msg..) Kategorie: Programmierung C (von PeterS - 1.06.2010 10:08)
Als Antwort auf Re: Probleme bei Ausgabe (Msg..) von Josef - 30.05.2010 20:23

> > > Hallo zusammen,
> > >
> > > ich habe beim Ausgeben mit Msg ..... Probleme.
> > > Bei dem unten angefügten Testprogramm werden die ersten Zeilen abgeschnitten.
> > > Wenn ich das prg in der Schliefe laufen lasse funktionierts ab dem zweiten Durchlauf.
> > >
> > >     float val[1];
> > >     word EEPROM_Adr;                // In dieser Variablen werden die EEPROM
> > >                                     // Adressen gespeichert.
> > >     byte EEPROM_Data;               // Deklaration von Variablen
> > >     int n;
> > >
> > > void schreiben (byte in[])
> > > {
> > >     for (n=0; n<4; n++)
> > >     {
> > >         // Wert zum Schreiben in das EEPROM wird festgelegt.
> > >         EEPROM_Data=in[n];
> > >         EEPROM_Write(EEPROM_Adr, EEPROM_Data);
> > >         Ausgabe(EEPROM_Adr, EEPROM_Data);
> > >         Msg_WriteText("in_write[n]"); Msg_WriteHex(in[n]); Msg_WriteChar(13);
> > >         EEPROM_Adr++;
> > >     }
> > > }
> > > void lesen (byte in[])
> > > {
> > >     EEPROM_Adr=0;                   // Wertzuweisung der Variablen EEPROM_Adr.
> > >    // Msg_WriteChar(13);              // Ausgabe: Wagenrücklauf
> > >
> > >     for (n=0; n<4; n++)
> > >     {
> > >         // Der Wert der EEPROM_Adr wird aus dem EEPROM gelesen und in der
> > >         EEPROM_Data=EEPROM_Read(EEPROM_Adr);
> > >         in[n]=EEPROM_Data;
> > >         Ausgabe(EEPROM_Adr, EEPROM_Data);
> > >         Msg_WriteText("in_read[n]"); Msg_WriteHex(in[n]); Msg_WriteChar(13);
> > >         EEPROM_Adr++;
> > >     }
> > > }
> > > void Ausgabe(word adr, byte data)
> > > {
> > >     Msg_WriteHex(adr);              // Ausgabe der Adresse
> > >     Msg_WriteChar(':');             // Ausgabe: :
> > >     Msg_WriteHex(data);             // Ausgabe des Adressinhaltes
> > >     Msg_WriteChar(0x20);            // Ausgabe: Leerzeichen
> > > }
> > >
> > > void main(void)
> > > {
> > >     int i;
> > >     Msg_WriteText("Test EEPROM"); Msg_WriteChar(13);
> > > //    for (i=0; i<3; i++)
> > > //    {
> > >     EEPROM_Adr=0;
> > > //    Msg_WriteText("Schleife:  ");  Msg_WriteInt(i); Msg_WriteChar(13);
> > >     val[0]=9654.000;
> > >     Msg_WriteText("VAL1:  ");  Msg_WriteFloat(val[0]); Msg_WriteChar(13);
> > >     Msg_WriteText("vor schreiben "); Msg_WriteChar(13);
> > >     schreiben(val);
> > >     val[0]=0.0;
> > >     Msg_WriteText("VAL2:  "); Msg_WriteFloat(val[0]); Msg_WriteChar(13);
> > >     Msg_WriteText("vor lesen "); Msg_WriteChar(13);
> > >     lesen(val);
> > >     Msg_WriteFloat(val[0]); Msg_WriteChar(13);
> > > //    }
> > > }
> > >
> > > AUSGABEFENSTER:
> > > Interpreter gestartet - 4kb RAM                                                                                        
> > > 016 in_write[n]0016                                                                                                    
> > > 0003:0046 in_write[n]0046                                                                                              
> > > VAL2:  0.00000                                                                                                          
> > > vor lesen                                                                                                              
> > > 0000:0000 in_read[n]0000                                                                                                
> > > 0001:00D8 in_read[n]00D8                                                                                                
> > > 0002:0016 in_read[n]0016                                                                                                
> > > 0003:0046 in_read[n]0046                                                                                                
> > > 9654.00000                                                                                                              
> > >                                                                                                                        
> > > Zeit: 60ms                                                                                                              
> > > Interpreter gestoppt
> > >
> > > Z.B.: Test EEPROM wird nicht geschrieben.
> > > Vielleicht hatte schon jemand dises Problem
> > > Danke
> > Hallo Josef,
> >
> > ich kenne das Problem.
> > manchmal werden Ausgaben verschluckt.
> >
> > Benutze mal ein delay vor der ersten Ausgabe....
> >
> >
> > Grü�e Jörg
> Danke Jörg
> funktioniert

Die Msg_xxx() Funktionen haben einen Puffer, der überlaufen kann. Bei einer USB Verbindung
ist das unkritisch, aber bei einer seriellen Bootloader Verbindung kann man den Puffer
überlasten.

Gruss Peter

Gruss Peter


    Antwort schreiben


Antworten: