Difference between revisions of "OCEOSmp/directive reference"
Jump to navigation
Jump to search
Line 1: | Line 1: | ||
= <span style="color:#00ff00">'''This section is under construction'''</span> = | = <span style="color:#00ff00">'''This section is under construction'''</span> = | ||
= Initialisation directives = | |||
===<span style="color:#0000ff">oceos_start()</span>=== | |||
<blockquote style="border-left-style: none;"> | |||
<span style="color:#1b7ac2">'''Header File'''</span><br> | |||
'''''initialisation.h'''''<br> | |||
<span style="color:#1b7ac2">'''Description'''</span><br> | |||
Starts OCEOS scheduling.<br> | |||
Create dynamic OCEOS structures and start scheduling.<br> | |||
This function should only be called once and only after [[OCEOS/oceos kernel/initialisation#oceos_init()|oceos_init()]] and [[OCEOS/oceos kernel/initialisation#oceos_init_finish()|oceos_init_finish()]] have been called successfully.<br> | |||
Normally this function does not return. <br> | |||
If a problem is detected the function terminates and returns an appropriate DIRECTIVE_STATUS code, with interrupts disabled. | |||
<span style="color:#1b7ac2">'''Prototype'''</span><br> | |||
<syntaxhighlight lang="C"> | |||
/** | |||
* Starts OCEOS scheduling | |||
* | |||
* Create dynamic OCEOS structures and start scheduling | |||
* | |||
* This function should only be called once | |||
* and only after oceos_init() | |||
* and oceos_init_finish() have | |||
* been called successfully. | |||
* Normally this function does not return. | |||
* If a problem is detected the function | |||
* terminates and returns an appropriate | |||
* DIRECTIVE_STATUS code, with interrupts disabled. | |||
* | |||
* @param fixed_array_ptr Pointer to fixed data array | |||
* @param start_task Task ID | |||
* @param data_ptr Pointer to data to be passed to the task | |||
* @return OCEOSMP_EXIT OCEOSMP return from scheduling and exit | |||
* ERR_SYS_FIXED_CORRUPT Fixed area pointer is null or bad sentinel | |||
* ERR_FIXED_AREA_SIZE_WRONG Fixed area size is zero | |||
* ERR_FIXED_AREA_END_SENTINEL_BAD Fixed data end sentinel corrupt | |||
* ERR_FIXED_AREA_BAD_XOR Fixed area bad checksum or checksum mis-match | |||
* ERR_INIT_NOT_DONE oceos_start() called without initialisation | |||
* ERR_DYN_AREA_PTR_BAD Dynamic area pointer invalid in sysMetaPtr | |||
* ERR_INT_HANDLER_BAD IRQ controller pointer provided by BCC is NULL;or OCEOS handler is not set | |||
* ERR_DYN_JOB_PTR_BAD Job array pointer is NULL | |||
* ERR_FIXED_TASK_PTR_BAD Tasks array pointer is NULL | |||
* ERR_JOB_COUNT_WRONG Total job count inconsistent | |||
* ERR_DYN_MUTEX_PTR_BAD Mutex dynamic pointer is NULL | |||
* ERR_DYN_LOCK_PTR_BAD Mutex lock array pointer is NULL | |||
* ERR_DYN_RWMUTEX_PTR_BAD Rwmutex dynamic pointer is NULL | |||
* ERR_DYN_RWLOCK_PTR_BAD Rwmutex lock array pointer is NULL | |||
* ERR_FIXED_SEM_PTR_BAD Semaphore fixed pointer is NULL | |||
* ERR_DYN_SEM_PTR_BAD Semaphore dynamic pointer is NULL | |||
* ERR_SEM_PEND_PTR_BAD Semaphore pending queue pointer is NULL | |||
* ERR_FIXED_DATAQ_PTR_BAD Dataq fixed pointer is NULL | |||
* ERR_DYN_DATAQ_PTR_BAD Dataq dynamic pointer is NULL | |||
* ERR_DATAQ_PEND_PTR_BAD Dataq pending queue pointer is NULL | |||
* ERR_DATAQ_DATA_PTR_BAD Dataq data pointer is NULL | |||
* ERR_CPU_INT_NUMBER_INVALID SPARC only.IRQ number for CPU inter-comunication invalid(zero or used by timer) | |||
* ERR_REGISTER_CPU_IRQ_FAILED SPARC only. Failed to set CPU IRQ handler in BCC | |||
* ERR_CPU_STACK_INVALID Current CPU stack not within specified range | |||
* ERR_CPU_PRIORITY_STACK_INVALID Per CPU priority stack invalid | |||
* ERR_LOG_AREA_END_SENTINEL_BAD Log area end sentinel override | |||
* ERR_TA_CONFIG_PTR_BAD SPARC only; Timed action configuration data pointer is NULL | |||
* ERR_TA_TIMER_INDEX_INVALID SPARC only; Timed action sub-timer index in timer unit is invalid | |||
* ERR_TA_IRQ_NUMBER_INVALID SPARC only; Timer action timer IRQ number is invalid | |||
* ERR_TA_BCC_IRQ_REGISTER_FAILED SPARC only; Timed action timer IRQ handler failed to register | |||
*/ | |||
S32_t oceos_start( | |||
const U32_t * const fixed_array_ptr,// pointer to fixed data array | |||
const U32_t start_task, // taskID | |||
void * const data_ptr // pointer to data to be passed to task | |||
); | |||
</syntaxhighlight> | |||
<span style="color:#1b7ac2">'''Parameters'''</span><br> | |||
{| class="wikitable" | |||
|- | |||
! Parameter !! Description | |||
|- | |||
| fixed_array_ptr || Pointer to fixed data array | |||
|- | |||
| start_task || Task ID | |||
|- | |||
| data_ptr || Pointer to data to be passed to the task | |||
|} | |||
<span style="color:#1b7ac2">'''Returns'''</span><br> | |||
This function returns enum DIRECTIVE_STATUS.<br> | |||
{| class="wikitable" | |||
|- | |||
! enum DIRECTIVE_STATUS !! Description | |||
|- | |||
| INTERNAL_ERROR || If fixed_array_ptr is NULL or | |||
fixed_array_ptr start sentinel is corrupt or | |||
Size of fixed area is not correct or | |||
fixed_array_ptr checksum failed | |||
|- | |||
| INCORRECT_STATE || If Dynamic area setup failed | |||
|} | |||
<span style="color:#1b7ac2">'''Example Usage'''</span><br> | |||
<syntaxhighlight lang="C"> | |||
/* Sample Task names - all here start with t_ to help avoid name confusion */ | |||
enum TASK_NAME{ | |||
t_tom, // will have task ID 0 | |||
t_dick, // will have task ID 1 | |||
}; | |||
extern U32_t fixed_data[]; | |||
... | |||
enum DIRECTIVE_STATUS status; | |||
status = oceos_start(fixed_data, t_tom, NULL); | |||
</syntaxhighlight> | |||
</blockquote> | |||
Revision as of 08:40, 25 April 2024
This section is under construction
Initialisation directives
oceos_start()
Header File
initialisation.h
Description
Starts OCEOS scheduling.
Create dynamic OCEOS structures and start scheduling.
This function should only be called once and only after oceos_init() and oceos_init_finish() have been called successfully.
Normally this function does not return.
If a problem is detected the function terminates and returns an appropriate DIRECTIVE_STATUS code, with interrupts disabled.Prototype
/** * Starts OCEOS scheduling * * Create dynamic OCEOS structures and start scheduling * * This function should only be called once * and only after oceos_init() * and oceos_init_finish() have * been called successfully. * Normally this function does not return. * If a problem is detected the function * terminates and returns an appropriate * DIRECTIVE_STATUS code, with interrupts disabled. * * @param fixed_array_ptr Pointer to fixed data array * @param start_task Task ID * @param data_ptr Pointer to data to be passed to the task * @return OCEOSMP_EXIT OCEOSMP return from scheduling and exit * ERR_SYS_FIXED_CORRUPT Fixed area pointer is null or bad sentinel * ERR_FIXED_AREA_SIZE_WRONG Fixed area size is zero * ERR_FIXED_AREA_END_SENTINEL_BAD Fixed data end sentinel corrupt * ERR_FIXED_AREA_BAD_XOR Fixed area bad checksum or checksum mis-match * ERR_INIT_NOT_DONE oceos_start() called without initialisation * ERR_DYN_AREA_PTR_BAD Dynamic area pointer invalid in sysMetaPtr * ERR_INT_HANDLER_BAD IRQ controller pointer provided by BCC is NULL;or OCEOS handler is not set * ERR_DYN_JOB_PTR_BAD Job array pointer is NULL * ERR_FIXED_TASK_PTR_BAD Tasks array pointer is NULL * ERR_JOB_COUNT_WRONG Total job count inconsistent * ERR_DYN_MUTEX_PTR_BAD Mutex dynamic pointer is NULL * ERR_DYN_LOCK_PTR_BAD Mutex lock array pointer is NULL * ERR_DYN_RWMUTEX_PTR_BAD Rwmutex dynamic pointer is NULL * ERR_DYN_RWLOCK_PTR_BAD Rwmutex lock array pointer is NULL * ERR_FIXED_SEM_PTR_BAD Semaphore fixed pointer is NULL * ERR_DYN_SEM_PTR_BAD Semaphore dynamic pointer is NULL * ERR_SEM_PEND_PTR_BAD Semaphore pending queue pointer is NULL * ERR_FIXED_DATAQ_PTR_BAD Dataq fixed pointer is NULL * ERR_DYN_DATAQ_PTR_BAD Dataq dynamic pointer is NULL * ERR_DATAQ_PEND_PTR_BAD Dataq pending queue pointer is NULL * ERR_DATAQ_DATA_PTR_BAD Dataq data pointer is NULL * ERR_CPU_INT_NUMBER_INVALID SPARC only.IRQ number for CPU inter-comunication invalid(zero or used by timer) * ERR_REGISTER_CPU_IRQ_FAILED SPARC only. Failed to set CPU IRQ handler in BCC * ERR_CPU_STACK_INVALID Current CPU stack not within specified range * ERR_CPU_PRIORITY_STACK_INVALID Per CPU priority stack invalid * ERR_LOG_AREA_END_SENTINEL_BAD Log area end sentinel override * ERR_TA_CONFIG_PTR_BAD SPARC only; Timed action configuration data pointer is NULL * ERR_TA_TIMER_INDEX_INVALID SPARC only; Timed action sub-timer index in timer unit is invalid * ERR_TA_IRQ_NUMBER_INVALID SPARC only; Timer action timer IRQ number is invalid * ERR_TA_BCC_IRQ_REGISTER_FAILED SPARC only; Timed action timer IRQ handler failed to register */ S32_t oceos_start( const U32_t * const fixed_array_ptr,// pointer to fixed data array const U32_t start_task, // taskID void * const data_ptr // pointer to data to be passed to task );Parameters
Parameter Description fixed_array_ptr Pointer to fixed data array start_task Task ID data_ptr Pointer to data to be passed to the task Returns
This function returns enum DIRECTIVE_STATUS.
enum DIRECTIVE_STATUS Description INTERNAL_ERROR If fixed_array_ptr is NULL or fixed_array_ptr start sentinel is corrupt or Size of fixed area is not correct or fixed_array_ptr checksum failed
INCORRECT_STATE If Dynamic area setup failed Example Usage
/* Sample Task names - all here start with t_ to help avoid name confusion */ enum TASK_NAME{ t_tom, // will have task ID 0 t_dick, // will have task ID 1 }; extern U32_t fixed_data[]; ... enum DIRECTIVE_STATUS status; status = oceos_start(fixed_data, t_tom, NULL);