malloc und free auf embedded system



  • mir kommt es nicht sonderlich schlau vor (viel) malloc und free auf einem microprozessor zu verwenden, besonders wenn nichts schief laufen darf.

    Ich habe bein uC code beides bisher noch nicht gesehen. (was daran liegen kann, das ein großer Teil der Implementierung versteckt ist.)

    Was sagt ihr dazu?

    EDIT: und was ist, wenn ein Interrupt dazwischenfunkt und der Fehler produziert?


  • Mod

    Was ist deine Frage?



  • Ob ich malloc und free vermeiden sollte auf einem System mit geringem Speicher, das ausfallsicher sein muss.

    EDIT: ja ok, ich kann prüfen, ob die Erstellung erfolgreich war usw, aber:

    malloc
    // lots of code
    free
    

    ist mir an manchen Stellen nicht durchsichtig genug, und try catch gibt es doch in C nicht, oder? (ist eh egal, ich weiß das ich das nicht nutzen kann, auch wenn der spezielle compiler den ich benutze das ohnehin anbietet (ich beziehe mich hier auf die Projektoptionen)

    EDIT: Ich habe auf uC bisher nur in (abgespecktem) C++ programmiert. Da bin ich sowieso ohne new/delete ausgekommen.



  • Die Antwort ist ja. Große, verlinkte Datenstrukturen kannst du auf µCs mit wenigen Kilobyte Speicher (oder noch weniger) eh nicht gebrauchen, und in C99 gibt es VLAs, die die meisten anderen Anwendungsfälle abdecken.

    Es mag Fälle geben, in denen malloc auch dort eine Alternative ist, aber das ist doch eher selten. Ggf. ist darauf zu achten, dass entweder Interrupts den Heap in Ruhe lassen oder für die Dauer der Aufrufe von malloc und free Interrupts abgeschaltet werden. Dies birgt natürlich seine ganz eigenen Probleme, wenn schnell auf Hardware-Input reagiert werden muss.


Log in to reply