summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorActoryOu <ousc@amazon.com>2023-03-06 15:47:27 +0800
committerGitHub <noreply@github.com>2023-03-06 13:17:27 +0530
commit67911f83a6b4caa5ca3fa1c99ed4e8e136a1d616 (patch)
tree65f9c8a2a229a7b39f53759bdebe29d9ad326afc
parent93a35f87d2afa8e531b0d75e35431755cb3eb438 (diff)
downloadfreertos-git-67911f83a6b4caa5ca3fa1c99ed4e8e136a1d616.tar.gz
Create SMP on target test framework. (#911)
* Framework initialization. * Move testRunner.c to test case subfolder. * Update README doc and formatting. * Add default configurations in test_config.h. * Fix License & formatting check. * Fix typo. * Move setup/teardown functions to main.c file. * Move setup/teardown functions back. * Update README doc. * Patch for comments. * Correct test runner file name. * Move test_config.h to the end of FreeRTOSConfig.h. * Add undef in test_config.h and description in README doc. * Correct the file format. * Fix chinglee-iot comments. * Code review suggestions Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> * Fix spell check Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> --------- Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com> Co-authored-by: Gaurav Aggarwal <aggarg@amazon.com>
-rw-r--r--FreeRTOS/Test/Target/boards/pico/CMakeLists.txt34
-rw-r--r--FreeRTOS/Test/Target/boards/pico/FreeRTOSConfig.h140
-rw-r--r--FreeRTOS/Test/Target/boards/pico/FreeRTOS_Kernel_import.cmake63
-rw-r--r--FreeRTOS/Test/Target/boards/pico/main.c123
-rw-r--r--FreeRTOS/Test/Target/boards/pico/pico_sdk_import.cmake89
-rw-r--r--FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/CMakeLists.txt33
-rw-r--r--FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/multiple_tasks_running_test_runner.c76
-rw-r--r--FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/multiple_tasks_running.c156
-rw-r--r--FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/test_config.h64
-rw-r--r--FreeRTOS/Test/Target/tests/smp/template/README.md38
-rw-r--r--FreeRTOS/Test/Target/tests/smp/template/test_config.h57
-rw-r--r--FreeRTOS/Test/Target/tests/smp/template/test_name.c97
-rw-r--r--lexicon.txt1
13 files changed, 971 insertions, 0 deletions
diff --git a/FreeRTOS/Test/Target/boards/pico/CMakeLists.txt b/FreeRTOS/Test/Target/boards/pico/CMakeLists.txt
new file mode 100644
index 000000000..c4dffb3dc
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/CMakeLists.txt
@@ -0,0 +1,34 @@
+# Note that this file can be used as a top level CMakeLists.txt to build all the Demos (it includes
+# them all, but they are usable in their own right, which is why no common work is done here)
+
+# The tests are defined here: https://quip-amazon.com/78LdAeL2txGu/Test-Plan
+
+cmake_minimum_required(VERSION 3.13)
+
+set(UNITY_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../CMock/CMock/vendor/unity)
+
+include(pico_sdk_import.cmake)
+
+PROJECT(Tests)
+
+include(CTest)
+
+add_library(unity STATIC
+ "${UNITY_DIR}/src/unity.c")
+target_include_directories(unity PUBLIC
+ "${UNITY_DIR}/src/")
+
+# Find all subdirectories in tests folder then add them by add_subdirectory
+file(GLOB_RECURSE SUBDIRS_TESTS_FILES tests/*)
+SET(test_dir_list "")
+
+foreach(file_name ${SUBDIRS_TESTS_FILES})
+ get_filename_component( dir_path ${file_name} PATH )
+ LIST( APPEND test_dir_list ${dir_path})
+endforeach()
+LIST(REMOVE_DUPLICATES test_dir_list)
+
+foreach(dir_name ${test_dir_list})
+ message( STATUS "add subdirectory " ${dir_name} )
+ add_subdirectory( ${dir_name} )
+endforeach() \ No newline at end of file
diff --git a/FreeRTOS/Test/Target/boards/pico/FreeRTOSConfig.h b/FreeRTOS/Test/Target/boards/pico/FreeRTOSConfig.h
new file mode 100644
index 000000000..a947b7fde
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/FreeRTOSConfig.h
@@ -0,0 +1,140 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+/*-----------------------------------------------------------
+* Application specific definitions.
+*
+* These definitions should be adjusted for your particular hardware and
+* application requirements.
+*
+* THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.
+*
+* See http://www.freertos.org/a00110.html
+*----------------------------------------------------------*/
+
+/* Scheduler Related */
+#define configUSE_TICKLESS_IDLE 0
+#define configUSE_IDLE_HOOK 0
+#define configUSE_TICK_HOOK 1
+#define configTICK_RATE_HZ ( ( TickType_t ) 1000 )
+#define configMAX_PRIORITIES 32
+#define configMINIMAL_STACK_SIZE ( configSTACK_DEPTH_TYPE ) 256
+#define configUSE_16_BIT_TICKS 0
+#define configIDLE_SHOULD_YIELD 1
+
+/* Synchronization Related */
+#define configUSE_MUTEXES 1
+#define configUSE_RECURSIVE_MUTEXES 1
+#define configUSE_APPLICATION_TASK_TAG 0
+#define configUSE_COUNTING_SEMAPHORES 1
+#define configQUEUE_REGISTRY_SIZE 8
+#define configUSE_QUEUE_SETS 1
+#define configUSE_TIME_SLICING 1
+#define configUSE_NEWLIB_REENTRANT 0
+#define configENABLE_BACKWARD_COMPATIBILITY 0
+#define configNUM_THREAD_LOCAL_STORAGE_POINTERS 5
+
+/* System */
+#define configSTACK_DEPTH_TYPE uint32_t
+#define configMESSAGE_BUFFER_LENGTH_TYPE size_t
+
+/* Memory allocation related definitions. */
+#define configSUPPORT_STATIC_ALLOCATION 0
+#define configSUPPORT_DYNAMIC_ALLOCATION 1
+#define configTOTAL_HEAP_SIZE ( 128 * 1024 )
+#define configAPPLICATION_ALLOCATED_HEAP 0
+
+/* Hook function related definitions. */
+#define configCHECK_FOR_STACK_OVERFLOW 2
+#define configUSE_MALLOC_FAILED_HOOK 1
+#define configUSE_DAEMON_TASK_STARTUP_HOOK 0
+
+/* Run time and task stats gathering related definitions. */
+#define configGENERATE_RUN_TIME_STATS 0
+#define configUSE_TRACE_FACILITY 1
+#define configUSE_STATS_FORMATTING_FUNCTIONS 0
+
+/* Co-routine related definitions. */
+#define configUSE_CO_ROUTINES 0
+#define configMAX_CO_ROUTINE_PRIORITIES 1
+
+/* Software timer related definitions. */
+#define configUSE_TIMERS 1
+#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 )
+#define configTIMER_QUEUE_LENGTH 10
+#define configTIMER_TASK_STACK_DEPTH 1024
+
+/* Interrupt nesting behaviour configuration. */
+
+/*
+ #define configKERNEL_INTERRUPT_PRIORITY [dependent of processor]
+ #define configMAX_SYSCALL_INTERRUPT_PRIORITY [dependent on processor and application]
+ #define configMAX_API_CALL_INTERRUPT_PRIORITY [dependent on processor and application]
+ */
+
+/* SMP port only */
+#define configNUMBER_OF_CORES 2
+#define configTICK_CORE 1
+#define configRUN_MULTIPLE_PRIORITIES 1
+#define configUSE_CORE_AFFINITY 1
+#define configUSE_MINIMAL_IDLE_HOOK 0
+#define configUSE_TASK_PREEMPTION_DISABLE 0
+
+/* RP2040 specific */
+#define configSUPPORT_PICO_SYNC_INTEROP 1
+#define configSUPPORT_PICO_TIME_INTEROP 1
+
+#include <assert.h>
+/* Define to trap errors during development. */
+#define configASSERT( x ) assert( x )
+
+/* Set the following definitions to 1 to include the API function, or zero
+ * to exclude the API function. */
+#define INCLUDE_vTaskPrioritySet 1
+#define INCLUDE_uxTaskPriorityGet 1
+#define INCLUDE_vTaskDelete 1
+#define INCLUDE_vTaskSuspend 1
+#define INCLUDE_vTaskDelayUntil 1
+#define INCLUDE_vTaskDelay 1
+#define INCLUDE_xTaskGetSchedulerState 1
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+#define INCLUDE_xTaskGetIdleTaskHandle 1
+#define INCLUDE_eTaskGetState 1
+#define INCLUDE_xTimerPendFunctionCall 1
+#define INCLUDE_xTaskAbortDelay 1
+#define INCLUDE_xTaskGetHandle 1
+#define INCLUDE_xTaskResumeFromISR 1
+#define INCLUDE_xQueueGetMutexHolder 1
+/* A header file that defines trace macro can be included here. */
+
+#include "test_config.h"
+
+#endif /* FREERTOS_CONFIG_H */
diff --git a/FreeRTOS/Test/Target/boards/pico/FreeRTOS_Kernel_import.cmake b/FreeRTOS/Test/Target/boards/pico/FreeRTOS_Kernel_import.cmake
new file mode 100644
index 000000000..30f457588
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/FreeRTOS_Kernel_import.cmake
@@ -0,0 +1,63 @@
+# This is a copy of <FREERTOS_KERNEL_PATH>/portable/ThirdParty/GCC/RP2040/FREERTOS_KERNEL_import.cmake
+
+# This can be dropped into an external project to help locate the FreeRTOS kernel
+# It should be include()ed prior to project(). Alternatively this file may
+# or the CMakeLists.txt in this directory may be included or added via add_subdirectory
+# respectively.
+
+if (DEFINED ENV{FREERTOS_KERNEL_PATH} AND (NOT FREERTOS_KERNEL_PATH))
+ set(FREERTOS_KERNEL_PATH $ENV{FREERTOS_KERNEL_PATH})
+ message("Using FREERTOS_KERNEL_PATH from environment ('${FREERTOS_KERNEL_PATH}')")
+endif ()
+
+set(FREERTOS_KERNEL_RP2040_RELATIVE_PATH "portable/ThirdParty/GCC/RP2040")
+# undo the above
+set(FREERTOS_KERNEL_RP2040_BACK_PATH "../../../..")
+
+if (NOT FREERTOS_KERNEL_PATH)
+ # check if we are inside the FreeRTOS kernel tree (i.e. this file has been included directly)
+ get_filename_component(_ACTUAL_PATH ${CMAKE_CURRENT_LIST_DIR} REALPATH)
+ get_filename_component(_POSSIBLE_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} REALPATH)
+ if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
+ get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
+ endif()
+ if (_ACTUAL_PATH STREQUAL _POSSIBLE_PATH)
+ get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/${FREERTOS_KERNEL_RP2040_BACK_PATH} REALPATH)
+ message("Setting FREERTOS_KERNEL_PATH to ${FREERTOS_KERNEL_PATH} based on location of FreeRTOS-Kernel-import.cmake")
+ elseif (PICO_SDK_PATH AND EXISTS "${PICO_SDK_PATH}/../FreeRTOS-Kernel")
+ set(FREERTOS_KERNEL_PATH ${PICO_SDK_PATH}/../FreeRTOS-Kernel)
+ message("Defaulting FREERTOS_KERNEL_PATH as sibling of PICO_SDK_PATH: ${FREERTOS_KERNEL_PATH}")
+ endif()
+endif ()
+
+if (NOT FREERTOS_KERNEL_PATH)
+ foreach(POSSIBLE_SUFFIX Source FreeRTOS-Kernel FreeRTOS/Source)
+ # check if FreeRTOS-Kernel exists under directory that included us
+ set(SEARCH_ROOT ${CMAKE_CURRENT_SOURCE_DIR}})
+ set(SEARCH_ROOT ../../../..)
+ get_filename_component(_POSSIBLE_PATH ${SEARCH_ROOT}/${POSSIBLE_SUFFIX} REALPATH)
+ if (EXISTS ${_POSSIBLE_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
+ get_filename_component(FREERTOS_KERNEL_PATH ${_POSSIBLE_PATH} REALPATH)
+ message("Setting FREERTOS_KERNEL_PATH to '${FREERTOS_KERNEL_PATH}' found relative to enclosing project")
+ break()
+ endif()
+ endforeach()
+endif()
+
+if (NOT FREERTOS_KERNEL_PATH)
+ message(FATAL_ERROR "FreeRTOS location was not specified. Please set FREERTOS_KERNEL_PATH.")
+endif()
+
+set(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" CACHE PATH "Path to the FreeRTOS Kernel")
+
+get_filename_component(FREERTOS_KERNEL_PATH "${FREERTOS_KERNEL_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
+if (NOT EXISTS ${FREERTOS_KERNEL_PATH})
+ message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' not found")
+endif()
+if (NOT EXISTS ${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/CMakeLists.txt)
+ message(FATAL_ERROR "Directory '${FREERTOS_KERNEL_PATH}' does not contain an RP2040 port here: ${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}")
+endif()
+set(FREERTOS_KERNEL_PATH ${FREERTOS_KERNEL_PATH} CACHE PATH "Path to the FreeRTOS_KERNEL" FORCE)
+
+add_subdirectory(${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH} FREERTOS_KERNEL)
+set(TARGET_INCLUDE_PATH ${FREERTOS_KERNEL_PATH}/${FREERTOS_KERNEL_RP2040_RELATIVE_PATH}/include) \ No newline at end of file
diff --git a/FreeRTOS/Test/Target/boards/pico/main.c b/FreeRTOS/Test/Target/boards/pico/main.c
new file mode 100644
index 000000000..b17dcacce
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/main.c
@@ -0,0 +1,123 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+/**
+ * @file main.c
+ * @brief The implementation of main function to start test runner task.
+ *
+ * Procedure:
+ * - Initialize environment.
+ * - Run the test case.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h" /* Must come first. */
+#include "task.h" /* RTOS task related API prototypes. */
+
+/* Unity includes. */
+#include "unity.h"
+
+/* Pico includes. */
+#include "pico/multicore.h"
+#include "pico/stdlib.h"
+
+/*-----------------------------------------------------------*/
+
+/**
+ * Initialize required peripherals.
+ */
+static void prvInitializeHardware( void );
+
+/**
+ * @brief Run test.
+ */
+extern void vRunTest( void );
+/*-----------------------------------------------------------*/
+
+static void prvInitializeHardware( void )
+{
+ /* Needed for printf. */
+ stdio_init_all();
+
+ while( !stdio_usb_connected() )
+ {
+ sleep_ms( 250 );
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationStackOverflowHook( TaskHandle_t xTask,
+ char * pcTaskName )
+{
+ ( void ) pcTaskName;
+ ( void ) xTask;
+
+ printf( "ERROR: Stack Overflow\n\0" );
+
+ /* Run time stack overflow checking is performed if
+ * configCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2. This hook
+ * function is called if a stack overflow is detected. pxCurrentTCB can be
+ * inspected in the debugger if the task name passed into this function is
+ * corrupt. */
+ for( ; ; )
+ {
+ /* Always running, put asm here to avoid optimization by compiler. */
+ __asm volatile ( "nop" );
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationTickHook( void )
+{
+}
+/*-----------------------------------------------------------*/
+
+void vApplicationMallocFailedHook( void )
+{
+ printf( "ERROR: Malloc Failed\n\0" );
+
+ for( ; ; )
+ {
+ /* Always running, put asm here to avoid optimization by compiler. */
+ __asm volatile ( "nop" );
+ }
+}
+/*-----------------------------------------------------------*/
+
+int main( void )
+{
+ prvInitializeHardware();
+
+ vRunTest();
+
+ vTaskStartScheduler();
+
+ /* Should never reach here. */
+ panic_unsupported();
+
+ return 0;
+}
+/*-----------------------------------------------------------*/
diff --git a/FreeRTOS/Test/Target/boards/pico/pico_sdk_import.cmake b/FreeRTOS/Test/Target/boards/pico/pico_sdk_import.cmake
new file mode 100644
index 000000000..12ac53d01
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/pico_sdk_import.cmake
@@ -0,0 +1,89 @@
+# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
+
+# This can be dropped into an external project to help locate this SDK
+# It should be include()ed prior to project()
+
+set(BOARD_LINK_LIBRARIES pico_stdlib pico_multicore unity)
+set(BOARD_DEFINES PICO_STACK_SIZE=0x1000 TARGET_RASPBERRY_PICO=1)
+set(BOARD_INCLUDE_PATHS "${UNITY_DIR}/src/"
+ ${CMAKE_CURRENT_LIST_DIR})
+set(BOARD_LIBRARY_DIR ${CMAKE_CURRENT_LIST_DIR} CACHE INTERNAL "")
+
+if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
+ set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
+ message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
+endif ()
+
+if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
+ set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
+ message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
+endif ()
+
+if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
+ set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
+ message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
+endif ()
+
+set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
+set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
+set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
+
+if (NOT PICO_SDK_PATH)
+ if (PICO_SDK_FETCH_FROM_GIT)
+ include(FetchContent)
+ set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
+ if (PICO_SDK_FETCH_FROM_GIT_PATH)
+ get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
+ endif ()
+ FetchContent_Declare(
+ pico_sdk
+ GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
+ GIT_TAG master
+ )
+ if (NOT pico_sdk)
+ message("Downloading Raspberry Pi Pico SDK")
+ FetchContent_Populate(pico_sdk)
+ set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
+ endif ()
+ set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
+ else ()
+ message(FATAL_ERROR
+ "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
+ )
+ endif ()
+endif ()
+
+get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
+if (NOT EXISTS ${PICO_SDK_PATH})
+ message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
+endif ()
+
+set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
+if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
+ message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
+endif ()
+
+set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
+
+include(${PICO_SDK_INIT_CMAKE_FILE})
+
+include(${CMAKE_CURRENT_LIST_DIR}/FreeRTOS_Kernel_import.cmake)
+
+set(BOARD_INC_PATHS ${CMAKE_CURRENT_LIST_DIR} ${TARGET_INCLUDE_PATH})
+
+pico_sdk_init()
+
+# one of the following directories need be included, why is it not?
+# /home/ubuntu/pico/pico-sdk/src/host/pico_multicore/include
+# /home/ubuntu/pico/pico-sdk/src/rp2_common/pico_multicore/include
+
+get_cmake_property(_variableNames VARIABLES)
+list (SORT _variableNames)
+foreach (_variableName ${_variableNames})
+ message(STATUS "${_variableName}=${${_variableName}}")
+endforeach()
+
+macro(enable_board_functions EXECUTABLE_NAME)
+ pico_enable_stdio_usb(${EXECUTABLE_NAME} 1)
+ pico_add_extra_outputs(${EXECUTABLE_NAME})
+endmacro() \ No newline at end of file
diff --git a/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/CMakeLists.txt b/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/CMakeLists.txt
new file mode 100644
index 000000000..7a84dcf13
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 3.13)
+
+project(example C CXX ASM)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
+
+set(TEST_INCLUDE_PATHS ${CMAKE_CURRENT_LIST_DIR}/../../../../../tests/smp/multiple_tasks_running)
+set(TEST_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/../../../../../tests/smp/multiple_tasks_running)
+
+add_library(multiple_tasks_running INTERFACE)
+target_sources(multiple_tasks_running INTERFACE
+ ${BOARD_LIBRARY_DIR}/main.c
+ ${CMAKE_CURRENT_LIST_DIR}/multiple_tasks_running_test_runner.c
+ ${TEST_SOURCE_DIR}/multiple_tasks_running.c)
+
+target_include_directories(multiple_tasks_running INTERFACE
+ ${CMAKE_CURRENT_LIST_DIR}/../../..
+ ${TEST_INCLUDE_PATHS}
+ )
+
+target_link_libraries(multiple_tasks_running INTERFACE
+ FreeRTOS-Kernel
+ FreeRTOS-Kernel-Heap4
+ ${BOARD_LINK_LIBRARIES})
+
+add_executable(test_multiple_tasks_running)
+enable_board_functions(test_multiple_tasks_running)
+target_link_libraries(test_multiple_tasks_running multiple_tasks_running)
+target_include_directories(test_multiple_tasks_running PUBLIC
+ ${BOARD_INCLUDE_PATHS})
+target_compile_definitions(test_multiple_tasks_running PRIVATE
+ ${BOARD_DEFINES}
+)
diff --git a/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/multiple_tasks_running_test_runner.c b/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/multiple_tasks_running_test_runner.c
new file mode 100644
index 000000000..fd2e299d2
--- /dev/null
+++ b/FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running/multiple_tasks_running_test_runner.c
@@ -0,0 +1,76 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+/**
+ * @file multiple_tasks_running_test_runner.c
+ * @brief The implementation of test runner task which runs the test.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h" /* Must come first. */
+#include "task.h" /* RTOS task related API prototypes. */
+
+/* Unity includes. */
+#include "unity.h"
+
+/* Pico includes. */
+#include "pico/multicore.h"
+#include "pico/stdlib.h"
+
+/*-----------------------------------------------------------*/
+
+/**
+ * @brief The task that runs the test.
+ */
+static void prvTestRunnerTask( void * pvParameters );
+
+/**
+ * @brief The test case to run.
+ */
+extern void vRunMultipleTasksRunningTest( void );
+/*-----------------------------------------------------------*/
+
+static void prvTestRunnerTask( void * pvParameters )
+{
+ ( void ) pvParameters;
+
+ /* Run test case. */
+ vRunMultipleTasksRunningTest();
+
+ vTaskDelete( NULL );
+}
+/*-----------------------------------------------------------*/
+
+void vRunTest( void )
+{
+ xTaskCreate( prvTestRunnerTask,
+ "testRunner",
+ configMINIMAL_STACK_SIZE,
+ NULL,
+ configMAX_PRIORITIES - 1,
+ NULL );
+}
+/*-----------------------------------------------------------*/
diff --git a/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/multiple_tasks_running.c b/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/multiple_tasks_running.c
new file mode 100644
index 000000000..035e2699d
--- /dev/null
+++ b/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/multiple_tasks_running.c
@@ -0,0 +1,156 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+/**
+ * @file multiple_tasks_running.c
+ * @brief The user shall be able to schedule tasks across multiple identical processor cores
+ * with one instance of FreeRTOS scheduler.
+ *
+ * Procedure:
+ * - Create ( num of cores - 1 ) tasks and keep them in busy loop.
+ * Expected:
+ * - All tasks are in running state.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h" /* Must come first. */
+#include "task.h" /* RTOS task related API prototypes. */
+
+/* Unity includes. */
+#include "unity.h"
+/*-----------------------------------------------------------*/
+
+#ifndef TEST_CONFIG_H
+ #error test_config.h must be included at the end of FreeRTOSConfig.h.
+#endif
+
+#if ( configNUMBER_OF_CORES < 2 )
+ #error This test is for FreeRTOS SMP and therefore, requires at least 2 cores.
+#endif /* if configNUMBER_OF_CORES != 2 */
+
+#if ( configRUN_MULTIPLE_PRIORITIES != 1 )
+ #error configRUN_MULTIPLE_PRIORITIES must be set to 1 for this test.
+#endif /* if ( configRUN_MULTIPLE_PRIORITIES != 1 ) */
+
+#if ( configMAX_PRIORITIES <= 2 )
+ #error configMAX_PRIORITIES must be larger than 2 to avoid scheduling idle tasks unexpectedly.
+#endif /* if ( configMAX_PRIORITIES <= 2 ) */
+/*-----------------------------------------------------------*/
+
+/**
+ * @brief Function that implements a never blocking FreeRTOS task.
+ */
+static void prvEverRunningTask( void * pvParameters );
+
+/**
+ * @brief Test case "Multiple Tasks Running".
+ */
+static void Test_MultipleTasksRunning( void );
+/*-----------------------------------------------------------*/
+
+/**
+ * @brief Handles of the tasks created in this test.
+ */
+static TaskHandle_t xTaskHandles[ configNUMBER_OF_CORES - 1 ];
+/*-----------------------------------------------------------*/
+
+static void Test_MultipleTasksRunning( void )
+{
+ int i;
+ eTaskState xTaskState;
+
+ /* Delay for other cores to run tasks. */
+ vTaskDelay( pdMS_TO_TICKS( 10 ) );
+
+ /* Ensure that all the tasks are running. */
+ for( i = 0; i < ( configNUMBER_OF_CORES - 1 ); i++ )
+ {
+ xTaskState = eTaskGetState( xTaskHandles[ i ] );
+
+ TEST_ASSERT_EQUAL_MESSAGE( eRunning, xTaskState, "Task is not running." );
+ }
+}
+/*-----------------------------------------------------------*/
+
+static void prvEverRunningTask( void * pvParameters )
+{
+ /* Silence warnings about unused parameters. */
+ ( void ) pvParameters;
+
+ for( ; ; )
+ {
+ /* Always running, put asm here to avoid optimization by compiler. */
+ __asm volatile ( "nop" );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* Runs before every test, put init calls here. */
+void setUp( void )
+{
+ int i;
+ BaseType_t xTaskCreationResult;
+
+ /* Create configNUMBER_OF_CORES - 1 low priority tasks. */
+ for( i = 0; i < ( configNUMBER_OF_CORES - 1 ); i++ )
+ {
+ xTaskCreationResult = xTaskCreate( prvEverRunningTask,
+ "EverRunning",
+ configMINIMAL_STACK_SIZE,
+ NULL,
+ configMAX_PRIORITIES - 2,
+ &( xTaskHandles[ i ] ) );
+
+ TEST_ASSERT_EQUAL_MESSAGE( pdPASS, xTaskCreationResult, "Task creation failed." );
+ }
+}
+/*-----------------------------------------------------------*/
+
+/* Runs after every test, put clean-up calls here. */
+void tearDown( void )
+{
+ int i;
+
+ /* Delete all the tasks. */
+ for( i = 0; i < ( configNUMBER_OF_CORES - 1 ); i++ )
+ {
+ if( xTaskHandles[ i ] != NULL )
+ {
+ vTaskDelete( xTaskHandles[ i ] );
+ }
+ }
+}
+/*-----------------------------------------------------------*/
+
+void vRunMultipleTasksRunningTest( void )
+{
+ UNITY_BEGIN();
+
+ RUN_TEST( Test_MultipleTasksRunning );
+
+ UNITY_END();
+}
+/*-----------------------------------------------------------*/
diff --git a/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/test_config.h b/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/test_config.h
new file mode 100644
index 000000000..a3d1d7245
--- /dev/null
+++ b/FreeRTOS/Test/Target/tests/smp/multiple_tasks_running/test_config.h
@@ -0,0 +1,64 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+#ifndef TEST_CONFIG_H
+#define TEST_CONFIG_H
+
+/* This file must be included at the end of the FreeRTOSConfig.h. It contains
+ * any FreeRTOS specific configurations that the test requires. */
+
+#ifdef configRUN_MULTIPLE_PRIORITIES
+ #undef configRUN_MULTIPLE_PRIORITIES
+#endif /* ifdef configRUN_MULTIPLE_PRIORITIES */
+
+#ifdef configUSE_CORE_AFFINITY
+ #undef configUSE_CORE_AFFINITY
+#endif /* ifdef configUSE_CORE_AFFINITY */
+
+#ifdef configUSE_MINIMAL_IDLE_HOOK
+ #undef configUSE_MINIMAL_IDLE_HOOK
+#endif /* ifdef configUSE_MINIMAL_IDLE_HOOK */
+
+#ifdef configUSE_TASK_PREEMPTION_DISABLE
+ #undef configUSE_TASK_PREEMPTION_DISABLE
+#endif /* ifdef configUSE_TASK_PREEMPTION_DISABLE */
+
+#ifdef configUSE_TIME_SLICING
+ #undef configUSE_TIME_SLICING
+#endif /* ifdef configUSE_TIME_SLICING */
+
+#ifdef configUSE_PREEMPTION
+ #undef configUSE_PREEMPTION
+#endif /* ifdef configUSE_PREEMPTION */
+
+#define configRUN_MULTIPLE_PRIORITIES 1
+#define configUSE_CORE_AFFINITY 0
+#define configUSE_MINIMAL_IDLE_HOOK 0
+#define configUSE_TASK_PREEMPTION_DISABLE 0
+#define configUSE_TIME_SLICING 0
+#define configUSE_PREEMPTION 0
+
+#endif /* ifndef TEST_CONFIG_H */
diff --git a/FreeRTOS/Test/Target/tests/smp/template/README.md b/FreeRTOS/Test/Target/tests/smp/template/README.md
new file mode 100644
index 000000000..845255414
--- /dev/null
+++ b/FreeRTOS/Test/Target/tests/smp/template/README.md
@@ -0,0 +1,38 @@
+# How to add a new test?
+
+1. Create a directory in the `FreeRTOS/Test/Target/tests` directory which will
+ contain the test. For example: `FreeRTOS/Test/Target/tests/smp/multiple_tasks_running`.
+1. Copy the `test_name.c` and `test_config.h` files from this template
+ directory to the newly created directory above.
+1. Rename the `test_name.c` according to the test name.
+1. Implement the test in the above test file.
+1. Add any FreeRTOS specific configuration required for the test to `test_config.h`.
+
+# How to add a new target?
+
+1. Create a target specific directory in the `FreeRTOS/Test/Target/boards` directory.
+1. Create required build files.
+ - Include `test_config.h` in `FreeRTOSConfig.h` at the end.
+ - Ensure that the following configurations are not defined in `FreeRTOSConfig.h` as those are defined in `test_config.h`:
+ - `configRUN_MULTIPLE_PRIORITIES`
+ - `configUSE_CORE_AFFINITY`
+ - `configUSE_MINIMAL_IDLE_HOOK`
+ - `configUSE_TASK_PREEMPTION_DISABLE`
+ - `configUSE_TIME_SLICING`
+ - `configUSE_PREEMPTION`
+
+# How to add a test to a target
+
+1. Create a directory in the target's directory which will contain
+ the test. For example: `FreeRTOS/Test/Target/boards/pico/tests/smp/multiple_tasks_running`.
+1. Create a C file and invoke the test case from a task. The invocation
+ usually looks like the following:
+ ```c
+ void prvTestRunnerTask( void * pvParameters )
+ {
+ /* Invoke the test case. */
+ vRunTestCaseName();
+ }
+ ```
+1. Add the file created above and the test case file to the build system used
+ for the target.
diff --git a/FreeRTOS/Test/Target/tests/smp/template/test_config.h b/FreeRTOS/Test/Target/tests/smp/template/test_config.h
new file mode 100644
index 000000000..86dfb51eb
--- /dev/null
+++ b/FreeRTOS/Test/Target/tests/smp/template/test_config.h
@@ -0,0 +1,57 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+#ifndef TEST_CONFIG_H
+#define TEST_CONFIG_H
+
+/* This file must be included at the end of the FreeRTOSConfig.h. It contains
+ * any FreeRTOS specific configurations that the test requires. */
+
+#ifdef configRUN_MULTIPLE_PRIORITIES
+ #undef configRUN_MULTIPLE_PRIORITIES
+#endif /* ifdef configRUN_MULTIPLE_PRIORITIES */
+
+#ifdef configUSE_CORE_AFFINITY
+ #undef configUSE_CORE_AFFINITY
+#endif /* ifdef configUSE_CORE_AFFINITY */
+
+#ifdef configUSE_MINIMAL_IDLE_HOOK
+ #undef configUSE_MINIMAL_IDLE_HOOK
+#endif /* ifdef configUSE_MINIMAL_IDLE_HOOK */
+
+#ifdef configUSE_TASK_PREEMPTION_DISABLE
+ #undef configUSE_TASK_PREEMPTION_DISABLE
+#endif /* ifdef configUSE_TASK_PREEMPTION_DISABLE */
+
+#ifdef configUSE_TIME_SLICING
+ #undef configUSE_TIME_SLICING
+#endif /* ifdef configUSE_TIME_SLICING */
+
+#ifdef configUSE_PREEMPTION
+ #undef configUSE_PREEMPTION
+#endif /* ifdef configUSE_PREEMPTION */
+
+#endif /* ifndef TEST_CONFIG_H */
diff --git a/FreeRTOS/Test/Target/tests/smp/template/test_name.c b/FreeRTOS/Test/Target/tests/smp/template/test_name.c
new file mode 100644
index 000000000..6ce7b7d4c
--- /dev/null
+++ b/FreeRTOS/Test/Target/tests/smp/template/test_name.c
@@ -0,0 +1,97 @@
+/*
+ * FreeRTOS V202212.00
+ * Copyright (C) 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved.
+ *
+ * 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
+ *
+ */
+
+/**
+ * @file test.c
+ * @brief Describe the test here briefly.
+ *
+ * Describe the test here in detail.
+ */
+
+/* Kernel includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* Unity testing includes. */
+#include "unity.h"
+
+/*-----------------------------------------------------------*/
+
+#if ( configNUMBER_OF_CORES < 2 )
+ #error This test is for FreeRTOS SMP and therefore, requires at least 2 cores.
+#endif
+
+#ifndef TEST_CONFIG_H
+ #error test_config.h must be included at the end of FreeRTOSConfig.h.
+#endif
+
+/*-----------------------------------------------------------*/
+
+/* Declare #defines used in this file here. */
+
+/*-----------------------------------------------------------*/
+
+/* Declare local functions used in this file here. */
+
+/*-----------------------------------------------------------*/
+
+/* Declare local variables used in this file here. */
+
+/*-----------------------------------------------------------*/
+
+/* Runs before every test, put init calls here. */
+void setUp( void )
+{
+ /* Create FreeRTOS resources required for the test. */
+}
+/*-----------------------------------------------------------*/
+
+/* Runs after every test, put clean-up calls here. */
+void tearDown( void )
+{
+ /* Delete all the FreeRTOS resources created in setUp. */
+}
+/*-----------------------------------------------------------*/
+
+void Test_TestCaseName( void )
+{
+ /* Perform any API call needed for the test. */
+
+ /* Verify the result. */
+}
+/*-----------------------------------------------------------*/
+
+/* Function that runs the test case. This function must be called
+ * from a FreeRTOS task. */
+void vRunTestCaseName( void )
+{
+ UNITY_BEGIN();
+
+ RUN_TEST( Test_TestCaseName );
+
+ UNITY_END();
+}
+/*-----------------------------------------------------------*/
diff --git a/lexicon.txt b/lexicon.txt
index 047589b57..f3574d543 100644
--- a/lexicon.txt
+++ b/lexicon.txt
@@ -1715,6 +1715,7 @@ phostname
php
phy
pic
+pico
pidr
pingreq
pingresp