OSIdleTaskHook

Description

This function is called by OS_IdleTask().

OSIdleTaskHook() is part of the CPU port code and this function must not be called by the application code. OSIdleTaskHook() is used by the µC/OS-III port developer.

OSIdleTaskHook() runs in the context of the idle task and thus it is important to make sure there is sufficient stack space in the idle task. OSIdleTaskHook() must not make any OS???Pend() calls, call OSTaskSuspend() or OSTimeDly???(). In other words, this function must never be allowed to make a blocking call.

Files

os.h/os_cpu_c.c and os_app_hooks.c

Prototype

void  OSIdleTaskHook (void)

Arguments

None

Returned Value

None

Required Configuration

OS_CFG_APP_HOOKS_EN must be enabled in os_cfg.h. Refer to µC-OS-III Configuration Manual.

Callers

OS_IdleTask().

Notes/Warnings

  1. Never make blocking calls from OSIdleTaskHook().
  2. Do not call this function from you application.

Example Usage

The code below calls an application-specific hook that the application programmer can define. The user can simply set the value of OS_AppIdleTaskHookPtr to point to the desired hook function which in this case is assumed to be defined in os_app_hooks.c. The idle task calls OSIdleTaskHook() which in turns calls App_OS_IdleTaskHook() through OS_AppIdleTaskHookPtr.

This feature is very useful when there is a processor that can enter low-power mode. When µC/OS-III has no other task to run, the processor can be put to sleep waiting for an interrupt to wake it up.

OSIdleTaskHook() example usage
          void  App_OS_IdleTaskHook (void)                           /* See os_app_hooks.c    */
          {
              /* Your code goes here! */
              /* Put the CPU in low power mode (optional) */
          }
           
           
          void App_OS_SetAllHooks (void)                             /* os_app_hooks.c        */
          {
              CPU_SR_ALLOC();
           
              CPU_CRITICAL_ENTER();
              :
              OS_AppIdleTaskHookPtr = App_OS_IdleTaskHook;
              :
              CPU_CRITICAL_EXIT();
          }
           
           
          void  OSIdleTaskHook (void)                                /* See os_cpu_c.c        */
          {
          #if OS_CFG_APP_HOOKS_EN > 0u
              if (OS_AppIdleTaskHookPtr != (OS_APP_HOOK_VOID)0) {    /* Call application hook */
                  (*OS_AppIdleTaskHookPtr)();
              }
          #endif
          }