Metrica: Stack Size

Descrizione utente

Una libreria o un'applicazione è organizzata per tipi complessi come programmi, blocchi funzione, elenchi di variabili globali, metodi, azioni, funzioni, strutture e così via. Entro ciascuno di questi tipi, è possibile definire le variabili.

Quando si chiama un tipo complesso come una funzione, un metodo, un'azione, una proprietà Get, proprietà Set o una transizione, la memoria nello stack è necessaria per eseguire il metodo. Le informazioni sulla dimensione dello stack consentono di identificare il tipo complesso che utilizza troppa memoria dello stack.

NOTA: La memoria dello stack disponibile per task è limitata e definita dal controller utilizzato. Un notevole consumo della dimensione dello stack può determinare eccezioni.
NOTA: Se si utilizza un tipo di blocco funzione come tipo di variabile di ingresso metodo (chiamata per valore), è richiesta la dimensione della memoria del tipo complesso (vedere Memory Size - Data). Non utilizzare la chiamata per valore per tipi complessi come gli ingressi di metodo o di funzione.

Calcolo metrica

Per un tipo complesso come funzione o metodo, le dimensioni delle variabili vengono sommate. Quando si chiama il tipo complesso, la dimensione viene allocata in cima allo stack e i valori di ingresso copiati nella memoria allocata. Durante l'esecuzione del codice della funzione o del metodo, si utilizzano questi valori di memoria.

NOTA: Ciascuna chiamata a metodo o funzione ha la propria memoria e non crea conflitti se un metodo viene chiamato in parallelo da un altro task.

Esempio

Esempio di calcolo di Stack Size:

FUNCTION_BLOCK FB_XXX
VAR
    fbComplex: FB_Test; // 20 byte
END_VAR

// method call of FB_XXX
Meth1(TRUE);

METHOD Meth1
VAR_INPUT
   xTest1: BOOL;
END_VARVAR
   iTest2: INT;
END_VAR


METHOD METH2
VAR_INPUT
    fbComp: FB_XXX;
END_VAR

Risultati di Stack Size

Stack Size (METH1) = 8
Stack Size (METH2) = 32