La funzione esegue l’allocazione di uno spazio di memoria della dimensione in byte definita da parametro Size. La funzione ritorna il puntatore allo spazio di memoria allocato.
La memoria è allocata nella memoria di sistema e quindi non utilizza la memoria a disposizione del programma utente. Nel caso in cui non vi sia spazio in memoria per l’allocazione del buffer definito, la funzione ritorna 0.
A differenza della funzione SysRMAlloc non è possibile liberare la memoria allocata da questa funzione.
Approfondimenti
- In questo articolo informazioni sulla memoria dei sistemi.
Descrizione
Size (UDINT) Indica la dimensione in bytes dell’area da allocare.
La funzione ritorna un puntatore di typo (PVOID) con l’indirizzo di allocazione del buffer di memoria. eNULL se non vi è spazio per allocare il buffer.

Esempi
Come utilizzare gli esempi.
Connettendosi con un telnet alla porta indicata ad ogni secondo viene incrementato il valore di un contatore e ne viene inviato il valore come stringa al terminale.
LogicLab (Ptp116, ST_SysMAlloc)
PROGRAM ST_SysMAlloc
VAR
Fp : eFILEP; (* File pointer *)
BSize : UINT := 64; (* Buffer size definition *)
SOut : @STRING; (* String output pointer *)
Counter : UDINT; (* Counter *)
TimeBf : UDINT; (* Time buffer (mS) *)
TCPServer : SysTCPServer; (* TCPServer management *)
END_VAR
// *****************************************************************************
// PROGRAM "ST_SysMAlloc"
// *****************************************************************************
// An example of how allocate a memory buffer and how to use it.
// -----------------------------------------------------------------------------
// -------------------------------------------------------------------------
// INITIALIZATION
// -------------------------------------------------------------------------
// First program execution loop initializations.
IF (SysFirstLoop) THEN
// TCP server parameters.
TCPServer.FilesArr:=ADR(Fp); //Files array
TCPServer.LocalAdd:=ADR('0.0.0.0'); //Local address
TCPServer.LocalPort:=1020; //Local port
TCPServer.MaxConn:=1; //Accepted connections
TCPServer.FlushTm:=50; //Flush time (mS)
TCPServer.LifeTm:=30; //Life time (S)
TCPServer.RxSize:=128; //Rx buffer size
TCPServer.TxSize:=128; //Tx buffer size
// Here a memory buffer is allocated.
SOut:=SysMAlloc(BSize); //String output pointer
TimeBf:=SysTimeGetMs(); //Time buffer (mS)
END_IF;
// Manage the TCP server.
TCPServer(Enable:=TRUE); //TCPServer management
IF NOT(SysFIsOpen(Fp)) THEN RETURN; END_IF;
// -------------------------------------------------------------------------
// COUNT AND SENDING VALUE
// -------------------------------------------------------------------------
// Every 1,5 second print out the counter value.
IF ((SysTimeGetMs()-TimeBf) >= TO_UDINT(T#1s500ms)) THEN
TimeBf:=SysTimeGetMs(); //Time buffer (mS)
Counter:=Counter+1; //Counter
eTO_JUNK(DateTimeFormat(TO_LDATE_AND_TIME(SysDateGetNs()), ADR('\[H\:i\:s\.v\]\ '), SOut, BSize));
eTO_JUNK(SysCVsnprintf(SOut, BSize, ADR('Counter:%04d$r$n'), UDINT_TYPE, ADR(Counter)));
eTO_JUNK(Sysfwrite(SOut, TO_INT(Sysstrlen(SOut)), 1, Fp));
END_IF;
// [End of file]