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 PeterS - 6.12.2010 19:58)
Als Antwort auf Re: Limitierung bei Str_Printf() ??? von Jo - 4.12.2010 9:15

> > > > > 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


    Antwort schreiben


Antworten:

Re: Limitierung bei Str_Printf() ??? (von Jo - 7.12.2010 8:15)