Ich werde mit malloc und free mit dynamischem Speicher umgehen müssen. In der FreeRTOS-Dokumentation habe ich festgestellt, dass pvPortMalloc (Größe) und vPortFree (ptr), pvPortMalloc (Größe) einwandfrei funktionieren. Wenn Sie versuchen, Speicher mit vPortFree (ptr) in einem Thread freizugeben, bleibt der Code bei diesem Aufruf hängen.
Ich verwende heap_4 für CMSIS-RTOS in TrueStudio.
Antworten:
In FreeRTOS hängt die Art
pvPortMalloc()
und Weise dervPortFree
Implementierung davon ab, welche der Heap-Optionen Sie für Ihr Projekt ausgewählt haben.https://www.freertos.org/a00111.html
Nach dem Verhalten Ihres Projekts zu urteilen, scheint es, dass entweder:
Wenn Sie Speicher mallocieren, zeigt der Zeiger, den Sie erhalten, tatsächlich ein wenig in den tatsächlich zugewiesenen Speicherblock.
Der Abstand zwischen dem tatsächlichen Beginn des Blocks und dem Zeiger, den Sie erhalten haben, wird zum Speichern einiger Informationen über den Block und den Heap verwendet, mit denen
free
die Zuordnung des Blocks aufgehoben und der Block an den Heap zurückgegeben wird, wenn Sie damit fertig sind.Wenn Sie diese Informationen verfälschen, wird free verwirrt und zeigt leicht die von Ihnen beschriebenen Symptome.
quelle