Hi,
ich habe ein stm32f4 board hier und eine lib aus dem Internet geladen,
die mir einen virtuellen ComPort erstellt. Die Ausgabe von Strings im
Terminal funktioniert super, allerdings möchte ich nun integer
übertragen.
Der Funktion zum Übertragen will char
void usb_cdc_printf(char *s);
Beim AVR habe ich dafür immer itoa über die stdlib verwendet, wie mache
ich es beim stm32?
Vielen Dank
Karl schrieb:> Beim AVR habe ich dafür immer itoa über die stdlib verwendet, wie mache> ich es beim stm32?
wenn es dort kein itoa gibt(was ich kaum glauben kann) gibt es ja immer
noch sprintf.
Karl schrieb:> das ist kein Prozent, sonder ein &(und) für die Adresse>> der Aufruf> void usb_cdc_printf(char *s);
ja sorry war ein Tippfehler, aber sprintf braucht auch ein char* und
dort nimmst du nicht die Adresse! Ein Array ist die Adresse.
Peter II schrieb:
...
> dort nimmst du nicht die Adresse! Ein Array ist die Adresse.
jain... ein Array ohne Angabe des Elements liefert die Adresse auf das
erste Element des Arrays.
Allerdings habe ich noch Probleme mit der Einbindung der stdio.h
#include <stdio.h> geht nicht, weil die lib wohl bei CooCox nicht zum
Standard gehört...
Ich habe nun im Internet noch einen Code für itoa gefunden (nicht mein
code)
1
char*itoa(char*buf,unsignedintval,charpad){
2
chari;
3
chartmp_buf[6];
4
5
for(i=0;val>0;val/=10)
6
tmp_buf[i++]=(val%10)+'0';
7
if(i==0)
8
tmp_buf[i++]='0';
9
10
while(i<pad)
11
tmp_buf[i++]=' ';
12
13
while(i>0)
14
*buf++=tmp_buf[--i];
15
16
*buf=0;
17
18
returnbuf;
19
}
der Aufruf...
1
usb_cdc_putc(itoa(s,counter,2));
Beim Compilieren gibt es keinen Fehler, aber im Terminal kommt nichts
-.-
Karl schrieb:> usb_cdc_putc(itoa(s,counter,2));
die funktion wird so nehmme ich mal an nur einen charakter übertragen..
aber du hast einen string zu übertragen....
nimm wieder
usb_cdc_printf(&s); <---- oder was auch immer du für einen funktion für
strings verwendet hast .. man kann nur raten ^^
thegameboy schrieb:> nimm wieder> usb_cdc_printf(&s);
Natürlich, gut gesehen... Leider bekomme ich im Terminal auch so nichts.
Das funktioniert...
usb_cdc_printf("Hello World!\n");
jenes nicht
usb_cdc_printf(itoa(s,counter,2));
Danke für den Code, es geht in die richtige Richtung...
Im Terminal werden nun Kästchen geschickt...
Weiß nicht wie ich das Zeichen mache, es ist jedenfalls in Hex 81, 17
,81 ,17....
also eine abwechselnde Folge, allerdings sieht das Kästchen in Ascii
gleich aus
Mhm, nun habe ich in der Funktion eine eigene Funktion erstellt
void usb_cdc_putint(uint8_t *s){
VCP_DataTx((uint8_t*)s);
}
Aufruf...
usb_cdc_putint(&counter);
Die Kommunikation funktioniert fast, im Terminal zeigt er als ascii
wieder nur den Kasten an, aber als Hex, Dec und Binär zeigt er die
richtige Zahl an.
Ich benutze HTerm als Terminal