Ich bin gerade dabei einen USB-IO Expander aufzubauen. Als Kern benutze ich einen ATMega 644 über die I2C Schnittstelle werden 4 IO Expander vom Typ PCF8574 angesteuert. 1 Zusätzlicher PCF8574 ist mit eine LC-Display gekoppelt, (16 Zeichen und 2 Zeilen) damit kann man vom Host einen Text an das LCD anzeigen lassen. Das Ausgeben des Textes sowie das Setzen der IO Ports habe ich schon am laufen und funktioniert prima. Jetzt habe ich folgendes Problem: Natürlich will ich auch werte vom PCF8574 einlesen. Das funktioniert auch ganz gut, was aber nicht funktioniert ist die Übertragung des Wertes zum Host. Hier mal die Configuration: .... static uchar replyBuf[16] = "Test"; .... uchar tmp; .... case R_PORT_A: i2c_rep_start(0x41); tmp=i2c_readNak(); i2c_stop(); itoa(tmp,replyBuf,10); usbMsgPtr = replyBuf; return sizeof(replyBuf); } ... ... Wenn ich die Daten von einem PCF8574 auslese (tmp), und den den tmp Wert auf einen anderen PCF8574 schreibe klappt alles prima. Will ich aber den tmp Wert im replyBuf ablegen (wie oben) dann bekomme ich beim Compilieren immer die Fehlermeldung: main.c:168: warning: pointer targets in passing argument 2 of 'itoa' differ in signedness Was mache ich hier falsch.
Matthias Lipinsky schrieb: > tmp ist vorzeichenlos. itoa will eine vorzeichenbehaftete Zahl. > > Nimm utoa. Habe jetzt folgendes eingegeben: utoa(tmp,replyBuf,10); bekomme aber hier genau die gleiche Fehlermeldung! Deswegen verzweifle ich auch langsam.
Stefan S. schrieb: >
1 | replyBuf
|
sollte vom Typ
1 | char * |
sein. Ist aber
1 | static
|
2 | > uchar[] |
. Änder ich das jetzt auf char, bekomme ich das: main.c: In function 'usbFunctionSetup': main.c:169: warning: pointer targets in assignment differ in signedness Also nicht gut, ändere ich jetzt das ganze in usbdrv.c brauche ich gar nicht mehr weiter machen. Dann müsste ich denn vollständigen V-USB Code ändern. Gibt es keine andere Möglichkeit?
erstens ist das nur eine Warnung und kein Fehler. Wenn dich die Warnung stöhrt und du den Datentypen nicht einfach ändert kannst dann kannst du noch casten, wenns dir hilft:
1 | utoa(tmp, (char *) replyBuf, 10); |
Danke für die Hilfe, ich habe es hinbekommen. Ich liefere als Return wert sizeof(str), dann gehts. Danke für die Hilfe.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.