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

Re: Limitierung bei Str_Printf() ??? Kategorie: Programmierung C (von Jo - 7.12.2010 8:15)
Als Antwort auf Re: Limitierung bei Str_Printf() ??? von PeterS - 6.12.2010 19:58

> > > > > > Hallo,
> > > > > > ich möchte über Printf Arraywerte über RS232 ausgeben.
> > > > > >
> > > > > > Das Codefragment zum reproduzieren sieht so aus: Mit in Summe 20 Argumenten OK,
> > > > > > ab 21 Argumenten wird alles ab 20 ignoriert
> > > > > >
> > > > > > for(i=0;i<48;i++){mkmh[i]=i;}
> > > > > > Serial_WriteText(COM1,"18%xn");
> > > > > > Str_Printf(send_str,"%sH%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.
> > > > > > %04x.%04x.%04x.%04x.%04x.%04x.%04x.%s","msg_start",
> > > > > > mkmh[0],mkmh[1],mkmh[2],mkmh[3],mkmh[4],mkmh[5],mkmh[6],mkmh[7],mkmh[8],mkmh[9],
> > > > > > mkmh[10],mkmh[11],mkmh[12],mkmh[13],mkmh[14],mkmh[15],
> > > > > > mkmh[16],mkmh[17],
> > > > > > "msg_end");
> > > > > > Msg_WriteText(send_str);
> > > > > > Serial_WriteText(COM1,send_str);
> > > > > >
> > > > >
> > > > > Hallo Jo,
> > > > >
> > > > > gibt es einen Grund, weshalb Du das Str_Printf nicht in einer Schleife benutzt?
> > > > >
> > > > > Grüße Joerg
> > > > Hallo Jörg,
> > > > ja, 2 Gründe.
> > > > a) Im Beispiele hier ist is ein Array, in real sind es verschiedene Var.
> > >
> > > Kann man verschiedenen Vars nicht in ein Array legen?
> > >
> > > > b) ich brauche die Daten in einem String; ein Str_Copy( x, y, 0xFFFF)  in einer Schleife um  den
> > > > String zusammenzubasteln ist laufzeittechnisch zu langsam.
> > > > Viele Grüße Jo

> > > >
> > >
> > > Bist Du dir mit der Laufzeit sicher?
> > >
> > > Ich habe schon bei etlichen Konstrukten die Zeit gemessen und es war oftmals anders als
> > > ich erwartet hätte. Gerade wenn man Serial_WriteText mit niedrigen Baudraten benutzt,
> > > wird die meiste Zeit beim schreiben der seriellen Daten verbraucht und nicht beim formatieren.
> > > Ich würde das ganze mit einem Array machen und die kurzen Strings einzeln senden.
> > > Bei der Adressierung des  Arrays würde ich Konstanten verwenden,
> > > die den Namen der Variablen entsprechen (enums gibt es ja leider nicht).
> > >
> > > Grüße Jörg
> > >
> > >
> > > > >
> > > > > > Serial_WriteText(COM1,"19%xn");
> > > > > > Str_Printf(send_str,"%sH%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.
> > > > > > %04x.%04x.%04x.%04x.%04x.%04x.%04x.%04x.%s","msg_start",
> > > > > > mkmh[0],mkmh[1],mkmh[2],mkmh[3],mkmh[4],mkmh[5],mkmh[6],mkmh[7],mkmh[8],mkmh[9],
> > > > > > mkmh[10],mkmh[11],mkmh[12],mkmh[13],mkmh[14],mkmh[15],
> > > > > > mkmh[16],mkmh[17],mkmh[18],
> > > > > > "msg_end");
> > > > > > Msg_WriteText(send_str);
> > > > > > Serial_WriteText(COM1,send_str);
> > > > > >
> > > > > >
> > > > > > hier die Ausgabe
> > > > > >
> > > > > > msg_startH0000.0001.0002.0003.0004.0005.0006.0007.0008.0009.000A.000B.000C.000D.000E.
> > > > > > #000F.0010.0011.msg_end
> > > > > > msg_startH0000.0001.0002.0003.0004.0005.0006.0007.0008.0009.000A.000B.000C.000D.000E.
> > > > > > 000F.0010.0011.0012
> > > > > >
> > > > > > Nun die 100$ Frage: Gibt es in der Implementierung von Str_Printf eine Limitierung?
> > > > > >
> > > > > > Viele Grüße
> > > > > >
> > > > > > Jo
> >
> > Hallo Peter,
> > ich möchte die Frage gerne noch an dich stellen, ob es eine Begrenzung der Args. bei Str_Printf()
> > besteht. Mir ist klar, dass dein Hauptthema z.Z. wohl eher der Interpreterabsturz bei größeren
> > Programmen ist, wenn du aber mal ne min. Zeit hast, wäre es super wenn du eine Antwort geben
> > Könntest.
> > Danke und Grüße
> >
> > Jo
>
> Nein, es gibt keine Limitierung. Ich habe am Wochenende einen Fehler gefunden, der den
> Formatierungsstring abgeschnitten hat. Der Bug ist gefixed.
>
> Gruss Peter
Danke Peter für die Antwort und den fix :-)


    Antwort schreiben


Antworten: