software:qview:qview_6:qcl_library:sy10initializecriticalsection

no way to compare when less than two revisions

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.


software:qview:qview_6:qcl_library:sy10initializecriticalsection [2019/08/29 17:01] (versione attuale) – creata - modifica esterna 127.0.0.1
Linea 1: Linea 1:
 +====== SY10InitializeCriticalSection ======
 +
 +**SY = **//Funzione di sistema//
 +
 +La funzione SY10InitializeCriticalSection __inizializza il pool informazioni di una sezione critica__.
 +
 +===== IMPLEMENTAZIONE =====
 +
 +**SY10InitializeCriticalSection(pool)**
 +
 +Parametri:
 +
 +^IN/OUT^TIPO VARIABILE^NOME DI ESEMPIO^DIM^^
 +|  IN  |  ARRGBL  |  pool  |  B  | Pool informazioni sezione critica|
 +
 +Descrizione:
 +
 +Ogni sezione critica basa il proprio funzionamento interno su una struttura dati proprietaria chiamata //pool// informazioni.\\
 +Ogni sezione critica avrà un proprio //pool// che dovrà essere sempre inizializzato prima di poter essere utilizzato.\\
 +Il //pool// è formato da un array di bytes dove il numero di elementi dipende dal numero di unità task che lo utilizerranno più un header fisso di due byte.
 +
 +Se per esempio una determinata sezione critica viene utilizzata in solo due unità task basterà creare un pool di 4 byte stando attenti che una unità dovrà
 +utilizzare l'ID 1 mentra la seconda l'ID 2.
 +
 +Gli ID sono progressivi partendo da 1 ed identificano la posizione delle informazioni nel pool percui passare un ID con indice non disponibile nel pool significa invalidare la chiamata e il relativo funzionamento.
 +
 +**NB**: Per evitare problemi si consiglia di dimensionare i pool informazioni con dimensioni sufficienti ad indirizzare tutte le unità task.
 +
 +=== Esempio ===
 +
 +Nell'esempio viene inizializzato un pool informazioni utilizzato poi per una sezione critica.
 +
 +
 +\\
 +**unità configurazione:**
 +<code QCL>
 +; critical section consts
 +CONST
 + CS_POOL_HEADER 2 ; fixed header in critical section pool info
 + CS_POOL_SIZE 10 ; critical section pool info size
 +
 +ARRGBL
 + LockPool B CS_POOL_HEADER + CS_POOL_SIZE
 +</code>
 +
 +
 +\\
 +**unità inizializzazione:**
 +<code QCL>
 +;===
 +; Initialize system
 +;
 +GLOBAL
 + Initialized F OUT
 +
 +; main entry point
 +BEGIN
 + CALL TASK_INIT
 + WHILE TRUE
 + CALL TASK_EXECUTE
 + WAIT A_LOOP
 + ENDWHILE
 +END
 +
 +;===
 +; Task initialization
 +;
 +SUB TASK_INIT
 + SY10InitializeCriticalSection(LockPool)
 + Initialized = TRUE
 +ENDSUB
 +
 +;===
 +; Task execution
 +;
 +SUB TASK_EXECUTE
 + SUSPEND
 +ENDSUB
 +</code>
 +
 +=== Note ===
 +
 +  *La funzione deve essere eseguita una sola volta e nella fase di inizializzazione dell'applicativo.
 +  *Le funzioni [[software:qview:qview_6:qcl_library:sy10entercriticalsection|SY10EnterCriticalSection]] e [[software:qview:qview_6:qcl_library:sy10leavecriticalsection|SY10LeaveCriticalSection]] non devo essere chiamate prima di aver inizializzato la sezione critica con [[software:qview:qview_6:qcl_library:sy10initializecriticalsection|SY10InitializeCriticalSection]].  
  
  • Ultima modifica: 2019/08/29 17:01