This is an old revision of the document!
SY10InitializeCriticalSection
SY = System function
The SY10InitializeCriticalSection function Initializes a critical section pooling information.
IMPLEMENTATION
SY10InitializeCriticalSection(pool)
Parameters:
IN/OUT | VARIABLE TYPE | EXAMPLE NAME | DIM | |
---|---|---|---|---|
IN | ARRGBL | pool | B | Critical section pools information |
Description:
Every critical section bases its inner workings on a proprietary data structure called pool informations.
Every critical section will have its own pool that must be initialized before it can be used.
The pool consists of an array of bytes where the number of items depends on the number of task unit that will use more two-byte fixed header.
Inglese Italiano If for example a given critical section is used in only two drives task you create an application pool of 4 byte making sure that a unit must use the ID 1 while the second the ID 2.
The ID are progressive starting from 1 and identify the location of the information in the pool, then pass an ID with index not available in the pool means invalidating the call and how it works.
NB: To avoid problems it is advisable to size the pool information with sufficient size to address all drives task.
Example
In the following example initializes an information pool used then to a critical section.
configuration unit:
; 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
Unit initialization:
;=== ; 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
Note
-
The function must be performed only once during application initialization.
-
The SY10EnterCriticalSection and SY10LeaveCriticalSection functions, should not be called before you have initialized the critical section with SY10InitializeCriticalSection.