====FreeRTOS====
===Install===
==current==
cd /opt
wget https://github.com/FreeRTOS/FreeRTOS/releases/download/202212.01/FreeRTOSv202212.01.zip
unzip FreeRTOSv202212.01.zip
===LTS===
cd /opt
wget https://github.com/FreeRTOS/FreeRTOS-LTS/releases/download/202210.01-LTS/FreeRTOSv202210.01-LTS.zip
unzip FreeRTOSv202210.01-LTS.zip
==git==
cd /opt
git clone --recurse-submodules https://github.com/FreeRTOS/FreeRTOS
===Configuration===
Configuration for FreeRTOS on STM32F302R8 using timer tick instead
of SysTick for multitasking.
/*
* FreeRTOS V202212.01
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of
* this software and associated documentation files (the "Software"), to deal in
* the Software without restriction, including without limitation the rights to
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
* the Software, and to permit persons to whom the Software is furnished to do so,
* subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
* https://www.FreeRTOS.org
* https://github.com/FreeRTOS
*
*/
#ifndef FREERTOS_CONFIG_H
#define FREERTOS_CONFIG_H
/*-----------------------------------------------------------
* Application specific definitions.
*
* These definitions should be adjusted for your particular hardware and
* application requirements.
*
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
*
* See https://www.freertos.org/a00110.html
*----------------------------------------------------------*/
/* Pre-emptive, else co-operative multi-tasking */
#define configUSE_PREEMPTION 1
/* Idle task: void vApplicationIdleHook(void); */
#define configUSE_IDLE_HOOK 0
/* Tick task: void vApplicationTickHook(void); */
#define configUSE_TICK_HOOK 0
/* Core frequency for SysTick */
#define configCPU_CLOCK_HZ (72000000)
/* SysTick/Timer tick frequency */
#define configTICK_RATE_HZ ((TickType_t)(1000))
/* Highest priority (1..32) */
#define configMAX_PRIORITIES (4) /* 0..3 */
/* Idle task stack size */
#define configMINIMAL_STACK_SIZE ((unsigned short)(128))
/* Memory heap size */
#define configTOTAL_HEAP_SIZE ((size_t)(12 * 1024))
/* Task name length (1=DISABLE) */
#define configMAX_TASK_NAME_LEN (3)
/* Enable trace */
#define configUSE_TRACE_FACILITY 0
/* Tick counter size */
#define configUSE_16_BIT_TICKS 0 /* 0=32-bit */
/* Idle task yields to other tasks at idle priority */
#define configIDLE_SHOULD_YIELD 1
/* Enable mutexes */
#define configUSE_MUTEXES 1
/* Queue registry for debugging */
#define configQUEUE_REGISTRY_SIZE 8
/* Overflow task: void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName); */
#define configCHECK_FOR_STACK_OVERFLOW 0 /* 0..2 */
/* Enable recursive mutexes */
#define configUSE_RECURSIVE_MUTEXES 1
/* OOM task: void vApplicationMallocFailedHook(void); */
#define configUSE_MALLOC_FAILED_HOOK 0
/* Enable task tagging */
#define configUSE_APPLICATION_TASK_TAG 0
/* Enable semaphores */
#define configUSE_COUNTING_SEMAPHORES 1
/* See: https://www.freertos.org/rtos-run-time-stats.html */
#define configGENERATE_RUN_TIME_STATS 0
/*
* Software timer definitions.
*
* See: https://www.freertos.org/RTOS-software-timer.html
*/
#define configUSE_TIMERS 1
#define configTIMER_TASK_PRIORITY (2)
#define configTIMER_QUEUE_LENGTH 10
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE * 2)
/*
* Set the following definitions to 1 to include the API function, or zero to
* exclude the API function.
*/
#define INCLUDE_vTaskPrioritySet 1
#define INCLUDE_uxTaskPriorityGet 1
#define INCLUDE_vTaskDelete 1
#define INCLUDE_vTaskCleanUpResources 1
#define INCLUDE_vTaskSuspend 1
#define INCLUDE_vTaskDelayUntil 1
#define INCLUDE_vTaskDelay 1
/*
* Cortex-M4 specific definitions.
*/
#define configPRIO_BITS 4 /* 15 priority levels */
/*
* The lowest interrupt priority that can be used in a call to a "set priority"
* function.
*/
#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 0xf
/*
* 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.
*/
#define configKERNEL_INTERRUPT_PRIORITY (configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/*
* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
*
* See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html.
*/
#define configMAX_SYSCALL_INTERRUPT_PRIORITY (configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - configPRIO_BITS))
/*
* Normal assert() semantics without relying on the provision of an assert.h
* header file.
*/
#define configASSERT(x) if ((x) == 0) { taskDISABLE_INTERRUPTS(); for (;;); }
/*
* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
* standard names.
*/
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#if 0 /* Tick setup task: void vPortSetupTimerInterrupt(void); */
#define xPortSysTickHandler SysTick_Handler
#endif
#endif /* !FREERTOS_CONFIG_H */
====Resources====
[[https://www.freertos.org/fr-content-src/uploads/2018/07/161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf|Documentation]]
[[https://github.com/jefftenney/LPTIM-Tick|STM32 LPTIM Tickless Idle]]