Skip to content

Commit 0d804ec

Browse files
authored
Merge pull request #19 from Floessie/master
Enable `configSUPPORT_STATIC_ALLOCATION`
2 parents b60214a + f8fdd02 commit 0d804ec

File tree

6 files changed

+55
-9
lines changed

6 files changed

+55
-9
lines changed

src/Arduino_FreeRTOS.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,6 @@
100100
#include "portmacro.h"
101101
#include "portable.h"
102102

103-
/* Variant (AVR) specific configuration options. */
104-
#include "FreeRTOSVariant.h"
105-
106103
#ifdef __cplusplus
107104
extern "C" {
108105
#endif
@@ -1067,5 +1064,8 @@ typedef struct xSTATIC_TIMER
10671064
}
10681065
#endif
10691066

1067+
/* Variant (AVR) specific configuration options. */
1068+
#include "FreeRTOSVariant.h"
1069+
10701070
#endif /* INC_ARDUINO_FREERTOS_H */
10711071

src/FreeRTOSConfig.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
* application requirements.
8080
*
8181
* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
82-
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
82+
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
8383
*
8484
* See http://www.freertos.org/a00110.html.
8585
*----------------------------------------------------------*/
@@ -107,6 +107,7 @@
107107
#define configUSE_MALLOC_FAILED_HOOK 1
108108

109109
#define configSUPPORT_DYNAMIC_ALLOCATION 1
110+
#define configSUPPORT_STATIC_ALLOCATION 0
110111

111112
/* Timer definitions. */
112113
#define configUSE_TIMERS 1

src/FreeRTOSVariant.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ void vApplicationIdleHook( void );
4242
void vApplicationMallocFailedHook( void );
4343
void vApplicationStackOverflowHook( TaskHandle_t xTask, portCHAR *pcTaskName );
4444

45+
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
46+
StackType_t **ppxIdleTaskStackBuffer,
47+
uint32_t *pulIdleTaskStackSize );
48+
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
49+
StackType_t **ppxTimerTaskStackBuffer,
50+
uint32_t *pulTimerTaskStackSize );
51+
4552
/*-----------------------------------------------------------*/
4653

4754
#ifdef __cplusplus

src/heap_3.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,7 @@ task.h is included from an application file. */
9191

9292
#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE
9393

94-
#if( configSUPPORT_DYNAMIC_ALLOCATION == 0 )
95-
#error This file must not be used if configSUPPORT_DYNAMIC_ALLOCATION is 0
96-
#endif
97-
94+
#if( configSUPPORT_DYNAMIC_ALLOCATION > 0 )
9895
/*-----------------------------------------------------------*/
9996

10097
void *pvPortMalloc( size_t xWantedSize )
@@ -135,5 +132,6 @@ void vPortFree( void *pv )
135132
}
136133
}
137134

135+
#endif /* ( configSUPPORT_DYNAMIC_ALLOCATION > 0 ) */
138136

139137

src/tasks.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ typedef tskTCB TCB_t;
374374
/*lint -e956 A manual analysis and inspection has been used to determine which
375375
static variables must be declared volatile. */
376376

377-
PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB = NULL;
377+
PRIVILEGED_DATA TCB_t * volatile pxCurrentTCB __attribute__((used)) = NULL;
378378

379379
/* Lists for ready and blocked tasks. --------------------*/
380380
PRIVILEGED_DATA static List_t pxReadyTasksLists[ configMAX_PRIORITIES ];/*< Prioritised ready tasks. */

src/variantHooks.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,3 +241,43 @@ void vApplicationStackOverflowHook( TaskHandle_t xTask __attribute__((unused)),
241241

242242
#endif /* configCHECK_FOR_STACK_OVERFLOW >= 1 */
243243
/*-----------------------------------------------------------*/
244+
245+
#if ( configSUPPORT_STATIC_ALLOCATION >= 1 )
246+
247+
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
248+
StackType_t **ppxIdleTaskStackBuffer,
249+
uint32_t *pulIdleTaskStackSize ) __attribute__((weak));
250+
251+
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
252+
StackType_t **ppxIdleTaskStackBuffer,
253+
uint32_t *pulIdleTaskStackSize )
254+
{
255+
static StaticTask_t xIdleTaskTCB;
256+
static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
257+
258+
*ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
259+
*ppxIdleTaskStackBuffer = uxIdleTaskStack;
260+
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
261+
}
262+
263+
#if ( configUSE_TIMERS >= 1 )
264+
265+
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
266+
StackType_t **ppxTimerTaskStackBuffer,
267+
uint32_t *pulTimerTaskStackSize ) __attribute__((weak));
268+
269+
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
270+
StackType_t **ppxTimerTaskStackBuffer,
271+
uint32_t *pulTimerTaskStackSize )
272+
{
273+
static StaticTask_t xTimerTaskTCB;
274+
static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
275+
276+
*ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
277+
*ppxTimerTaskStackBuffer = uxTimerTaskStack;
278+
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
279+
}
280+
281+
#endif /* configUSE_TIMERS >= 1 */
282+
283+
#endif /* configSUPPORT_STATIC_ALLOCATION >= 1 */

0 commit comments

Comments
 (0)