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
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...
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.
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.