Learning FreeRTOS
This post contains personal learning notes regarding FreeRTOS and important contents extracted from the FreeRTOS Kernel Book.
Warning
The book content is licensed under CC BY-SA 4.0 and sample code within this book is licensed under MIT.
Chapter 2
Ports
- Each supported combination of compiler and processor is called a FreeRTOS port.
- FreeRTOS is supplied as a set of C source files. Some source files are common to all ports, while others are specific to a port. Building the source files as part of your project makes the FreeRTOS API available to your application.
Data Types
TickType_t
- FreeRTOS configures a periodic interrupt called the tick interrupt.
- The number of tick interrupts that have occurred since the FreeRTOS application started is called the tick count. The tick count is used as a measure of time.
TickType_tis the data type used to hold the tick count value, and to specify times. Its type depends onconfigTICK_TYPE_WIDTH_IN_BITSinFreeRTOSConfig.h.
BaseType_t
BaseType_tis the data type used to define the most efficient data type for the architecture.- 64-bit type on a 64-bit architecture
- 32-bit type on a 32-bit architecture
- X-bit type on a X-bit architecture
- Generally used for return types that take only a very limited range of values, and for
pdTRUE/pdFALSEtype Booleans.
Variable Names
- Variables are prefixed with their type
- a variable of type
uint8_twill be prefixed withuc - a variable of type
char*will be prefixed withpc
| Prefix | Meaning |
|---|---|
| c | char |
| s | int16_t |
| l | int32_t |
| x | BaseType_t / non-standard types |
| u | unsigned |
| p | pointer |
Prefix meaning
Function Names
- Functions are prefixed with both the type they return and the file they are defined within
vTaskPrioritySet()returns avoidand is defined within tasks.cxQueueReceive()returns a variable of typeBaseType_tand is defined within queue.cpvTimerGetTimerID()returns avoid*and is defined within timers.c.- File scope (private) functions are prefixed with
prv.
Marco Names
- Most macros are written in upper case, and prefixed with lower case letters that indicate where the macro is defined
- Semaphore API is written almost entirely as a set of macros, but follows the function naming convention, rather than the macro naming convention.
| Prefix | Example | Location of marco definition |
|---|---|---|
| port | portMAX_DELAY |
portable.h / portmarco.h |
| task | taskENTER_CRITICAL() |
task.h |
| pd | pdTrue |
projdefs.h |
| config | configUSE_PREEMPTION |
FreeRTOSConfig.h |
| err | errQUEUE_FULL |
projdefs.h |
Macro prefixes
| Marco | Value |
|---|---|
pdTRUE / pdPASS |
1 |
pdFALSE / pdFAIL |
0 |
Common macro definitions