/* | |
* Copyright 2017-2019 NXP | |
* All rights reserved. | |
* | |
* | |
* SPDX-License-Identifier: BSD-3-Clause | |
*/ | |
/* freertos_tasks_c_additions.h Rev. 1.3 */ | |
#ifndef FREERTOS_TASKS_C_ADDITIONS_H | |
#define FREERTOS_TASKS_C_ADDITIONS_H | |
#include <stdint.h> | |
#if (configUSE_TRACE_FACILITY == 0) | |
#error "configUSE_TRACE_FACILITY must be enabled" | |
#endif | |
#define FREERTOS_DEBUG_CONFIG_MAJOR_VERSION 1 | |
#define FREERTOS_DEBUG_CONFIG_MINOR_VERSION 3 | |
/* NOTE!! | |
* Default to a FreeRTOS version which didn't include these macros. FreeRTOS | |
* v7.5.3 is used here. | |
*/ | |
#ifndef tskKERNEL_VERSION_BUILD | |
#define tskKERNEL_VERSION_BUILD 3 | |
#endif | |
#ifndef tskKERNEL_VERSION_MINOR | |
#define tskKERNEL_VERSION_MINOR 5 | |
#endif | |
#ifndef tskKERNEL_VERSION_MAJOR | |
#define tskKERNEL_VERSION_MAJOR 7 | |
#endif | |
/* NOTE!! | |
* The configFRTOS_MEMORY_SCHEME macro describes the heap scheme using a value | |
* 1 - 5 which corresponds to the following schemes: | |
* | |
* heap_1 - the very simplest, does not permit memory to be freed | |
* heap_2 - permits memory to be freed, but not does coalescence adjacent free | |
* blocks. | |
* heap_3 - simply wraps the standard malloc() and free() for thread safety | |
* heap_4 - coalesces adjacent free blocks to avoid fragmentation. Includes | |
* absolute address placement option | |
* heap_5 - as per heap_4, with the ability to span the heap across | |
* multiple nonOadjacent memory areas | |
*/ | |
#ifndef configFRTOS_MEMORY_SCHEME | |
#define configFRTOS_MEMORY_SCHEME 3 /* thread safe malloc */ | |
#endif | |
#if ((configFRTOS_MEMORY_SCHEME > 5) || (configFRTOS_MEMORY_SCHEME < 1)) | |
#error "Invalid configFRTOS_MEMORY_SCHEME setting!" | |
#endif | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
extern const uint8_t FreeRTOSDebugConfig[]; | |
/* NOTES!! | |
* IAR documentation is confusing. It suggests the data must be statically | |
* linked, and the #pragma placed immediately before the symbol definition. | |
* The IAR supplied examples violate both "rules", so this is a best guess. | |
*/ | |
#if (tskKERNEL_VERSION_MAJOR >= 10) && (tskKERNEL_VERSION_MINOR >= 2) | |
#if defined(__GNUC__) | |
char *const portArch_Name __attribute__((section(".rodata"))) = portARCH_NAME; | |
#elif defined(__CC_ARM) || defined(__ARMCC_VERSION) | |
char *const portArch_Name __attribute__((used)) = portARCH_NAME; | |
#elif defined(__IAR_SYSTEMS_ICC__) | |
char *const portArch_Name = portARCH_NAME; | |
#pragma required=portArch_Name | |
#endif | |
#else | |
char *const portArch_Name = NULL; | |
#endif // tskKERNEL_VERSION_MAJOR | |
#if defined(__GNUC__) | |
const uint8_t FreeRTOSDebugConfig[] __attribute__((section(".rodata"))) = | |
#elif defined(__CC_ARM) || defined(__ARMCC_VERSION) | |
const uint8_t FreeRTOSDebugConfig[] __attribute__((used)) = | |
#elif defined(__IAR_SYSTEMS_ICC__) | |
#pragma required=FreeRTOSDebugConfig | |
const uint8_t FreeRTOSDebugConfig[] = | |
#endif | |
{ | |
FREERTOS_DEBUG_CONFIG_MAJOR_VERSION, | |
FREERTOS_DEBUG_CONFIG_MINOR_VERSION, | |
tskKERNEL_VERSION_MAJOR, | |
tskKERNEL_VERSION_MINOR, | |
tskKERNEL_VERSION_BUILD, | |
configFRTOS_MEMORY_SCHEME, | |
offsetof(struct tskTaskControlBlock, pxTopOfStack), | |
#if (tskKERNEL_VERSION_MAJOR > 8) | |
offsetof(struct tskTaskControlBlock, xStateListItem), | |
#else | |
offsetof(struct tskTaskControlBlock, xGenericListItem), | |
#endif | |
offsetof(struct tskTaskControlBlock, xEventListItem), | |
offsetof(struct tskTaskControlBlock, pxStack), | |
offsetof(struct tskTaskControlBlock, pcTaskName), | |
offsetof(struct tskTaskControlBlock, uxTCBNumber), | |
offsetof(struct tskTaskControlBlock, uxTaskNumber), | |
configMAX_TASK_NAME_LEN, | |
configMAX_PRIORITIES, | |
configENABLE_MPU, | |
configENABLE_FPU, | |
configENABLE_TRUSTZONE, | |
configRUN_FREERTOS_SECURE_ONLY, | |
0, // 32-bit align | |
0, 0, 0, 0 // padding | |
}; | |
#ifdef __cplusplus | |
} | |
#endif | |
#endif // FREERTOS_TASKS_C_ADDITIONS_H |