Ich suche seit längerem eine general purpose Bibliothek für embedded c Umgebungen. Also eine Bibliothek welche Sortieralgorithmen, abstrakte Datenstrukturen (wie z.B. hash tables, linked list, queues, ringbuffer, etc.), crc-Berechnungen, usw. enthält. Dabei sollte sie vermeiden dynamisch Speicher zu allokieren, da wie gesagt in einem embedded Bereich. Bisher habe ich lediglich glib gefunden. Da ist aber das Problem des dyanmisch allokierten Speichers und das die Zielgruppe hier eher auf dem PC programmiert. Wie macht ihr das? Implementiert ihr eure eigenen Algorithmen, suche ihr euch auf bspw. auf github vertrauesnwürdige Snippets oder kennt ihr eine Bibliothek?
Die libraries nehme ich von Fabrikanten (infinion; meistens hardware-ansteuerung) und die standard-C-libraries. Oder schreibe ich selber (basiert auf beispielen) damit ich genau weiss was das an resources benutze und weil ich es dann besser anpassen kann. Auch sind grossere datenmengen oft nicht im internen processor aber auf SD karte damit die libraries schon schnell hardware-gebunden werden. Die Residenz von daten lass ich dann soviel moeglich im library damit ich, wenn die Residenz sich aendert, nur die library aendere. Patrick aus die Niederlaende
Aaron K. schrieb: > Wie macht ihr das? Implementiert ihr eure eigenen Algorithmen, suche ihr > euch auf bspw. auf github vertrauesnwürdige Snippets oder kennt ihr eine > Bibliothek? Hallo Aaron, ich habe mir über die Zeit von allen Seiten her Bibliotheken zusammengezogen. Vieles aus dem Netz, vieles von den Projekten die ich im Laufe der Zeit bearbeitet habe. Du brauchst ein modernes Konfigurationssystem, wie zb CMAKE. Dann kannst du dir dein eigenes Archiv aufbauen und nach Bedarf die Bibliotheken verknüpfen, je nach Projekt. Da gibt es dann eine lib algorithm, pathwalker,crclib, stringlib und, und, und. Mit der Zeit kommt dann einiges zusammen. Du brauchst eine Vorstellung davon wo du die libs parken kannst und ob die öffentlich einsehbar sein dürfen. Ich hoste privat mein Zeug über Gitlab auf meinem eigenen Server, so hat auch nicht unbedingt hinz und kunz Zugriff darauf. Und wenn ich dann im beruflichen Umfeld Probleme lösen muss, scheue ich es nicht, diese auch mal beim AG liegen zu lassen. Du hast gut erkannt, das du bei oft wiederkehrenden Problemen nicht ständig das Rad neu erfinden musst. Und hinter einer crclib ist sicherlich auch kein Geschäftsgeheimnis, ist aber eine Grauzone. Was spricht eig. gegen dynamische Speicherallokation? Die nutze ich zuhauf in meinen Projekten. Wenns gut gemacht ist, y not? JoJo
:
Bearbeitet durch User
Joe J. schrieb: > Was spricht eig. gegen dynamische Speicherallokation? Die nutze ich > zuhauf in meinen Projekten. Wenns gut gemacht ist, y not? Erst mal danke für die Antwort. Ich meine herauszulesen, dass auch dir keine allgemeien Bibliothek für c bekannt ist und du dich an öffentlichem Code inspirierst und dir die snippets für später abspeicherst. Zu deiner Frage bezüglich dynamischer Speicherallokation: Ich habe mich intensiv damit beschäftigt ob dyamische Datenstrukturen eine gute oder schelchte Idee im embedded Bereich sind und bin zu dem Entschluss gekommen, dass es mit modernen µC (mit viel Speicher) kaum ein Problem ist. Da oftmals ausreichend Speicher vorhanden ist, dass malloc() fehlschlägt. Falls es jedoch fehlschlägt, gibt es oft keine Möglichkeit diesen Error zu lösen und das System stürzt ab. Da ich jetzt nicht mit Satelitten oder ähnlich schwierig zu erreichenden Geräten zu tun habe, wäre ein Memory-Leck auch kein Beinbruch. Jedoch unter Umständen sehr teuer, da wir bisher keine bootloader verwenden. Dazu kommt noch die fragmentierung. Entweder man verwendet einen custom-Allocator, der den Speicher defragmentiert, oder man hat früher oder später eine fehlallocation. Alles in allem kann man dynamische Speicherallokation schon verwenden, vor Allem wenn ein bootloader mit an Bord ist, jedoch ist es oftmals leicht möglich die maximale Auslatung von Datenstrukturen abzuschätzen und demenstrpechend den Speicher statisch zu allokieren. Hoffe ich habe deine Frage beantwortet
Aaron K. schrieb: > Erst mal danke für die Antwort. Ich meine herauszulesen, dass auch dir > keine allgemeien Bibliothek für c bekannt ist und du dich an > öffentlichem Code inspirierst und dir die snippets für später > abspeicherst. Mehr als ein Snippet. Eine vollständige Bibliothek für ein spezifisches Problem, die sich dann statisch ins Projekt linken lässt. Unbedingt auch Lizenvorgaben beachten, nicht das jemand gegen mich wegen diesem Post irgenwann rechtlich vorgeht,wegen falscher Beratung;-=) Aaron K. schrieb: > Da ich jetzt nicht mit Satelitten oder ähnlich schwierig zu erreichenden > Geräten zu tun habe, wäre ein Memory-Leck auch kein Beinbruch. Jedoch > unter Umständen sehr teuer, da wir bisher keine bootloader verwenden. Da offtopic, kannst das ja so stehen lassen. Grüße Jo
:
Bearbeitet durch User
Joe J. schrieb: > Was spricht eig. gegen dynamische Speicherallokation? Die nutze ich > zuhauf in meinen Projekten. Wenns gut gemacht ist, y not? > JoJo Es spricht z.B. dagegen dass du einen relativ kleinen Speicher hast und du sicherstellen musst dass dieser IN JEDEM FALL ausreicht. Das ist mit dynamischem Speicher ungleich schwieriger. Was machst du wenn dein malloc einmal fehl schlägt? Wenn du Glück hast, kannst du eine Fehlermeldung auf einem LCD Display anzeigen. Und dann? Für den Nutzer ist das Gerät kaputt. Es gibt keine gute Möglichkeit solche Fehler auf einem Embedded System zu behandeln. Oft hat man gar keine UI und das Gerät stoppt einfach und ist dann eben auch für den Nutzer defekt. Auf einem PC ist das was anderes, da poppt halt ein Fenster auf, der Anwender schließt ein paar Anwendungen und versucht es nochmal. Und auf kleinen Controllern gibt es nur einen Fall in dem dynamischer Speicher notwendig ist: Wenn du eine große Anzahl von Objekten mit stark unterschiedlicher Größe im Speicher halten musst, und erst zur Laufzeit weißt, wie viele von welcher Sorte es werden sollen. Wenn sich diese Objekte größenmäßig stark unterscheiden, ist auch eine union nicht mehr praktisch, weil es bei statischem Speicher die max. Anzahl der kleineren Objekte auf die max. Anzahl der größeren Objekte beschränkt.
:
Bearbeitet durch User
Cyblord -. schrieb: > Es gibt keine gute Möglichkeit > solche Fehler auf einem Embedded System zu behandeln. Oft hat man gar > keine UI und das Gerät stoppt einfach und ist dann eben auch für den > Nutzer defekt. Embedded Systeme sind vielfältig, daher stimmt diese deiner Meinung nach allgemeingültige Aussage einfach nicht. Mir fallen da schon Lösungen ein, für den einen oder anderen Fall aber mag das gelten was du da schreibst. Jojo
Joe J. schrieb: > Embedded Systeme sind vielfältig, daher stimmt diese deiner Meinung nach > allgemeingültige Aussage einfach nicht. Dann sagen wir so: In den meisten Fällen ist das so wie von mir beschrieben.
Und dann bitte nochmal zurück zum Topic. Gehe ich richtig in der Annahmen, dass das typische Vorgehen für code-snippets wie bspw. ein Sorting-Algo oder Datenstrukturen wie linked-lists ist, dass man bspw. github danach dursucht, sich an dem code inspiriert oder ihn sogar übernimmt (wenn erlaubt)? Also: 1. Recherche 2. Implementierung Oder gibt es auch iwo. eine Datenbank oder wo hochwertige Implementierungen von Algorithmen hinterlegt sind? Wenn ja welche? Gruß
Ich verwende ausschliesslich meine eigenen Libraries. Und ja, kein dynamischer Speicher,
Aaron K. schrieb: > Oder gibt es auch iwo. eine Datenbank oder wo hochwertige > Implementierungen von Algorithmen hinterlegt sind? Wenn ja welche? Naja für spezifische Probleme kannst du Bibliotheken auch einkaufen. Die haben sicherlich aucht tlw eine bessere Qualität wie OS Zeug oder schlichtweg überhaupt eine Lösung(weg von not-invented-here). Ist immer ein Mix und die Frage ist, was du suchst udn wie die Prioritäten sind(Projektvorgaben zb). Hersteller Libs wurde ja bereits genannt - und sind tlw. nicht nur auf einen Hersteller begrenzt anwendbar.
:
Bearbeitet durch User
Aaron K. schrieb: > Oder gibt es auch iwo. eine Datenbank oder wo hochwertige > Implementierungen von Algorithmen hinterlegt sind? Wenn ja welche? Für bestimmte Probleme ist sicherlich Recherche unerlässlich. Geübter Umgang mit Suchmaschinen - wieso habe ich das eig. noch nie in einer Stellenausschreibung gesehen? Imho Skills die eig. zwingend erforderlich sind für einen guten Ingenieur. Beispiel TLS: https://en.wikipedia.org/wiki/Comparison_of_TLS_implementations
> Geübter Umgang mit Suchmaschinen - wieso habe ich das eig. noch nie in einer
Stellenausschreibung gesehen?
Wie misst man das ?
Eine Library einkaufen. Dazu muesste das Designziel bekannt sein.
Moeglichst schnell, moeglichst kompakt, moeglichst unversell, kompatibel
bis in die Steinzeit ...
Bei TLS, genannt oben, macht das wahrscheinlich schon Sinn, bei
Matritzen diagonalisieren vielleicht auch, oder eben auch nicht.
Aaron K. schrieb: > Ich suche seit längerem eine general purpose Bibliothek für embedded c > Umgebungen. Also eine Bibliothek welche Sortieralgorithmen, abstrakte > Datenstrukturen (wie z.B. hash tables, linked list, queues, ringbuffer, > etc.), crc-Berechnungen, usw. enthält. Hast Du Dir mal angeguckt, was die C++ Standard-Bibliothek so zu bieten hat? In C++ ist es auch etwas einfacher, Datenstrukturen zu implementieren, die sich dann über den zu haltenden Typen und z.B. Maximal-Länge parametrisieren lassen. Für hash tables, möchtest Du wahrscheinlich auch die Hash-Funktion vorgeben können.
Aaron K. schrieb: > Oder gibt es auch iwo. eine Datenbank oder wo hochwertige > Implementierungen von Algorithmen hinterlegt sind? Das Problem ist in der Regel, dass es irgendwie doch nicht passt. Von 16/32-Bit Unter (und nein, das ist nicht egal) angefangen über Alignment hin zu Performance vom 8 bitter 1MHz bis zum PPC@1GHz. Allein von sprintf hat jeder 100 Version und trotzdem schreiben sich die meisten eine Byte to AsciiHex immer wieder selber. Binary search hat jeder embedded C-compiler dabei. Trotzdem nutzt das am Ende kaum jemand um eigenen Code
:
Bearbeitet durch User
Naja, die Anforderungen an eine Lib sind doch stark unterschiedlich. Der eine will die perfekte Lib mit 1000 Bells & Whistless, nicht unter 1MB je Funktion. Der andere will sie möglichst einfach und übersichtlich, daß sie auch auf einem ATtiny85 läuft. Eine Lib, die es jedem recht macht, wird es nie geben.
Wenn Du tatsächlich viele komplexere Datenstrukturen hast, würde ich wirklich Richtung C++ statt reinem C gehen. Die Fülle an Libraries ist im Raum C/C++ einfach größer. Ich nutze oft die C++ Template Klassen. Falls in embedded Systemen kein dynamischer Speicher genutzt werden soll, gibt es inzwischen auch einige kompatible Libraries mit statischen Klassen, z.B. https://www.etlcpp.com/
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.