Forum: FPGA, VHDL & Co. Echoserver in SDK


von Jan S. (spongebob)


Lesenswert?

Moin!
Ich bin gerade dabei mit einem Echoserver rumzuspielen. Also erstmal 
paar Daten:
Ich nutze das ML507 und lasse einen Echoserver auf einem Microblase 
laufen und nutze EDK 12.4.
Soweit funktioniert auch alles, aber ich will halt jetzt ein paar 
Änderungen daran vornehmen und da fängts an kompliziert zu werden. 
Erstmal ist der Echoserver ja so eine Beispiel application und dann 
kommt irgendwann im echo.c eine zeile wo irgendein payload angesprochen 
wird:

if (tcp_sndbuf(tpcb) > p->len) {
  err = tcp_write(tpcb, p->payload, p->len, 1);

jetzt würde ich gerne das Payload auslesen und auf einem Hyperterminal 
ausgeben lassen.
Deswegen dachte ich mir, modifizier ich den Code mal folgendermaßen:

if (tcp_sndbuf(tpcb) > p->len) {
  err = tcp_write(tpcb, p->payload, p->len, 1);
  xil_printf("Das Datapayload ist: %i", p->payload);

es wird jedoch keine ausgabe fürs Payload gemacht. Dort steht immer
Das Datapayload ist:
aber es wird für das Payload nicht ausgegeben.
Was is da falsch?

Grüße Jan

von PittyJ (Gast)


Lesenswert?

Erst mal ein C-Buch lesen?
was soll %i als Format-Specifier sein?

von Jan S. (spongebob)


Lesenswert?

%i erwartet einen Integer. Wenn ich dann integer sende, müssten die doch 
ausgegeben werden. Mit casting habe ichs auch schon versucht. klappt 
nix...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Jan S. schrieb:
> aber es wird für das Payload nicht ausgegeben.
> Was is da falsch?
Welchen Datentyp hat payload?
Was sagt der Compiler?

Was kommt raus, wenn du sowas schreibst:
1
   xil_printf("Das Datapayload ist: %i", 55);

von Christian R. (supachris)


Lesenswert?

p->payload ist doch ziemlich sicher ein Pointer auf einen Puffer dessen 
Länge in p->len steht, den kannst du nicht so direkt ausgeben.

von PittyJ (Gast)


Lesenswert?

Jan S. schrieb:
> %i erwartet einen Integer. Wenn ich dann integer sende, müssten die doch
> ausgegeben werden. Mit casting habe ichs auch schon versucht. klappt
> nix...

Hm, %i kenne ich von C her überhaupt nicht.
%d wird benutzt, um integer auszugeben. So ist das auch in vielen 
Beispielen, die sich im Netz zu xil_printf finden.

Leider habe ich keine genaue Dokumentation von Xilinx zu xil_printf 
gefunden.
Da du ja genau weisst, dass dort auch %i gehen soll, musst du ja die 
entsprechende Dokumentation haben. Könntest du mir einen Link du geben, 
oder die Xilinx XAPP... Nummer? Würde mich nämlich jetzt mal 
interessieren.

von Lattice User (Gast)


Lesenswert?

%i ist zwar ungebräuchlich, aber u.A. sowohl von der glibc und auch von 
MS VisualStudio unterstützt. Funktion ist identisch zu %d.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.