www.mikrocontroller.net

Forum: Compiler & IDEs FIFO in C


Autor: Mops (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
das riecht nach einer SD-Karte

Autor: Mops (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm..ich rieche nüscht

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STL :-)

Oliver

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: guro (Gast)
Datum:

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

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Suche unter Ringbuffer und du wirst fündig...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mops (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.