FB_DynMem_Manager
Der Funktionsbaustein stellt die Möglichkeit bereit, dynamisch Speicher zu allokieren und diesen wieder freizugeben. Hierbei geben integrierte Zähler den Speicherverbrauch an und ermöglichen so einen Überblick über den bereits allokierten Speicher.
Es wird dem Anwender freigestellt, ob eine Instanz über die gesamte Applikation hinweg genutzt wird, oder ob mehrere einzelne Instanzen für verschiedene Programmteile verwendet werden. Letzteres kann bei größeren Anwendungen von Vorteil im Diagnosefall sein. Dieser Funktionsbaustein ist MultiTasking-fähig und eine Instanz kann somit aus verschiedenen Task-Kontexten heraus verwendet werden.
Sollte der Funktionsbaustein beim Herunterfahren der SPS feststellen, dass nicht die gesamte Menge des allokierten Speichers bereits freigegeben ist, wird eine Fehlermeldung als Event an den TC3 Event Logger versendet.
Properties
nAllocatedSize: gibt die aktuelle Menge des mit dieser Funktionsbausteininstanz allokierten Speichers in Bytes an.
nBufferCount: gibt die Menge der mit dieser Funktionsbausteininstanz allokierten Puffer an.
nObjectCount: - future reserved -
Methoden
Alloc():
Die Methode allokiert dynamisch Speicher und liefert einen Pointer auf diesen Speicherblock zurück. Bei fehlgeschlagener Allokation, bspw. weil kein freier Speicher verfügbar ist, liefert die Methode NULL zurück.
Neben der gewünschten Größe in Bytes wird angegeben, ob der Speicherblock genullt werden soll.
Der dynamisch allokierte Speicher kann für individuelle Daten oder Datenblöcke verwendet werden. Er kann nicht zur dynamischen Instanziierung von Funktionsbausteinen verwendet werden.
METHOD Alloc : PVOID
VAR_INPUT
nSize : UDINT; // requested size in bytes
bReset : BOOL; // zero the allocated memory
END_VAR
Free():
Die Methode gibt einen zuvor allokierten Speicher wieder frei. Hierbei muss der Speicherblock zuvor mit derselben Funktionsbausteininstanz allokiert worden sein und die Größe dieses Speicherblocks muss angegeben werden.
METHOD Free
VAR_INPUT
p : REFERENCE TO PVOID; // the given pointer is reset to zero after deletion
nSize : UDINT;
END_VAR
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4024.7 | IPC oder CX (x86, x64, ARM) | Tc3_DynamicMemory |