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

This website uses cookies for visitor traffic analysis. By using the website, you agree with storing the cookies on your computer.More information