RabbitECUTeensyMCUXpresso/source/OS/OS.h

218 lines
14 KiB
C

/******************************************************************************/
/* Copyright (c) 2016 MD Automotive Controls. Original Work. */
/* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher */
/******************************************************************************/
/* CONTEXT:KERNEL */
/* PACKAGE TITLE: OS Header File */
/* DESCRIPTION: This code provides macros that describe the OS task */
/* schedule and OS enums */
/* FILE NAME: OS.h */
/* REVISION HISTORY: 28-03-2016 | 1.0 | Initial revision */
/* */
/******************************************************************************/
#ifndef OS_H
#define OS_H
#include <SYS.h>
#include <TASK.h>
#include <TYPES.h>
#include "SYSAPI.h"
#include "tqueue.h"
#include "TASKAPI.h"
#define OS_MULTI_THREAD_off
/*<AUTOGEN START>*/
#define OS_nTaskStart \
/* enTaskID, enType, enPriority, enState, enRateMS, pfFunction, tSP, tPC, tsCreated, tsStarted, tsFinished, tsAccumulated, tsPrivilege */\
{ \
{ 1u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &CLIENT_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 2u , enTaskFunction , 5u , enTaskReady, TASKAPI_enTaskCycNot , &RESM_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 3u , enTaskFunction , 5u , enTaskReady, TASKAPI_enTaskCycNot , &SPREADS_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 4u , enTaskFunction , 5u , enTaskReady, TASKAPI_enTaskCycNot , &TABLES_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 5u , enTaskFunction , 5u , enTaskReady, TASKAPI_enTaskCycNot , &UART_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 6u , enTaskFunction , 15u , enTaskReady, TASKAPI_enTaskCycNot , &UDSAL_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 7u , enTaskFunction , 3u , enTaskReady, TASKAPI_enTaskCycNot , &PIM_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 8u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &FEE_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 9u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &CRC16_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 10u, enTaskFunction , 200u , enTaskReady, TASKAPI_enTaskCycNot , &ADC_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 11u, enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &DAC_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 12u, enTaskFunction , 100u , enTaskReady, TASKAPI_enTaskCycNot , &PIT_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 13u, enTaskFunction , 66u , enTaskReady, TASKAPI_enTaskCycNot , &DLL_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 14u, enTaskFunction , 77u , enTaskReady, TASKAPI_enTaskCycNot , &DSCRIO_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 15u, enTaskFunction , 77u , enTaskReady, TASKAPI_enTaskCycNot , &TIMER_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 16u, enTaskFunction , 77u , enTaskReady, TASKAPI_enTaskCycNot , &SDHC_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 17u, enTaskFunction , 77u , enTaskReady, TASKAPI_enTaskCycNot , &DISK_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 18u, enTaskFunction , 77u , enTaskReady, TASKAPI_enTaskCycNot , &TIME_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 19u, enTaskFunction , 78u , enTaskReady, TASKAPI_enTaskCycNot , &CAN_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 20u, enTaskFunction , 78u , enTaskReady, TASKAPI_enTaskCycNot , &CTRL_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 21u, enTaskFunction , 78u , enTaskReady, TASKAPI_enTaskCycNot , &TEPM_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 22u, enTaskFunction , 78u , enTaskReady, TASKAPI_enTaskCycNot , &VCOM_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 23u, enTaskFunction , 78u , enTaskReady, TASKAPI_enTaskCycNot , &SRLTFR_vStart , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged } \
}
#define OS_nTaskCyclic \
/* enTaskID, enType, enPriority, enState, enRateMS, pfFunction, tSP, tPC, tsCreated, tsStarted, tsFinished, tsAccumulated, tsPrivilege */\
{ \
{ 24u , enTaskCyclic , TASKAPI_enTaskPrMaxCyc, enTaskReady, 100u , &UART_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 25u , enTaskCyclic , 101u , enTaskReady, 10u , &UDSAL_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 26u , enTaskCyclic , 180u , enTaskReady, 20u , &PIM_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 27u , enTaskCyclic , 115u , enTaskReady, 20u , &ADC_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 28u , enTaskCyclic , 115u , enTaskReady, 20u , &DAC_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 29u , enTaskCyclic , 110u , enTaskReady, 20u , &PIT_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 30u , enTaskCyclic , 200u , enTaskReady, 1u , &DLL_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 31u , enTaskCyclic , 166u , enTaskReady, 1u , &FEE_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 32u , enTaskCyclic , 166u , enTaskReady, 250u , &DSCRIO_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 33u , enTaskCyclic , 166u , enTaskReady, 250u , &SDHC_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 34u , enTaskCyclic , 166u , enTaskReady, 250u , &DISK_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 35u , enTaskCyclic , 166u , enTaskReady, 250u , &TIME_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 36u , enTaskCyclic , 19u , enTaskReady, 1u , &CAN_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 37u , enTaskCyclic , 19u , enTaskReady, 1u , &CTRL_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 38u , enTaskCyclic , 19u , enTaskReady, 1u , &TEPM_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 39u , enTaskCyclic , 19u , enTaskReady, 1u , &CRC16_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 40u , enTaskCyclic , 19u , enTaskReady, 1u , &VCOM_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 41u , enTaskCyclic , 19u , enTaskReady, 5u , &SRLTFR_vRun , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged } \
}
#define OS_nTaskTerminate \
/* enTaskID, enType, enPriority, enState, enRateMS, pfFunction, tSP, tPC, tsCreated, tsStarted, tsFinished, tsAccumulated, tsPrivilege */\
{ \
{ 42u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &UART_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 43u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &UDSAL_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 44u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &PIM_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 45u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &ADC_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 46u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &DAC_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 47u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &PIT_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 48u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &DLL_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 49u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &FEE_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 50u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &DSCRIO_vTerminate, NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 51u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &SDHC_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 52u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &DISK_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 53u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &TIME_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 54u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &TIMER_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 55u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &CAN_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 56u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &CRC16_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 57u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &VCOM_vTerminate , NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged },\
{ 58u , enTaskFunction , TASKAPI_enTaskPrMaxAll, enTaskReady, TASKAPI_enTaskCycNot , &SRLTFR_vTerminate, NULL, NULL, 0u , 0u , 0u , 0u , enTaskPrivileged } \
}
/*<AUTOGEN END>*/
/*<AUTOGEN START>*/
typedef enum
{
OS_enOSStateReset,
OS_enOSStatePreBootloader,
OS_enOSStatePreOS,
OS_enOSStartRequest,
OS_enOSStateOSStarted,
OS_enOSStateAppStarted,
OS_enOSStateCount
} OS_tenOSState;
/*<AUTOGEN END>*/
/*<AUTOGEN START>*/
typedef enum
{
OS_enOSIDXCLIENT,
OS_enOSIDXUART,
OS_enOSIDXDIAG,
OS_enOSIDXPIM,
OS_enOSIDXADC,
OS_enOSIDXPIT,
OS_enOSIDXDLL,
OS_enOSIDXFEE,
OS_enOSIDXENE,
OS_enOSIDXBMX,
OS_enOSIDXWIFI,
OS_enOSIDXCAN,
OS_enOSIDXCount
} OS_tenOSModuleIDX;
typedef enum
{
OS_enOSModeKernel,
OS_enOSModeClient
} OS_tenOSKernelMode;
typedef enum
{
OS_enOSSchedulerTick,
OS_enOSSchedulerSWI,
OS_enOSSchedulerBHRequest
} OS_tenOSScheduleCallContext;
typedef enum
{
OS_enKERNELQueueStart,
OS_enKERNELQueueCyclic,
OS_enKERNELQueueThread,
OS_enKERNELQueueTerminate,
OS_enCLIENTQueueStart,
OS_enCLIENTQueueCyclic,
OS_enCLIENTQueueThread,
OS_enCLIENTQueueTerminate,
OS_enTaskQueueCount
} OS_tenQueueType;
#define OS_xModuleStartOK( x ) ( (x) = ( (x) << 1 ) | 1 )
#define OS_xModuleStartFAIL( x ) ( (x) = (x) << 1 )
#define OS_xModuleRunOK( x ) ( (x) = ( (x) << 1 ) | 1 )
#define OS_xModuleRunEnd( x ) ( (x) = ( (x) << 1 ))
#define OS_xModuleRunFAIL( x ) ( (x) = ( (x) = 0 )
#define OS_xAddTaskToRunQueue( x ) (
#define OS_nTickCounterTerminal 4000000000u
#define OS_MODULE_START( x ) x ( &OS_ucModuleStartStatus );
#define OS_nKernelHandle 0xF0001000
/* macro to add any task to the static task queue */
#define OS_xAddTaskToList( x, y ) memcpy( (OS_tstSYSTaskNodePool*)x->stTask[ (OS_tstSYSTaskNodePool*)x->u16Count++ ], \
(TASK_tstTask*)y, sizeof( TASK_tstTask ) )
#ifdef SYS_TASK_PRIORITISE
#define OS_xPrioritiseQueue( x ) OS_vPrioritiseQueue( x );
#else
#define OS_xPrioritiseQueue( x ) OS_vPrioritiseQueue( NULL );
#endif
#define OS_nClientTasksMax 35u
#ifdef EXTERN
#undef EXTERN
#endif
#ifdef _OS_C
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN SYSAPI_tstSVCDataStruct OS_stSVCDataStruct;
EXTERN uint32 au32SVCResult[10];
EXTERN uint32 OS_u32TickCounter;
void OS_vStart( uint32* const );
void OS_vRun( uint32* const );
void OS_vSchedule( OS_tenOSScheduleCallContext );
void OS_vTerminate( uint32* const );
void OS_vSetCyclicTaskList (TASK_tstTask*);
void OS_vPrioritiseQueue( task_queue* );
void OS_vBackgroundDispatcher( void );
OS_tenOSState OS_enGetState( void );
void OS_vSetState(OS_tenOSState);
task_queue* OS_stGetOSQueue( OS_tenQueueType);
OS_tenOSKernelMode OS_enGetOSKernelMode( void );
void OS_vOverrunTaskReport( OS_tenQueueType );
void OS_vSuspendThread( OS_tenQueueType );
void OS_vSystemIdleThread( uint32* const );
void OS_vInterCoopTasks(void);
SYSAPI_tenSVCResult OS_enAddTaskToQueue(OS_tenQueueType, TASK_tstTask*);
#endif // OS_H