Gast
#4692733
Hallo, ich bin gerade dabei auf einem CortexM4 (STM-Discoveryboard) eine C lib zu portieren, die ursprünglich für PC geschrieben wurde. Ich benutzte die newlib/nanolib + floatingpoint printf und scanf Unterstützung. Da diese lib mit Dateien umgeht, habe ich in die syscalls einen eigenen kleinen Dateihandler geschrieben. Das funktioniert auch soweit ganz gut, da es sich nur um eine Config-Datei dreht, die dort mit fopen, fread, etc. eingelesen wird. Weiterhin benutzt die lib intensiv dynamischen Speicher mit calloc, malloc, free. Irgendwie bekomme ich hier aber Probleme, da es bei einem calloc irgendwann im Hardfault landet. Jedoch wird davor einiges an calloc ohne Probleme aufgerufen. Ich habe in der syscalls _sbrk schon einiges durchprobiert und debuggt. Der heap auch noch reichen. Den hatte ich zum Test auch erhöht, es bricht dennoch an der selben Stelle ab (Hardfault). Da meine Beschreibung jetzt nicht zu eindeutig ist, habe ich nur ein paar Allgemeine Fragen: 1. Hat jemand einen guten Link wo die syscalls gut anhand des Cortex erläutert werden? Die Newlib Doku finde ich nicht gerade ausführlich. z.B. Obwohl das fread nur 10 Zeichen aus der Datei lesen will, bekomme ich ins syscall _read 1024 Zeichen zum auslesen vorgesetzt. Wird da irgendwo intern was gebuffert? Also, wo könnte man so was nachlesen? 2. Wie soll das mit dem dynamischen Speicher auf dem CortexM überhaupt funktionieren? Mit der minimalen syscalls Implementierung erhalte ich bisher kein free (negatives inc) in die _sbrk... Auch muss doch jeder malloc anschließend sein free ausführen, bevor ein weiteres malloc ausgeführt wird, sonst bekommt die einfach + 100 byte - 100 byte Heapberechnung totale Probleme?! Oder nicht? Es hat keinen wirtschaftlichen Charakter... ich wills einfach nur für mich lernen und habe bisher keine gute Doku gefunden. Danke Stefan