Forum: Compiler & IDEs WinAVR und fdevopen()


von Thorsten (Gast)


Lesenswert?

Hallo,

ich habe folgendes unter WinAVR programmiert:

int16_t TxChar(int8_t ch)
{
  while (!(UCSRA & 0x20));
  UDR = ch;

  return 0;
}

int16_t main(void)
{
  fdevopen(TxChar, NULL, 0);
  printf(...);
}

Beim compilieren erhalte ich folgende Warnung: "passing arg 1 of
`fdevopen' from incompatible pointer type". Wenn ich nun in der
Funktion TxChar den Datentyp des Arguments von "int8_t" auf "char"
ändere, ist die Warnung weg. Ich dachte, "char" entspricht "int8_t"
? Übrigens erhalte ich die Warnung auch, wenn ich uint8_t als Datentyp
wähle. Kann das jemand erklären ? Oder anders gefragt, was ist der
Unterschied zwischen char und int8_t ?

Vielen Dank.

Gruß
Thorsten

von Jörg Wunsch (Gast)


Lesenswert?

Nun, Du solltest Deine Funktion TxChar nach dem dokumentierten
Prototypen richten, den fdevopen() verlangt -- egal, ob und wie Du
annimmst, welcher andere Typ dazu identich oder kompatibel wäre.

fdevopen dokumentiert, daß es einen Zeiger auf eine Funktion

int func(char);

übergeben bekommen möchte.

Ansonten: `char' ist in der Voreinstellung des Compilers kompatibel
zu
`int8_t', ja.  Aber erstens kann man die Voreinstellung für `char'
per
Compiler-Option ändern, zweitens ist kompatibel eben nicht identisch.

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.