Skip to content

Commit 213f979

Browse files
committed
Support static allocation in Freertos example
1 parent f9ef15b commit 213f979

File tree

3 files changed

+55
-6
lines changed

3 files changed

+55
-6
lines changed

freertos/FreeRTOSConfig_examples_common.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,12 @@
7070
#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
7171

7272
/* Memory allocation related definitions. */
73+
#ifndef configSUPPORT_STATIC_ALLOCATION
7374
#define configSUPPORT_STATIC_ALLOCATION 0
75+
#endif
76+
#ifndef configSUPPORT_DYNAMIC_ALLOCATION
7477
#define configSUPPORT_DYNAMIC_ALLOCATION 1
78+
#endif
7579
#define configTOTAL_HEAP_SIZE (128*1024)
7680
#define configAPPLICATION_ALLOCATED_HEAP 0
7781

freertos/hello_freertos/CMakeLists.txt

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
set(USE_STATIC_ALLOC ON)
2+
13
set(TARGET_NAME hello_freertos1)
24
add_executable(${TARGET_NAME}
35
hello_freertos.c
@@ -7,14 +9,26 @@ target_include_directories(${TARGET_NAME} PRIVATE
79
)
810
target_link_libraries(${TARGET_NAME} PRIVATE
911
pico_async_context_freertos
10-
FreeRTOS-Kernel-Heap4
1112
pico_stdlib
1213
)
14+
if(USE_STATIC_ALLOC)
15+
target_compile_definitions(${TARGET_NAME} PRIVATE
16+
configSUPPORT_STATIC_ALLOCATION=1
17+
configSUPPORT_DYNAMIC_ALLOCATION=0
18+
)
19+
target_link_libraries(${TARGET_NAME} PRIVATE
20+
FreeRTOS-Kernel-Static
21+
)
22+
else()
23+
target_link_libraries(${TARGET_NAME} PRIVATE
24+
FreeRTOS-Kernel-Heap4
25+
)
26+
endif()
1327
if(PICO_CYW43_SUPPORTED)
1428
# For led support on pico_w
1529
target_link_libraries(${TARGET_NAME} PRIVATE
1630
pico_cyw43_arch_none
17-
)
31+
)
1832
endif()
1933
target_compile_definitions(${TARGET_NAME} PRIVATE
2034
configNUMBER_OF_CORES=1
@@ -30,13 +44,25 @@ target_include_directories(${TARGET_NAME} PRIVATE
3044
)
3145
target_link_libraries(${TARGET_NAME} PRIVATE
3246
pico_async_context_freertos
33-
FreeRTOS-Kernel-Heap4
3447
pico_stdlib
3548
)
49+
if(USE_STATIC_ALLOC)
50+
target_compile_definitions(${TARGET_NAME} PRIVATE
51+
configSUPPORT_STATIC_ALLOCATION=1
52+
configSUPPORT_DYNAMIC_ALLOCATION=0
53+
)
54+
target_link_libraries(${TARGET_NAME} PRIVATE
55+
FreeRTOS-Kernel-Static
56+
)
57+
else()
58+
target_link_libraries(${TARGET_NAME} PRIVATE
59+
FreeRTOS-Kernel-Heap4
60+
)
61+
endif()
3662
if(PICO_CYW43_SUPPORTED)
3763
# For led support on pico_w
3864
target_link_libraries(${TARGET_NAME} PRIVATE
3965
pico_cyw43_arch_none
40-
)
66+
)
4167
endif()
4268
pico_add_extra_outputs(${TARGET_NAME})

freertos/hello_freertos/hello_freertos.c

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ static async_context_t *example_async_context(void) {
5252
async_context_freertos_config_t config = async_context_freertos_default_config();
5353
config.task_priority = WORKER_TASK_PRIORITY; // defaults to ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_PRIORITY
5454
config.task_stack_size = WORKER_TASK_STACK_SIZE; // defaults to ASYNC_CONTEXT_DEFAULT_FREERTOS_TASK_STACK_SIZE
55+
#if configSUPPORT_STATIC_ALLOCATION
56+
static StackType_t async_context_freertos_task_stack[WORKER_TASK_STACK_SIZE];
57+
config.task_stack = async_context_freertos_task_stack;
58+
#endif
5559
if (!async_context_freertos_init(&async_context_instance, &config))
5660
return NULL;
5761
return &async_context_instance.core;
@@ -127,8 +131,15 @@ void main_task(__unused void *params) {
127131
async_context_add_at_time_worker_in_ms(context, &worker_timeout, 0);
128132
#if USE_LED
129133
// start the led blinking
134+
#if configSUPPORT_STATIC_ALLOCATION
135+
static StackType_t blink_stack[BLINK_TASK_STACK_SIZE];
136+
static StaticTask_t blink_buf;
137+
xTaskCreateStatic(blink_task, "BlinkThread", BLINK_TASK_STACK_SIZE, NULL, BLINK_TASK_PRIORITY, blink_stack, &blink_buf);
138+
#else
139+
static_assert(configSUPPORT_DYNAMIC_ALLOCATION, "");
130140
xTaskCreate(blink_task, "BlinkThread", BLINK_TASK_STACK_SIZE, NULL, BLINK_TASK_PRIORITY, NULL);
131-
#endif
141+
#endif // configSUPPORT_STATIC_ALLOCATION
142+
#endif // USE_LED
132143
int count = 0;
133144
while(true) {
134145
#if configNUMBER_OF_CORES > 1
@@ -146,11 +157,19 @@ void main_task(__unused void *params) {
146157

147158
void vLaunch( void) {
148159
TaskHandle_t task;
160+
#if configSUPPORT_STATIC_ALLOCATION
161+
static StackType_t main_stack[MAIN_TASK_STACK_SIZE];
162+
static StaticTask_t main_buf;
163+
task = xTaskCreateStatic(main_task, "MainThread", MAIN_TASK_STACK_SIZE, NULL, MAIN_TASK_PRIORITY, main_stack, &main_buf);
164+
#else
165+
static_assert(configSUPPORT_DYNAMIC_ALLOCATION, "");
149166
xTaskCreate(main_task, "MainThread", MAIN_TASK_STACK_SIZE, NULL, MAIN_TASK_PRIORITY, &task);
150-
167+
#endif // configSUPPORT_STATIC_ALLOCATION
151168
#if configUSE_CORE_AFFINITY && configNUMBER_OF_CORES > 1
152169
// we must bind the main task to one core (well at least while the init is called)
153170
vTaskCoreAffinitySet(task, 1);
171+
#else
172+
(void)task;
154173
#endif
155174

156175
/* Start the tasks and timer running. */

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy