ESOS32
ESOSOn32-bitProcessors
Data Structures | Macros | Typedefs | Functions | Variables
esos.h File Reference
#include "all_generic.h"
#include "esos_utils.h"
#include "esos_task.h"
#include "esos_mail.h"
#include "esos_comm.h"
Include dependency graph for esos.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  stMailBoxDesc
 
struct  stMailEnvelope
 
struct  stTimer
 

Macros

#define BUILT_ON_ESOS
 
#define MAX_NUM_USER_TASKS   32
 
#define ESOS_USE_SERIAL_PORT
 
#define OS_END   while(1)
 
#define OS_ITERATE
 
#define MAX_NUM_CHILD_TASKS   MAX_NUM_USER_TASKS
 
#define REMOVE_IDX   0xFE
 
#define ESOS_USER_FLAG_0
 
#define ESOS_USER_FLAG_1
 
#define ESOS_USER_FLAG_2
 
#define ESOS_USER_FLAG_3
 
#define ESOS_USER_FLAG_4
 
#define ESOS_USER_FLAG_5
 
#define ESOS_USER_FLAG_6
 
#define ESOS_USER_FLAG_7
 
#define ESOS_USER_FLAG_8
 
#define ESOS_USER_FLAG_9
 
#define ESOS_USER_FLAG_10
 
#define ESOS_USER_FLAG_11
 
#define ESOS_USER_FLAG_12
 
#define ESOS_USER_FLAG_13
 
#define ESOS_USER_FLAG_14
 
#define ESOS_USER_FLAG_15
 
#define ESOS_USER_FLAG_16
 
#define ESOS_USER_FLAG_17
 
#define ESOS_USER_FLAG_18
 
#define ESOS_USER_FLAG_19
 
#define ESOS_USER_FLAG_20
 
#define ESOS_USER_FLAG_21
 
#define ESOS_USER_FLAG_22
 
#define ESOS_USER_FLAG_23
 
#define ESOS_USER_FLAG_24
 
#define ESOS_USER_FLAG_25
 
#define ESOS_USER_FLAG_26
 
#define ESOS_USER_FLAG_27
 
#define ESOS_USER_FLAG_28
 
#define ESOS_USER_FLAG_29
 
#define ESOS_USER_FLAG_30
 
#define ESOS_USER_FLAG_31
 
#define ESOS_USER_TIMER(timername)
 
#define __MILLISECONDS_PER_TICK   1
 
#define MILLISECONDS   __MILLISECONDS_PER_TICK
 
#define SECONDS   MILLISECONDS*1000
 
#define MINUTES   SECONDS*60
 
#define HOURS   MINUTES*60
 
#define DAYS   HOURS*24
 
#define esos_GetSystemTick()
 
#define esos_GetNumberRegisteredTasks()
 
#define esos_GetFutureSystemTick(deltaT)
 
#define esos_SetUserFlag(mask)
 
#define esos_ClearUserFlag(mask)
 
#define esos_IsUserFlagSet(mask)
 
#define esos_IsUserFlagClear(mask)
 
#define __esos_SetSystemFlag(mask)   BIT_SET_MASK(__esos_u32SystemFlags, (mask))
 
#define __esos_ClearSystemFlag(mask)   BIT_CLEAR_MASK(__esos_u32SystemFlags, (mask))
 
#define __esos_IsSystemFlagSet(mask)   IS_BIT_SET_MASK(__esos_u32SystemFlags, (mask))
 
#define __esos_IsSystemFlagClear(mask)   IS_BIT_CLEAR_MASK(__esos_u32SystemFlags, (mask))
 
#define ESOS_TMR_FAILURE   0xFF
 
#define MAX_NUM_TMRS   16
 
#define esos_GetNumberRunningTimers()
 
#define esos_IsTimerRunning(hndl)
 
#define __esos_MarkTimerRunning(hndl)   BIT_SET_MASK(__esos_u32TmrActiveFlags, (ESOS_BIT0<<(hndl)))
 
#define __esos_MarkTimerStopped(hndl)   BIT_CLEAR_MASK(__esos_u32TmrActiveFlags, (ESOS_BIT0<<(hndl)))
 
#define __ESOS_SYS_FLAG_PACK_TASKS   ESOS_BIT0
 
#define __ESOS_SYS_FLAG_NULL_LAST_TASK   ESOS_BIT1
 
#define __ESOS_SYS_COMM_TX_IS_BUSY   ESOS_BIT2
 
#define __ESOS_SYS_COMM_RX_IS_BUSY   ESOS_BIT3
 
#define __ESOS_SYS_COMM_TX_ONGOING   ESOS_BIT4
 
#define __ESOS_SYS_I2C_IN_USE   ESOS_BIT8
 
#define __ESOS_SYS_SPI_IN_USE   ESOS_BIT9
 
#define __ESOS_SYS_ADC_IN_USE   ESOS_BIT10
 
#define __abs(x)   (((x) < 0) ? -(x) : (x))
 

Typedefs

typedef int main_t
 
typedef uint8_t ESOS_TMR_HANDLE
 

Functions

void user_init (void)
 
ESOS_TASK_HANDLE esos_RegisterTask (uint8_t(*pfn_TaskFcn)(struct stTask *pst_Task))
 
uint8_t esos_UnregisterTask (uint8_t(*pfn_TaskFcn)(struct stTask *pst_Task))
 
ESOS_TASK_HANDLE esos_GetFreeChildTaskStruct ()
 
ESOS_TASK_HANDLE esos_GetTaskHandle (uint8_t(*taskname)(ESOS_TASK_HANDLE pstTask))
 
ESOS_TASK_HANDLE esos_GetTaskHandleFromID (uint16_t u16_TaskID)
 
ESOS_TMR_HANDLE esos_RegisterTimer (void(*pfnTmrFcn)(void), uint32_t u32_period)
 
uint8_t esos_UnregisterTimer (ESOS_TMR_HANDLE hnd_timer)
 
ESOS_TMR_HANDLE esos_GetTimerHandle (void(*pfnTmrFcn)(void))
 
uint8_t esos_ChangeTimerPeriod (ESOS_TMR_HANDLE hnd_timer, uint32_t u32_period)
 
void __esos_hw_InitSystemTick (void)
 
uint32_t __esos_hw_GetSystemTickCount (void)
 
uint32_t __esos_hw_PRNG_u32 (void)
 
void __esos_hw_config_PRNG (void)
 
void __esos_hw_set_PRNG_Seed (uint32_t u32_seed)
 
uint16_t __esos_hasTickDurationPassed (uint32_t u32_startTick, uint32_t u32_period)
 
void __esos_tmrSvcsExecute (void)
 
void __esos_InitCommSystem (void)
 

Variables

uint8_t __esos_u8UserTasksRegistered
 
uint32_t __esos_u32UserFlags
 
uint32_t __esos_u32SystemFlags
 

Detailed Description

Embedded Systems Operating System 32-bit (ESOS32)

Definition in file esos.h.

Macro Definition Documentation

◆ esos_ClearUserFlag

#define esos_ClearUserFlag (   mask)

Clears bits in the global user flags provided by ESOS

Parameters
maskAn uint16 value composed of the OR-ed user mask flag masks, where each flag in the OR will be cleared
Note
User should use the provided bits masks like ESOS_USER_FLAG_0 and ESOS_USER_FLAG_1 and ... ESOS_USER_FLAG_F to create their own readable constants
#define HEADLIGHTS_ARE_ON ESOS_USER_FLAG_3
#define MY_USER_FRIENDLY_FLAG ESOS_USER_FLAG_7
esos_ClearUserFlag( HEADLIGHTS_ARE_ON | MY_USER_FRIENDLY_FLAG);
See also
esos_SetUserFlag
esos_IsUserFlagSet
esos_IsUserFlagClear

Definition at line 492 of file esos.h.

◆ esos_GetFutureSystemTick

#define esos_GetFutureSystemTick (   deltaT)

Returns the system tick value of a future time

Parameters
deltaTthe number of ticks in the future you'd like the system tick value for
Returns
The uint32 number corresponding to the system tick value of that future time
See also
esos_GetSystemTick

Definition at line 454 of file esos.h.

◆ esos_GetNumberRegisteredTasks

#define esos_GetNumberRegisteredTasks ( )

Get the current number of user task registered with the ESOS scheduler.

Returns
The uint8_t number of currently registered user tasks
Note
This value does not include the number of child tasks (tasks of the type ESOS_CHILD_TASK ), just the tasks of the type ESOS_USER_TASK

Definition at line 443 of file esos.h.

◆ esos_GetNumberRunningTimers

#define esos_GetNumberRunningTimers ( )

Get the current number of user software timers registers (running) in the ESOS timer services

Returns
The uint8_t number of currently registered user tasks

Definition at line 555 of file esos.h.

◆ esos_GetSystemTick

#define esos_GetSystemTick ( )

Get the current value of the ESOS system tick counter In the current implementation of ESOS, a tick equal 1.0ms. Therefore, the value returned by this function is approximately equal to the number of milliseconds since the since was last reset.

Returns
The uint32 value of current value of the ESOS system tick counter
Note
This counter value will roll-over every 49.7 days.

Definition at line 418 of file esos.h.

◆ esos_IsTimerRunning

#define esos_IsTimerRunning (   hndl)

Determines if the software timer represented by the handle is currently running

Parameters
hndlThe ESOS_TMR_HANDLE of a software timer
Return values
TRUEif the timer is currently running
FALSEif the timer is not currently running
See also
ESOS_USER_TIMER
esos_UnregisterTimer
esos_GetTimerHandle
esos_ChangeTimerPeriod

Definition at line 568 of file esos.h.

◆ esos_IsUserFlagClear

#define esos_IsUserFlagClear (   mask)

Queries whether the global user flags provided by ESOS are clear

Parameters
maskAn uint16 value composed of the OR-ed user mask flag masks, where each flag in the OR will be checked for being clear
Return values
TRUEif at least one of the flags is clear
FALSEif none of the flags are clear
Note
User should use the provided bits masks like ESOS_USER_FLAG_0 and ESOS_USER_FLAG_1 and ... ESOS_USER_FLAG_F to create their own readable constants
#define HEADLIGHTS_ARE_ON ESOS_USER_FLAG_3
#define MY_USER_FRIENDLY_FLAG ESOS_USER_FLAG_7
esos_ClearUserFlag( HEADLIGHTS_ARE_ON | MY_USER_FRIENDLY_FLAG);
while(esos_IsUserFlagClear( HEADLIGHTS_ARE_ON)); // infinite loop
See also
esos_SetUserFlag
esos_ClearUserFlag
esos_IsUserFlagSet

Definition at line 536 of file esos.h.

◆ esos_IsUserFlagSet

#define esos_IsUserFlagSet (   mask)

Queries whether the global user flags provided by ESOS are set

Parameters
maskAn uint16 value composed of the OR-ed user mask flag masks, where each flag in the OR will be checked for being set
Return values
TRUEif at least one of the flags is set
FALSEif none of the flags are set
Note
User should use the provided bits masks like ESOS_USER_FLAG_0 and ESOS_USER_FLAG_1 and ... ESOS_USER_FLAG_F to create their own readable constants
#define HEADLIGHTS_ARE_ON ESOS_USER_FLAG_3
#define MY_USER_FRIENDLY_FLAG ESOS_USER_FLAG_7
esos_ClearUserFlag( HEADLIGHTS_ARE_ON | MY_USER_FRIENDLY_FLAG);
while(esos_IsUserFlagSet( HEADLIGHTS_ARE_ON)); // falls through
See also
esos_SetUserFlag
esos_ClearUserFlag
esos_IsUserFlagClear

Definition at line 514 of file esos.h.

◆ esos_SetUserFlag

#define esos_SetUserFlag (   mask)

Sets bits in the global user flags provided by ESOS

Parameters
maskAn uint16 value composed of the OR-ed user mask flag masks, where each flag in the OR will be set
Note
User should use the provided bits masks like ESOS_USER_FLAG_0 to create their own readable constants
#define HEADLIGHTS_ARE_ON ESOS_USER_FLAG_3
#define MY_USER_FRIENDLY_FLAG ESOS_USER_FLAG_7
esos_SetUserFlag( HEADLIGHTS_ARE_ON | MY_USER_FRIENDLY_FLAG);
See also
esos_ClearUserFlag
esos_IsUserFlagSet
esos_IsUserFlagClear

Definition at line 472 of file esos.h.

◆ ESOS_USER_FLAG_0

#define ESOS_USER_FLAG_0

Mask for a global user flag provided by ESOS

Definition at line 185 of file esos.h.

◆ ESOS_USER_FLAG_1

#define ESOS_USER_FLAG_1

Mask for a global user flag provided by ESOS

Definition at line 189 of file esos.h.

◆ ESOS_USER_FLAG_10

#define ESOS_USER_FLAG_10

Mask for a global user flag provided by ESOS

Definition at line 225 of file esos.h.

◆ ESOS_USER_FLAG_11

#define ESOS_USER_FLAG_11

Mask for a global user flag provided by ESOS

Definition at line 229 of file esos.h.

◆ ESOS_USER_FLAG_12

#define ESOS_USER_FLAG_12

Mask for a global user flag provided by ESOS

Definition at line 233 of file esos.h.

◆ ESOS_USER_FLAG_13

#define ESOS_USER_FLAG_13

Mask for a global user flag provided by ESOS

Definition at line 237 of file esos.h.

◆ ESOS_USER_FLAG_14

#define ESOS_USER_FLAG_14

Mask for a global user flag provided by ESOS

Definition at line 241 of file esos.h.

◆ ESOS_USER_FLAG_15

#define ESOS_USER_FLAG_15

Mask for a global user flag provided by ESOS

Definition at line 245 of file esos.h.

◆ ESOS_USER_FLAG_16

#define ESOS_USER_FLAG_16

Mask for a global user flag provided by ESOS

Definition at line 249 of file esos.h.

◆ ESOS_USER_FLAG_17

#define ESOS_USER_FLAG_17

Mask for a global user flag provided by ESOS

Definition at line 253 of file esos.h.

◆ ESOS_USER_FLAG_18

#define ESOS_USER_FLAG_18

Mask for a global user flag provided by ESOS

Definition at line 257 of file esos.h.

◆ ESOS_USER_FLAG_19

#define ESOS_USER_FLAG_19

Mask for a global user flag provided by ESOS

Definition at line 261 of file esos.h.

◆ ESOS_USER_FLAG_2

#define ESOS_USER_FLAG_2

Mask for a global user flag provided by ESOS

Definition at line 193 of file esos.h.

◆ ESOS_USER_FLAG_20

#define ESOS_USER_FLAG_20

Mask for a global user flag provided by ESOS

Definition at line 265 of file esos.h.

◆ ESOS_USER_FLAG_21

#define ESOS_USER_FLAG_21

Mask for a global user flag provided by ESOS

Definition at line 269 of file esos.h.

◆ ESOS_USER_FLAG_22

#define ESOS_USER_FLAG_22

Mask for a global user flag provided by ESOS

Definition at line 273 of file esos.h.

◆ ESOS_USER_FLAG_23

#define ESOS_USER_FLAG_23

Mask for a global user flag provided by ESOS

Definition at line 277 of file esos.h.

◆ ESOS_USER_FLAG_24

#define ESOS_USER_FLAG_24

Mask for a global user flag provided by ESOS

Definition at line 281 of file esos.h.

◆ ESOS_USER_FLAG_25

#define ESOS_USER_FLAG_25

Mask for a global user flag provided by ESOS

Definition at line 285 of file esos.h.

◆ ESOS_USER_FLAG_26

#define ESOS_USER_FLAG_26

Mask for a global user flag provided by ESOS

Definition at line 289 of file esos.h.

◆ ESOS_USER_FLAG_27

#define ESOS_USER_FLAG_27

Mask for a global user flag provided by ESOS

Definition at line 293 of file esos.h.

◆ ESOS_USER_FLAG_28

#define ESOS_USER_FLAG_28

Mask for a global user flag provided by ESOS

Definition at line 297 of file esos.h.

◆ ESOS_USER_FLAG_29

#define ESOS_USER_FLAG_29

Mask for a global user flag provided by ESOS

Definition at line 301 of file esos.h.

◆ ESOS_USER_FLAG_3

#define ESOS_USER_FLAG_3

Mask for a global user flag provided by ESOS

Definition at line 197 of file esos.h.

◆ ESOS_USER_FLAG_30

#define ESOS_USER_FLAG_30

Mask for a global user flag provided by ESOS

Definition at line 305 of file esos.h.

◆ ESOS_USER_FLAG_31

#define ESOS_USER_FLAG_31

Mask for a global user flag provided by ESOS

Definition at line 309 of file esos.h.

◆ ESOS_USER_FLAG_4

#define ESOS_USER_FLAG_4

Mask for a global user flag provided by ESOS

Definition at line 201 of file esos.h.

◆ ESOS_USER_FLAG_5

#define ESOS_USER_FLAG_5

Mask for a global user flag provided by ESOS

Definition at line 205 of file esos.h.

◆ ESOS_USER_FLAG_6

#define ESOS_USER_FLAG_6

Mask for a global user flag provided by ESOS

Definition at line 209 of file esos.h.

◆ ESOS_USER_FLAG_7

#define ESOS_USER_FLAG_7

Mask for a global user flag provided by ESOS

Definition at line 213 of file esos.h.

◆ ESOS_USER_FLAG_8

#define ESOS_USER_FLAG_8

Mask for a global user flag provided by ESOS

Definition at line 217 of file esos.h.

◆ ESOS_USER_FLAG_9

#define ESOS_USER_FLAG_9

Mask for a global user flag provided by ESOS

Definition at line 221 of file esos.h.

◆ ESOS_USER_TIMER

#define ESOS_USER_TIMER (   timername)

Declaration of an user-defined timer callback (for ESOS timer services)

This macro is used to declare a user-timer. All timers using ESOS timer services must be declared with this macro.

Parameters
timernameThe name of the software timer to create.
Note
You are really creating a C function implementing the user timer callback. Since ESOS timer serivces calls this callback function at the appropriate time, this function cannot be passed arguments and cannot return values

Definition at line 324 of file esos.h.

◆ MAX_NUM_CHILD_TASKS

#define MAX_NUM_CHILD_TASKS   MAX_NUM_USER_TASKS

Define the maximum number of user tasks in the system

Note
Technically, this is actually the maximum number of tasks that will be running "concurrently". Usually, this number is the maximum number of tasks that the user has defined, UNLESS they are absolutely sure that two (or more) tasks are mutually exclusive in execution.
BOTH "parent" and "child" tasks use this NUMBER to allocate their pool of tasks. So this number should be equal to or greater than the MAXIMUM number of concurrently running child –OR– parent tasks.

Definition at line 149 of file esos.h.

Typedef Documentation

◆ ESOS_TMR_HANDLE

typedef uint8_t ESOS_TMR_HANDLE

Handle to a software timer in the ESOS timer service.

See also
ESOS_USER_TIMER
esos_RegisterTimer
esos_UnregisterTimer
esos_GetTimerHandle
esos_ChangeTimerPeriod

Definition at line 337 of file esos.h.

◆ main_t

typedef int main_t

Define the constants and structures required for our little embedded systems operating system

Definition at line 128 of file esos.h.

Function Documentation

◆ esos_ChangeTimerPeriod()

uint8_t esos_ChangeTimerPeriod ( ESOS_TMR_HANDLE  hnd_timer,
uint32_t  u32_period 
)

Change a timer period.

Parameters
hnd_timerhandle to timer whose period is to be changed
u32_periodnew period for timer selected by mask
Return values
FALSEif timer is not currently running
TRUEif timer period was changed
See also
esos_RegisterTimer
esos_UnregisterTimer
esos_GetTimerHandle
esos_IsTimerRunning

Definition at line 499 of file esos.c.

◆ esos_GetFreeChildTaskStruct()

ESOS_TASK_HANDLE esos_GetFreeChildTaskStruct ( )

Searches child task pool to find a free child task structure and returns a handle (pst) back to the caller

Return values
TaskHandleif a child task structure is available
ESOS_BAD_CHILD_TASK_HANDLEif no structures are available at this time

Definition at line 338 of file esos.c.

◆ esos_GetTaskHandle()

ESOS_TASK_HANDLE esos_GetTaskHandle ( uint8_t(*)(ESOS_TASK_HANDLE pstTask)  taskname)

Find the (active) task handle for a given task function

Parameters
tasknamename of task (argument to ESOS_USER_TASK declaration
Return values
NULLPTRif task is not found among the active tasks
TaskHandlethe handle to the task function requested
See also
ESOS_USER_TASK
esos_RegisterTask
esos_UnregisterTask

Definition at line 259 of file esos.c.

◆ esos_GetTaskHandleFromID()

ESOS_TASK_HANDLE esos_GetTaskHandleFromID ( uint16_t  u16_TaskID)

Find the (active) task handle for a given task function

Parameters
u16_TaskIDname of task (argument to ESOS_USER_TASK declaration)
Return values
NULLPTRif task is not found among the active tasks
TaskHandlethe handle to the task function requested
See also
ESOS_USER_TASK
esos_RegisterTask
esos_UnregisterTask

Definition at line 295 of file esos.c.

◆ esos_GetTimerHandle()

ESOS_TMR_HANDLE esos_GetTimerHandle ( void(*)(void)  pfnTmrFcn)

Finds the timer handle to the provided and ACTIVE timer function

Parameters
pfnTmrFcnpointer to timer function (will execute each time timer expires)
Return values
ESOS_TMR_FAILUREcould not find the function in the active timer list
timerHandlehandle to timer
See also
esos_RegisterTimer
esos_UnregisterTimer
esos_ChangeTimerPeriod
esos_IsTimerRunning

Definition at line 472 of file esos.c.

◆ esos_RegisterTimer()

ESOS_TMR_HANDLE esos_RegisterTimer ( void(*)(void)  timername,
uint32_t  u32_period 
)

Adds a timer to the ESOS timer service. Timer function will execute at its next opportunity. Timer functions must have void arguments and void returns.

Parameters
timernamename under which timer was declared in ESOS_USER_TIMER. and contains the code to run when software timer expires
u32_periodperiod of timer in system ticks (currently, milliseconds)
Return values
ESOS_TMR_FAILUREif no more timers can added at this time
timerhandleif timer service was registered
See also
ESOS_USER_TIMER
esos_UnregisterTimer
esos_GetTimerHandle
esos_ChangeTimerPeriod
esos_IsTimerRunning

Definition at line 422 of file esos.c.

◆ esos_UnregisterTimer()

uint8_t esos_UnregisterTimer ( ESOS_TMR_HANDLE  hnd_timer)

Removes a timer from the ESOS timer service.

Parameters
hnd_timerhandle to timer to remove
Return values
FALSEif timer wasn't active in the first place
TRUEif timer was stopped and removed
See also
esos_RegisterTimer
esos_GetTimerHandle
esos_ChangeTimerPeriod

Definition at line 451 of file esos.c.

◆ user_init()

void user_init ( void  )

User-provided function to initialize user's hardware configuration register user tasks.

Note
All ESOS applications MUST provide this function.
This function MUST register at least one ESOS task.
user_init() is a centralized initialization routine where the user can setup their application. It is called automagically by ES_OS during the operating system initialization.
User should set up any state machines and init all application variables. They can also turn on any needed peripherals here.
User shall not mess with the interrupt hardware directly!!! The ESOS must be aware of the interrupts and provides esos_XXXXXXX functions for the user to use. Using these ESOS-provided functions, the user may (and probably should) initialize, register, and enable interrupts in this routine.
Furthermore, the user should register AT LEAST one user application task here via esos_RegisterTask or the ES_OS scheduler will have nothing to schedule to run when this function returns.

Definition at line 807 of file app_example.c.

esos_ClearUserFlag
#define esos_ClearUserFlag(mask)
Definition: esos.h:492
esos_IsUserFlagClear
#define esos_IsUserFlagClear(mask)
Definition: esos.h:536
esos_IsUserFlagSet
#define esos_IsUserFlagSet(mask)
Definition: esos.h:514