Forum: Mikrocontroller und Digitale Elektronik V-USB IOExpander


von Sven B. (mainframeosx)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

tmp ist vorzeichenlos. itoa will eine vorzeichenbehaftete Zahl.

Nimm utoa.

von Sven B. (mainframeosx)


Lesenswert?

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.

von T. F. (sar)


Lesenswert?

1
replyBuf
 sollte vom Typ
1
char *
 sein. Ist aber
1
 static uchar[]
.

von Sven B. (mainframeosx)


Lesenswert?

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?

von T. F. (sar)


Lesenswert?

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

von Sven B. (mainframeosx)


Lesenswert?

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
Noch kein Account? Hier anmelden.