-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into ascii-encoding
- Loading branch information
Showing
14 changed files
with
1,517 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -60,7 +60,8 @@ | |
'.png', | ||
'.bat', | ||
'.sh', | ||
'.txt' | ||
'.txt', | ||
'.cmake' | ||
] | ||
|
||
KERNEL_ASM_EXTENSIONS = [ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
**/cmake-* | ||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
cmake_minimum_required(VERSION 3.13) | ||
|
||
if (NOT TARGET _FreeRTOS_kernel_inclusion_marker) | ||
add_library(_FreeRTOS_kernel_inclusion_marker INTERFACE) | ||
|
||
# Pull in PICO SDK (must be before project) | ||
include(pico_sdk_import.cmake) | ||
if (PICO_SDK_VERSION_STRING VERSION_LESS "1.2.0") | ||
message(FATAL_ERROR "Require at least Raspberry Pi Pico SDK version 1.2.0") | ||
endif() | ||
|
||
if (NOT FREERTOS_KERNEL_PATH) | ||
get_filename_component(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/../../../.. REALPATH) | ||
endif () | ||
|
||
message(DEBUG "FREERTOS_KERNEL_PATH is ${FREERTOS_KERNEL_PATH}") | ||
project(FreeRTOS-Kernel C CXX) | ||
|
||
set(CMAKE_C_STANDARD 11) | ||
set(CMAKE_CXX_STANDARD 17) | ||
|
||
pico_is_top_level_project(FREERTOS_KERNEL_TOP_LEVEL_PROJECT) | ||
|
||
# The real work gets done in library.cmake which is called at the end of pico_sdk_init | ||
list(APPEND PICO_SDK_POST_LIST_FILES ${CMAKE_CURRENT_LIST_DIR}/library.cmake) | ||
|
||
# We need to inject the following header file into ALL SDK files (which we do via the config header) | ||
list(APPEND PICO_CONFIG_HEADER_FILES ${CMAKE_CURRENT_LIST_DIR}/include/freertos_sdk_config.h) | ||
|
||
if (FREERTOS_KERNEL_TOP_LEVEL_PROJECT) | ||
message("FreeRTOS: initialize SDK since we're the top-level") | ||
# Initialize the SDK | ||
pico_sdk_init() | ||
else() | ||
set(PICO_SDK_POST_LIST_FILES ${PICO_SDK_POST_LIST_FILES} PARENT_SCOPE) | ||
set(PICO_CONFIG_HEADER_FILES ${PICO_CONFIG_HEADER_FILES} PARENT_SCOPE) | ||
set(FREERTOS_KERNEL_PATH ${FREERTOS_KERNEL_PATH} PARENT_SCOPE) | ||
endif() | ||
endif() | ||
|
62 changes: 62 additions & 0 deletions
62
portable/ThirdParty/GCC/RP2040/FreeRTOS_Kernel_import.cmake
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
# 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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
BSD-3-Clause License | ||
|
||
Copyright (c) 2020-2021 Raspberry Pi (Trading) Ltd. | ||
|
||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the | ||
following conditions are met: | ||
|
||
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following | ||
disclaimer. | ||
|
||
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following | ||
disclaimer in the documentation and/or other materials provided with the distribution. | ||
|
||
3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products | ||
derived from this software without specific prior written permission. | ||
|
||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, | ||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR | ||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
## Overview | ||
|
||
This directory provides a FreeRTOS-Kernel port that can be used with the Raspberry Pi Pico SDK. It supports: | ||
|
||
* Simple CMake INTERFACE libraries, to provide the FreeRTOS-Kernel and also the individual allocator types, without copying code into the user's project. | ||
* Running the FreeRTOS-Kernel and tasks on either core 0 or core 1 | ||
* Use of SDK synchronization primitives (such as mutexes, semaphores, queues from pico_sync) between FreeRTOS tasks and code executing on the other core, or in IRQ handlers. | ||
|
||
Note that a FreeRTOS SMP version of this port is also available in the FreeRTOS-Kernel smp branch, which additionally supports utilizing both RP2040 CPU cores for FreeRTOS tasks simultaneously. | ||
|
||
## Using this port | ||
|
||
Copy [FreeRTOS-Kernel-import.cmake](FreeRTOS-Kernel-import.cmake) into your project, and | ||
add: | ||
|
||
```cmake | ||
import(FreeRTOS_Kernel_import.cmake) | ||
``` | ||
|
||
below the usual import of `pico_sdk_import.cmake` | ||
|
||
This will find the FreeRTOS kernel if it is a direct sub-module of your project, or if you provide the `FREERTOS_KERNEL_PATH` variable in your environment or via `-DFREERTOS_KERNEL_PATH=/path/to/FreeRTOS-Kernel` on the CMake command line. | ||
|
||
## Advanced Configuration | ||
|
||
Some additional `config` options are defined [here](include/rp2040_config.h) which control some low level implementation details. | ||
|
||
## Known Limitations | ||
|
||
- Tickless idle has not currently been tested, and is likely non-functional |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
/* | ||
* FreeRTOS Kernel <DEVELOPMENT BRANCH> | ||
* Copyright (C) 2021 Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* Copyright (c) 2021 Raspberry Pi (Trading) Ltd. | ||
* | ||
* SPDX-License-Identifier: MIT AND BSD-3-Clause | ||
* | ||
* 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 | ||
*/ | ||
|
||
#include "FreeRTOS.h" | ||
|
||
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, | ||
StackType_t **ppxIdleTaskStackBuffer, | ||
uint32_t *pulIdleTaskStackSize ) | ||
{ | ||
/* If the buffers to be provided to the Idle task are declared inside this | ||
function then they must be declared static - otherwise they will be allocated on | ||
the stack and so not exists after this function exits. */ | ||
static StaticTask_t xIdleTaskTCB; | ||
static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ]; | ||
|
||
/* Pass out a pointer to the StaticTask_t structure in which the Idle task's | ||
state will be stored. */ | ||
*ppxIdleTaskTCBBuffer = &xIdleTaskTCB; | ||
|
||
/* Pass out the array that will be used as the Idle task's stack. */ | ||
*ppxIdleTaskStackBuffer = uxIdleTaskStack; | ||
|
||
/* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer. | ||
Note that, as the array is necessarily of type StackType_t, | ||
configMINIMAL_STACK_SIZE is specified in words, not bytes. */ | ||
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; | ||
} |
70 changes: 70 additions & 0 deletions
70
portable/ThirdParty/GCC/RP2040/include/freertos_sdk_config.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
* FreeRTOS Kernel V10.4.3 | ||
* Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. | ||
* Copyright (c) 2021 Raspberry Pi (Trading) Ltd. | ||
* | ||
* SPDX-License-Identifier: BSD-3-Clause | ||
* | ||
* 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_SDK_CONFIG_H | ||
#define FREERTOS_SDK_CONFIG_H | ||
|
||
#ifndef __ASSEMBLER__ | ||
#include "FreeRTOSConfig.h" | ||
#include "rp2040_config.h" | ||
|
||
#if ( configSUPPORT_PICO_SYNC_INTEROP == 1 ) | ||
// increase the amount of time it may reasonably take to wake us up | ||
#ifndef PICO_TIME_SLEEP_OVERHEAD_ADJUST_US | ||
#define PICO_TIME_SLEEP_OVERHEAD_ADJUST_US 150 | ||
#endif | ||
|
||
#define lock_owner_id_t uint32_t | ||
extern uint32_t ulPortLockGetCurrentOwnerId(void); | ||
#define lock_get_caller_owner_id() ulPortLockGetCurrentOwnerId() | ||
#define LOCK_INVALID_OWNER_ID ((uint32_t)-1) | ||
|
||
struct lock_core; | ||
#ifndef lock_internal_spin_unlock_with_wait | ||
extern void vPortLockInternalSpinUnlockWithWait( struct lock_core *pxLock, uint32_t ulSave); | ||
#define lock_internal_spin_unlock_with_wait(lock, save) vPortLockInternalSpinUnlockWithWait(lock, save) | ||
#endif | ||
|
||
#ifndef lock_internal_spin_unlock_with_notify | ||
extern void vPortLockInternalSpinUnlockWithNotify( struct lock_core *pxLock, uint32_t save); | ||
#define lock_internal_spin_unlock_with_notify(lock, save) vPortLockInternalSpinUnlockWithNotify(lock, save); | ||
#endif | ||
|
||
#ifndef lock_internal_spin_unlock_with_best_effort_wait_or_timeout | ||
extern bool xPortLockInternalSpinUnlockWithBestEffortWaitOrTimeout( struct lock_core *pxLock, uint32_t ulSave, absolute_time_t uxUntil); | ||
#define lock_internal_spin_unlock_with_best_effort_wait_or_timeout(lock, save, until) \ | ||
xPortLockInternalSpinUnlockWithBestEffortWaitOrTimeout(lock, save, until) | ||
#endif | ||
#endif /* configSUPPORT_PICO_SYNC_INTEROP */ | ||
|
||
#if ( configSUPPORT_PICO_TIME_INTEROP == 1 ) | ||
extern void xPortSyncInternalYieldUntilBefore(absolute_time_t t); | ||
#define sync_internal_yield_until_before(t) xPortSyncInternalYieldUntilBefore(t) | ||
#endif /* configSUPPORT_PICO_TIME_INTEROP */ | ||
#endif /* __ASSEMBLER__ */ | ||
#endif |
Oops, something went wrong.