Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit typedef struct
Ich schreib mir grad ein Fifo
hier ein code ausschnitt
typedef struct {
uint_8 *pread;
uint_8 *pwrite;
uint_8 top;
uint_8 bottom;
} fifo_t;
[...]
static void inline _inline_fifo_put (fifo_t *f, const uint8_t data) {
if(f->pread == f->top) f->pread = f->bottom;
else f->pread++;
f->pread = data;
}
und ich bekomme den Fehler
fifo.h:19: error: 'fifo_t' has no member named 'pread'
fifo.h:19: error: 'fifo_t' has no member named 'top'
fifo.h:19: error: 'fifo_t' has no member named 'pread'
fifo.h:19: error: 'fifo_t' has no member named 'bottom'
fifo.h:20: error: 'fifo_t' has no member named 'pread'
fifo.h:22: error: 'fifo_t' has no member named 'pread'
undi ch hab keine Ahnung warum...
static void inline _inline_fifo_put
was bedeutet das erste "inline" ?
sowas kenn ich garnicht.
Vielleicht verwirrt das den Compiler so wie mich.
(Ich weiss aber auch nicht alles)
inline macht das der compiler beim Aufruf den Code direkt in die aufrufende Stelle schreibt
Mich verwirrt etwas anderes viel mehr:
Du ballerst ziellos mit Pointern um dich - du kannst einen Pointer auf einen uint8_t nicht mit einem uint8_t vergleichen!
pread und pwrite sind Zeiger auf den Speicher, top und bottom simple Byte-Werte (und definitiv keine Zeiger)
Vielleicht solltest du dir zuerst einmal die Beispiele aus dem RN-Wissen ansehen (da gibts einen Fifo in C), bevor du mit deinen Pointern noch jemanden verletzt ;)
mfG
Markus
Was ist mit der Fehlermeldung, die vor den ganzen "has no member"-Fehlern kommt (wegen dem uint_8)? Fehler arbeitet man der Reihe nach von oben ab. Oft (wie hier) erledigen sich dann nämlich die restlichen Fehler, weil es einfach Folgefehler sind.
ok ich hab den dereferenzierungszeiger bei f->pwrite = data; vergessen aber sonst?...
ah da hab ich noch einen Error gefunden
hier scheint der Fehler herzukommen
fifo.h:8: error: expected specifier-qualifier-list before 'uint_8'
aber im Internet scheint es nur fälle zu geben bei denen der Fehler bei selbst Referenzierung auftrit.
Eigentlich habe ich ja schon gesagt, wo der Fehler herkommt.
Es ist das "uint_8". Es gibt keinen solchen Typ (sofern du ihn nicht selbst definiert hast, was offensichtlich nicht der Fall ist).
Und zu dem hier
ok ich hab den dereferenzierungszeiger bei f->pwrite = data; vergessen aber sonst?... solltest du den Post von markusj nochmal etwas genauer lesen. Was soll z.B. der Sinn von "f->pread == f->top" sein, wenn das eine ein unit8_t ist, und das andere ein Zeiger auf ein unit8_t?
top soll die höhste speicheradresse die zu dem Speicherbereich gehört enthallten
ahh jetzt funktioniert es, ich dacht uint_8 sei schon in avr definiert.
top soll die höhste speicheradresse die zu dem Speicherbereich gehört enthalltenDu verwendest also einen AVR mit weniger als 255 Bytes SRAM?
ahh jetzt funktioniert es, ich dacht uint_8 sei schon in avr definiert.Mann, du hast dich einfach nur verschrieben. "uint_8" -> "uint8_t"
Hey Flo,
dein top und bottom sind simple Zählvariablen oder Werte zwischen 0 und 255. Bei jedem halbwegs ausgewachsenen AVR mit mehr als 256 Byte SRAM (oder sogar schon bei weniger) sind Pointer aber 16 Bit breit (u.U. sogar noch breiter?).
Deine Zugriffe machen in gar keinem Fall Sinn, du müsstest top entweder auch als Zeiger definieren und dann top mit Basisadresse + Fifogröße initialisieren, oder komplett offsetbasiert arbeiten und zur Basisadresse immer einen Zählerwert hinzuaddieren.
Bitte sieh dir endlich Mal funktionierenden Code an und lies nochmal in einem Tutorial über C und Pointer genau durch wie das ganz funktioniert und was du falsch gemacht hast!
mfG
Markus
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.