diff --git a/minimal_freertos_example/CMakeLists.txt b/minimal_freertos_example/CMakeLists.txt new file mode 100644 index 00000000000..533343b13be --- /dev/null +++ b/minimal_freertos_example/CMakeLists.txt @@ -0,0 +1,39 @@ +cmake_minimum_required(VERSION 3.15) + +set(PROJECT_NAME example) + +project(${PROJECT_NAME}) + +set(FREERTOS_KERNEL_PATH "../") + +# Add the freertos_config for FreeRTOS-Kernel +add_library(freertos_config INTERFACE) + +target_include_directories(freertos_config + INTERFACE + ./ + ../sample_configuration +) + +# Select the heap port. values between 1-4 will pick a heap. +# set(FREERTOS_HEAP "40" CACHE STRING "" FORCE) + +# Select the native compile PORT +set(FREERTOS_PORT "TEMPLATE" CACHE STRING "" FORCE) + +# bring in the kernel +#add_subdirectory(${FREERTOS_KERNEL_PATH}) + +# Adding the FreeRTOS-Kernel subdirectory +add_subdirectory(${FREERTOS_KERNEL_PATH} ${CMAKE_CURRENT_BINARY_DIR}/FreeRTOS-Kernel) + +add_executable(${PROJECT_NAME} + main.c +) + +target_include_directories(${PROJECT_NAME} + PRIVATE + ${CMAKE_CURRENT_LIST_DIR} +) + +target_link_libraries(${PROJECT_NAME} freertos_kernel freertos_config) \ No newline at end of file diff --git a/minimal_freertos_example/main.c b/minimal_freertos_example/main.c new file mode 100644 index 00000000000..e70816fefe5 --- /dev/null +++ b/minimal_freertos_example/main.c @@ -0,0 +1,95 @@ +/* + * FreeRTOS Kernel + * Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * SPDX-License-Identifier: MIT + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + * https://www.FreeRTOS.org + * https://github.com/FreeRTOS + * + */ + +/* This is a simple main that will start freertos and run a periodic task */ +/* if compiled with the template port, this project will do nothing. */ + +#include +#include +#include +#include +#include + +#include + +StackType_t exampleTaskStack[configMINIMAL_STACK_SIZE]; +StaticTask_t exampleTaskTCB; + +void exampleTask(void *parameters) +{ + for (;;) + { + // Example Task Code + vTaskDelay(100); // delay 100 ticks + } +} + +int main(void) +{ + printf("Example FreeRTOS Project\n"); + + xTaskCreateStatic(exampleTask, "example", configMINIMAL_STACK_SIZE, NULL, configMAX_PRIORITIES - 1, exampleTaskStack, &exampleTaskTCB); + + vTaskStartScheduler(); + + for (;;) // should never get here. + { + } + return 0; +} + +void vApplicationStackOverflowHook(TaskHandle_t xTask, + char *pcTaskName) +{ +} + +void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer, + StackType_t **ppxTimerTaskStackBuffer, + uint32_t *pulTimerTaskStackSize) +{ + static StaticTask_t xTimerTaskTCB; + static StackType_t uxTimerTaskStack[configTIMER_TASK_STACK_DEPTH]; + + *ppxTimerTaskTCBBuffer = &xTimerTaskTCB; + + *ppxTimerTaskStackBuffer = uxTimerTaskStack; + + *pulTimerTaskStackSize = sizeof(uxTimerTaskStack) / sizeof(*uxTimerTaskStack); +} + +void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, + StackType_t **ppxIdleTaskStackBuffer, + uint32_t *pulIdleTaskStackSize) +{ + static StaticTask_t xIdleTaskTCB; + static StackType_t uxIdleTaskStack[configMINIMAL_STACK_SIZE]; + + *ppxIdleTaskTCBBuffer = &xIdleTaskTCB; + *ppxIdleTaskStackBuffer = uxIdleTaskStack; + *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; +} diff --git a/minimal_freertos_example/readme.md b/minimal_freertos_example/readme.md new file mode 100644 index 00000000000..91365a625e3 --- /dev/null +++ b/minimal_freertos_example/readme.md @@ -0,0 +1,8 @@ +# Scan Target +A simple project that compiles the template port to exercise the static analysis tools. This will not produce a working FreeRTOS project but it does serve to compile all the FreeRTOS components. + +# Building + +# Scanning + +