Forum: Compiler & IDEs FIFO in C


von Mops (Gast)


Lesenswert?

Servus

ich will einen FIFO programmieren, in den eingehende CAN Nachrichten 
gesammelt werden. Es müsste pro Nachricht also sowas wie ein Struct 
existieren. ID+DLC+RTS+DATA = 1 FIFO Eintrag

und davon etwa 10.000 Stück.

Gibt es fertige Beispiele zum übernehmen?

Gruß
Mops

von Ulrich (Gast)


Lesenswert?

das riecht nach einer SD-Karte

von Mops (Gast)


Lesenswert?

hmm..ich rieche nüscht

von Oliver (Gast)


Lesenswert?

STL :-)

Oliver

von Ulrich (Gast)


Lesenswert?

jo schreibe eine Klasse in der alle Datengespeichert werden können. Und 
dann erstelle einen STL-Container und speicher die Daten darinnen. Sind 
ca. 20Zeilen an Code und müsste auf Anhieb laufen...

von guro (Gast)


Lesenswert?

könnt' aber auch sein, dass eine STL-basierter FIFO zu langsam ist 
dafür...

von Dirk (Gast)


Lesenswert?

Suche unter Ringbuffer und du wirst fündig...

von Karl H. (kbuchegg)


Lesenswert?

guro wrote:
> könnt' aber auch sein, dass eine STL-basierter FIFO zu langsam ist
> dafür...

Was erst mal bewiesen werden müsste.
Meistens ist es schwer die STL-Container in der
Laufzeit zu schlagen.

von Mops (Gast)


Lesenswert?

geht das echt nur so komplizeiert? STL? nie gehört :-/

ich dächte das wären ein paar 10 Codezeilen, einen kleinen FIFO zu 
machen.

von Karl H. (kbuchegg)


Lesenswert?

Mops wrote:
> geht das echt nur so komplizeiert?

STL ist nicht kompliziert.

> STL? nie gehört :-/

C++ - Standard Template Library
Als C Programmierer kannst du damit natürlich nichts
anfangen. In C++ wäre das aber das Mittel zur Wahl.

>
> ich dächte das wären ein paar 10 Codezeilen, einen kleinen FIFO zu
> machen.

Ist auch nicht schwer. Ist aber eine gute Übung für jeden C
Programmierer.

Als Ringbuffer ausgeführt:
Nimm dir ein Array, 2 Indizes (einer für Lesen,
einer für Schreiben) und mach 2 Funktionen für Reinstellen
und Rauslesen. Je nachdem, wie das konkret aufgebaut wird,
ist das einzig Knifflige das Feststellen wenn der FIFO voll
ist. Der Rest ist: Daten kopieren, Index erhöhen, Index auf
Wrap-Around testen, fertig.

Wenn du soweit bist, dann teste mal nicht mit deiner CAN Daten-
struktur, sondern mit stinknormalen int und mach die FIFO auch
nicht 10000 gross, sondern 5, 6 oder 8 (damit du nicht ewig
Debuggen musst um die Fälle Wrap-Around und 'FIFO voll' zu testen)

von Oliver (Gast)


Lesenswert?

Bevor der arme Kerl jetzt rausfindet, daß sein Compiler gar keine STL 
übersetzt, wenn doch, das Programm danach nicht in den Speicher passt, 
und wenn doch, ihm das
1
CanStruct fifo[10000];
den Rest gibt (zumindest, wenn er hier im Mikrocontroller-Forum 
tatsächlich richtig ist),

wenigstens etwas code.
http://www.thescripts.com/forum/thread212857.html

(Wenn du allen links aufmerksam folgst, gibt es da sogar richtig viel 
Code)


Oliver

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.