Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
tools:freertos [2023/07/01 16:55] – created darrontools:freertos [2023/11/27 04:26] (current) – [Resources] darron
Line 1: Line 1:
 ====FreeRTOS==== ====FreeRTOS====
  
-For STM32+===Install===
  
-==Install==+==current==
  
 <code> <code>
Line 11: Line 11:
 </code> </code>
  
 +===LTS===
 +
 +<code>
 +cd /opt
 +wget https://github.com/FreeRTOS/FreeRTOS-LTS/releases/download/202210.01-LTS/FreeRTOSv202210.01-LTS.zip
 +unzip FreeRTOSv202210.01-LTS.zip
 +</code>
 +
 +==git==
 +
 +<code>
 +cd /opt
 +git clone --recurse-submodules https://github.com/FreeRTOS/FreeRTOS
 +</code>
 +===Configuration===
 +
 +Configuration for FreeRTOS on STM32F302R8 using timer tick instead
 +of SysTick for multitasking.
 +
 +<code>
 +/*
 + * 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 */
 +</code>
 +====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]]