2021-12-21 15:16:25 +03:00
# pragma once
2021-10-18 01:54:19 +03:00
# if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__)
2021-12-21 15:16:25 +03:00
# include <stdint.h>
2024-09-13 20:31:07 +03:00
# include <errno.h>
2022-05-06 16:37:10 +03:00
# pragma GCC diagnostic ignored "-Wredundant-decls"
2021-10-18 01:54:19 +03:00
# endif
2021-12-21 15:16:25 +03:00
2021-10-18 01:54:19 +03:00
# ifndef CMSIS_device_header
# define CMSIS_device_header "stm32wbxx.h"
# endif /* CMSIS_device_header */
2023-11-01 16:24:11 +09:00
# include CMSIS_device_header
2022-01-05 19:10:18 +03:00
# define configENABLE_FPU 1
# define configENABLE_MPU 0
2024-07-15 07:38:49 +03:00
# define configUSE_PREEMPTION 1
# define configSUPPORT_STATIC_ALLOCATION 1
2024-06-05 20:04:03 +03:00
# define configSUPPORT_DYNAMIC_ALLOCATION 0
2024-07-31 19:38:20 +03:00
# define configUSE_MALLOC_FAILED_HOOK 0
2024-07-15 07:38:49 +03:00
# define configUSE_IDLE_HOOK 0
# define configUSE_TICK_HOOK 0
# define configCPU_CLOCK_HZ (SystemCoreClock)
# define configTICK_RATE_HZ_RAW 1000
# define configTICK_RATE_HZ ((TickType_t)configTICK_RATE_HZ_RAW)
2024-07-31 19:38:20 +03:00
# define configUSE_16_BIT_TICKS 0
2024-07-15 07:38:49 +03:00
# define configMAX_PRIORITIES (32)
# define configMINIMAL_STACK_SIZE ((uint16_t)128)
2024-09-13 20:31:07 +03:00
# define configUSE_POSIX_ERRNO 1
2021-12-21 15:16:25 +03:00
2021-10-18 01:54:19 +03:00
/* Heap size determined automatically by linker */
// #define configTOTAL_HEAP_SIZE ((size_t)0)
2023-10-10 02:55:38 +09:00
# define configMAX_TASK_NAME_LEN (32)
2024-02-16 11:20:45 +04:00
2024-07-15 07:38:49 +03:00
# define configGENERATE_RUN_TIME_STATS 1
2024-02-16 11:20:45 +04:00
# define portGET_RUN_TIME_COUNTER_VALUE() (DWT->CYCCNT)
# define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
2024-07-15 07:38:49 +03:00
# define configUSE_TRACE_FACILITY 1
# define configUSE_MUTEXES 1
# define configQUEUE_REGISTRY_SIZE 0
# define configCHECK_FOR_STACK_OVERFLOW 0
# define configUSE_RECURSIVE_MUTEXES 1
# define configUSE_COUNTING_SEMAPHORES 1
# define configENABLE_BACKWARD_COMPATIBILITY 0
2022-06-20 17:54:48 +03:00
# define configUSE_PORT_OPTIMISED_TASK_SELECTION 1
2024-07-15 07:38:49 +03:00
# define configUSE_TICKLESS_IDLE 2
# define configRECORD_STACK_HIGH_ADDRESS 1
# define configUSE_NEWLIB_REENTRANT 0
2021-12-21 15:16:25 +03:00
2021-10-18 01:54:19 +03:00
/* Defaults to size_t for backward compatibility, but can be changed
if lengths will always be less than the number of bytes in a size_t . */
2024-07-15 07:38:49 +03:00
# define configMESSAGE_BUFFER_LENGTH_TYPE size_t
2022-01-05 19:10:18 +03:00
# define configNUM_THREAD_LOCAL_STORAGE_POINTERS 1
2024-07-15 07:38:49 +03:00
# define configEXPECTED_IDLE_TIME_BEFORE_SLEEP 4
2021-10-18 01:54:19 +03:00
/* Co-routine definitions. */
2022-01-05 19:10:18 +03:00
# define configUSE_CO_ROUTINES 0
2021-10-18 01:54:19 +03:00
/* Software timer definitions. */
2024-07-15 07:38:49 +03:00
# define configUSE_TIMERS 1
# define configTIMER_TASK_PRIORITY (2)
# define configTIMER_QUEUE_LENGTH 32
# define configTIMER_TASK_STACK_DEPTH 256
2022-01-05 19:10:18 +03:00
# define configTIMER_SERVICE_TASK_NAME "TimersSrv"
2021-11-11 19:17:50 +03:00
2024-07-15 07:38:49 +03:00
# define configIDLE_TASK_NAME "(-_-)"
2023-03-28 00:34:49 -07:00
# define configIDLE_TASK_STACK_DEPTH 128
2021-10-18 01:54:19 +03:00
/* Set the following definitions to 1 to include the API function, or zero
to exclude the API function . */
2024-07-15 07:38:49 +03:00
# define INCLUDE_xTaskGetHandle 1
# define INCLUDE_eTaskGetState 1
2022-01-05 19:10:18 +03:00
# define INCLUDE_uxTaskGetStackHighWaterMark 1
2024-07-15 07:38:49 +03:00
# define INCLUDE_uxTaskPriorityGet 1
# define INCLUDE_vTaskCleanUpResources 0
# define INCLUDE_vTaskDelay 1
# define INCLUDE_vTaskDelayUntil 1
# define INCLUDE_vTaskDelete 1
# define INCLUDE_vTaskPrioritySet 1
# define INCLUDE_vTaskSuspend 1
# define INCLUDE_xQueueGetMutexHolder 1
# define INCLUDE_xTaskGetCurrentTaskHandle 1
# define INCLUDE_xTaskGetSchedulerState 1
# define INCLUDE_xTimerPendFunctionCall 1
2021-10-18 01:54:19 +03:00
2024-06-10 18:53:08 +01:00
/* Workaround for various notification issues:
* - First one used by system primitives
* - Second one by thread event notification
* - Third one by FuriEventLoop
*/
# define configTASK_NOTIFICATION_ARRAY_ENTRIES 3
2021-10-18 01:54:19 +03:00
2024-03-19 23:43:52 +09:00
extern __attribute__ ( ( __noreturn__ ) ) void furi_thread_catch ( void ) ;
2022-06-20 17:54:48 +03:00
# define configTASK_RETURN_ADDRESS (furi_thread_catch + 2)
2021-10-18 01:54:19 +03:00
/*
* The CMSIS - RTOS V2 FreeRTOS wrapper is dependent on the heap implementation used
* by the application thus the correct define need to be enabled below
*/
# define USE_FreeRTOS_HEAP_4
/* Cortex-M specific definitions. */
# ifdef __NVIC_PRIO_BITS
2022-01-05 19:10:18 +03:00
/* __BVIC_PRIO_BITS will be specified when CMSIS is being used. */
# define configPRIO_BITS __NVIC_PRIO_BITS
2021-10-18 01:54:19 +03:00
# else
2022-01-05 19:10:18 +03:00
# define configPRIO_BITS 4
2021-10-18 01:54:19 +03:00
# endif
/* The lowest interrupt priority that can be used in a call to a "set priority"
function . */
2022-01-05 19:10:18 +03:00
# define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15
2021-10-18 01:54:19 +03:00
/* The highest interrupt priority that can be used by any interrupt service
routine that makes calls to interrupt safe FreeRTOS API functions . DO NOT CALL
INTERRUPT SAFE FREERTOS API FUNCTIONS FROM ANY INTERRUPT THAT HAS A HIGHER
PRIORITY THAN THIS ! ( higher priorities are lower numeric values . */
# define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5
/* Interrupt priorities used by the kernel port layer itself. These are generic
to all Cortex - M ports , and do not rely on any particular library functions . */
2022-01-05 19:10:18 +03:00
# define configKERNEL_INTERRUPT_PRIORITY \
( configLIBRARY_LOWEST_INTERRUPT_PRIORITY < < ( 8 - configPRIO_BITS ) )
2021-12-21 15:16:25 +03:00
2021-10-18 01:54:19 +03:00
/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
See http : //www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
2022-01-05 19:10:18 +03:00
# define configMAX_SYSCALL_INTERRUPT_PRIORITY \
( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY < < ( 8 - configPRIO_BITS ) )
2021-10-18 01:54:19 +03:00
/* Normal assert() semantics without relying on the provision of an assert.h
header file . */
2022-04-13 23:50:25 +03:00
# ifdef DEBUG
2022-07-20 13:56:33 +03:00
# include <core/check.h>
2022-01-05 19:10:18 +03:00
# define configASSERT(x) \
if ( ( x ) = = 0 ) { \
furi_crash ( " FreeRTOS Assert " ) ; \
}
2022-04-13 23:50:25 +03:00
# endif
2021-10-18 01:54:19 +03:00
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names . */
2024-07-15 07:38:49 +03:00
# define vPortSVCHandler SVC_Handler
2021-10-18 01:54:19 +03:00
# define xPortPendSVHandler PendSV_Handler
# define USE_CUSTOM_SYSTICK_HANDLER_IMPLEMENTATION 1
2022-01-05 19:10:18 +03:00
# define configOVERRIDE_DEFAULT_TICK_CONFIGURATION \
1 /* required only for Keil but does not hurt otherwise */
2022-08-04 01:47:10 +10:00
2024-09-13 20:31:07 +03:00
# define traceTASK_SWITCHED_IN() \
extern void furi_hal_mpu_set_stack_protection ( uint32_t * stack ) ; \
furi_hal_mpu_set_stack_protection ( ( uint32_t * ) pxCurrentTCB - > pxStack ) ; \
errno = pxCurrentTCB - > iTaskErrno
// ^^^^^ acquire errno directly from TCB because FreeRTOS assigns its `FreeRTOS_errno' _after_ our hook is called
// referencing `FreeRTOS_errno' here vvvvv because FreeRTOS calls our hook _before_ copying the value into the TCB, hence a manual write to the TCB would get overwritten
# define traceTASK_SWITCHED_OUT() FreeRTOS_errno = errno
2023-03-28 00:34:49 -07:00
# define portCLEAN_UP_TCB(pxTCB) \
extern void furi_thread_cleanup_tcb_event ( TaskHandle_t task ) ; \
furi_thread_cleanup_tcb_event ( pxTCB )