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_t
is the data type used to hold the tick count value, and to specify times. Its type depends onconfigTICK_TYPE_WIDTH_IN_BITS
inFreeRTOSConfig.h
.
BaseType_t
BaseType_t
is 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
/pdFALSE
type Booleans.
Variable Names
- Variables are prefixed with their type
- a variable of type
uint8_t
will 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 avoid
and is defined within tasks.cxQueueReceive()
returns a variable of typeBaseType_t
and 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