Files
MSE-SoftwEng/TSM_PicoW_Sensor/McuLib/FreeRTOS/FreeRTOShooks.c
SylvanArnold 6cd510e749 feat: added PicoW_Sensor code template
Credits to @ext-erich.styger that provided the template
2025-05-06 13:07:01 +00:00

171 lines
5.6 KiB
C

/*
* FreeRTOShooks.c
*
* Copyright (c) 2019, 2020, Erich Styger
* SPDX-License-Identifier: BSD-3-Clause
*
* This is a default FreeRTOS hooks file you can use in your application.
*/
#include "McuLibconfig.h"
#include "FreeRTOS.h"
#include "task.h"
/*
** ===================================================================
** Event : McuRTOS_vApplicationStackOverflowHook (module Events)
**
** Component : McuRTOS [McuRTOS]
** Description :
** if enabled, this hook will be called in case of a stack
** overflow.
** Parameters :
** NAME - DESCRIPTION
** pxTask - Task handle
** * pcTaskName - Pointer to task name
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vApplicationStackOverflowHook(TaskHandle_t pxTask, char *pcTaskName)
{
/* This will get called if a stack overflow is detected during the context
switch. Set configCHECK_FOR_STACK_OVERFLOWS to 2 to also check for stack
problems within nested interrupts, but only do this for debug purposes as
it will increase the context switch time. */
(void)pxTask;
(void)pcTaskName;
taskDISABLE_INTERRUPTS();
/* Write your code here ... */
#if McuLib_CONFIG_CPU_IS_ARM_CORTEX_M
__asm volatile("bkpt #0");
#elif McuLib_CONFIG_CPU_IS_RISC_V
__asm volatile( "ebreak" );
#endif
for(;;) {}
}
/*
** ===================================================================
** Event : McuRTOS_vApplicationMallocFailedHook (module Events)
**
** Component : McuRTOS [McuRTOS]
** Description :
** If enabled, the McuRTOS will call this hook in case memory
** allocation failed.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vApplicationMallocFailedHook(void)
{
/* Called if a call to pvPortMalloc() fails because there is insufficient
free memory available in the McuRTOS heap. pvPortMalloc() is called
internally by McuRTOS API functions that create tasks, queues, software
timers, and semaphores. The size of the McuRTOS heap is set by the
configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h. */
taskDISABLE_INTERRUPTS();
/* Write your code here ... */
#if McuLib_CONFIG_CPU_IS_ARM_CORTEX_M
__asm volatile("bkpt #0");
#elif McuLib_CONFIG_CPU_IS_RISC_V
__asm volatile( "ebreak" );
#endif
for(;;) {}
}
/*
** ===================================================================
** Event : McuRTOS_vApplicationTickHook (module Events)
**
** Component : McuRTOS [FreeRTOS]
** Description :
** If enabled, this hook will be called by the RTOS for every
** tick increment.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vApplicationTickHook(void)
{
/* Hook called for every RTOS tick. */
}
/*
** ===================================================================
** Event : McuRTOS_vApplicationIdleHook (module Events)
**
** Component : McuRTOS [FreeRTOS]
** Description :
** If enabled, this hook will be called when the RTOS is idle.
** This might be a good place to go into low power mode.
** Parameters : None
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vApplicationIdleHook(void)
{
/* Called whenever the RTOS is idle (from the IDLE task).
Here would be a good place to put the CPU into low power mode. */
/* Write your code here ... */
}
/*
** ===================================================================
** Description :
** Used in tickless idle mode only, but required in this mode.
** Hook for the application to enter low power mode.
** Parameters :
** NAME - DESCRIPTION
** expectedIdleTicks - expected idle
** time, in ticks
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vOnPreSleepProcessing(TickType_t expectedIdleTicks)
{
(void)expectedIdleTicks; /* not used */
#if McuLib_CONFIG_CPU_IS_ARM_CORTEX_M
/* example for ARM Cortex-M (enable SetOperationMode() in CPU component): */
/* Cpu_SetOperationMode(DOM_WAIT, NULL, NULL); */ /* Processor Expert way to get into WAIT mode */
/* or to wait for interrupt: */
__asm volatile("dsb");
__asm volatile("wfi");
__asm volatile("isb");
#elif McuLib_CONFIG_CPU_IS_RISC_V
#warning "NYI"
#elif 0
/* example for S08/S12/ColdFire V1 (enable SetWaitMode() in CPU): */
Cpu_SetWaitMode();
#elif 0
/* example for ColdFire V2: */
__asm("stop #0x2000"); */
#else
#error "you *must* enter low power mode (wait for interrupt) here!"
#endif
/* Write your code here ... */
}
/*
** ===================================================================
** Description :
** Event called after the CPU woke up after low power mode.
** This event is optional.
** Parameters :
** NAME - DESCRIPTION
** expectedIdleTicks - expected idle
** time, in ticks
** Returns : Nothing
** ===================================================================
*/
void McuRTOS_vOnPostSleepProcessing(TickType_t expectedIdleTicks)
{
(void)expectedIdleTicks; /* not used (yet?) */
/* Write your code here ... */
}
#if configENABLE_HEAP_PROTECTOR
void vApplicationGetRandomHeapCanary( portPOINTER_SIZE_TYPE *pxHeapCanary) {
*pxHeapCanary = 0xdeadcaab;
}
#endif