Hallo.
Memory Pools überfordern mich im Moment noch, ich muss sie aber
einsetzen da sonst mein RTOS säuerlich reagiert (Buffer underflow wegen
malloc).
Ich bin mir jetzt noch nicht sicher welches Konzept ich verwenden soll
und ob ich überhaupt verstanden habe wie Memory Pools überhaupt zu
verwenden sind.
Soweit ich verstanden habe ist der Vorteil dass ein Memorypool aus einer
bestimmten Struktur der Speicherinhalte besteht.Also sollte ich einen
Pool für alle gleichen Inhalte verwenden.
In meinen Fall habe ich z.B. zwei Module beispielsweise
usart_handler.c
und
debug_interface.c
beide brauchen einen Stringbuffer dessen Länge noch nicht feststeht und
erzeugen damit einen Block mit Datentyp char.
In meinem Fall (cmsis-rtx) wäre ein passender Pool:
1 | osPoolDef(char_pool,8,char);
|
siehe:
http://www.keil.com/pack/doc/cmsis_rtx/group___c_m_s_i_s___r_t_o_s___pool_mgmt.html#ga87b471d4fe2d5dbd0040708edd52771b
Jetzt frage ich mich: soll ich einen Pool für char-Datentypen erstellen
und dann in den Modulen Blöcke reservieren lassen?
Der Pool wäre dann ja Global.
Wo müsste ich ihn dann Definieren?
zur Info: ich benutze eine datei global.h , die alle möglichen Globalen
includes beinhaltet. Dort könnt ich also
1 | osPoolDef(char_pool,8,char);
|
2 | osPoolId pool_id;
|
reinhauen. Den Pool muss ich aber auch kreieren mit
1 | pool_id = osPoolCreate(osPool(char_pool));
|
nur wo soll das hin? pool_id müsste dann ja global verfügbar sein?
Eventuell steh ich aber auch nur schwer auf der Leitung.
Mein Gedankenansatz war folgender: osPoolCreate darf nur einmal
ausgeführt werden, deswegen ist es im Modul unzulässig. oder nicht?