diff --git a/README.md b/README.md index f87b0af..4280d25 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Pico Toolkit -The Pico Toolkit aims to provide a collection of production quality add-ons to the Raspberry RP2040 ecosystem. The toolkit is focused around a hackable Symmetric Multi Processing (SMP) scheduler paired with a RP2040 tuned integration of the [PicoLibc](https://github.com/picolibc/picolibc) standard C library which targets small embedded systems. The toolkit provides standalone features such as a C11 standard atomic and thread local storage support as well as a backtrace generator using a lightweight stack unwinder compatible with the [Exception Handling ABI for the Arm Architecture](https://github.com/ARM-software/abi-aa/releases/download/2023Q3/ehabi32.pdf). +The Pico Toolkit aims to provide a collection of production quality add-ons to the Raspberry RP2040 ecosystem. The toolkit is focused around a hackable Symmetric Multi Processing (SMP) scheduler paired with a RP2040 tuned integration of the [PicoLibc](https://github.com/picolibc/picolibc) standard C library which targets small embedded systems. Two RTOS personalities are provided: [ISO C11 Threads](https://en.cppreference.com/w/c/thread) and a [CMSIS RTOS v2](https://arm-software.github.io/CMSIS_5/RTOS2/html/index.html). The toolkit provides standalone features such as a C11 standard atomic and thread local storage support as well as a backtrace generator using a lightweight stack unwinder compatible with the [Exception Handling ABI for the Arm Architecture](https://github.com/ARM-software/abi-aa/releases/download/2023Q3/ehabi32.pdf). # Licensing To encourage community support, the Pico Toolkit is licensed under the [Mozilla Public License](https://www.mozilla.org/en-US/MPL/2.0) (MPL). The MLP allows inclusion toolkit in closed source embedded systems while requiring the open sourcing of any changes to the the Pico Toolkit source code. This seems like a reasonable compromise allowing construction of typical closed source deeply embedded systems while preserving the copyleft, but non-viral, nature of successful open source development. @@ -13,14 +13,32 @@ The Pico Toolkit project strives to be an [inclusive community](CODE_OF_CONDUCT. Have a question or comment? [**Pico Toolkit Discussions**](https://github.com/sgstreet/pico-toolkit/discussions) is the place to be! Considering contributing a new library? Have great new idea? Open a discussion to get community feedback! +# The Libraries + +| Library | Description | +| ------- | ----------- | +| [multicore-support](src/multicore-support/multicore-support.md) | Adds multicore irqs and SMP support to when the pico-scheduler is included. Uses the flexible RP2040 NMI handling to support Realtime IRQ priorities | +| [pico-atomic](src/pico-atomic/pico-atomic.md) | Provides multicore safe atomic options. | +| [pico-cmsis-rtos2](src/pico-cmsis-rtos2/pico-cmsis-rtos2.md) | Includes the CMSIS RTOS v2 personality on top of the pico-scheduler | +| [pico-fault](src/pico-fault/pico-fault.md) | Cortex-M0+ fault handling and exception backtrace support. | +| [pico-nmi]() | Create a simple interface to the RP2040 NMI block. | +| [pico-rtt](src/pico-rtt/pico-rtt.md) | Include Segger Real Time Transfer (RTT) support. This also works with OpenOCD. | +| [pico-scheduler](src/pico-scheduler/pico-scheduler.md) | A SMP capable real time scheduler with flexible Futex support including priority inheritance and contention tracking. | +| [pico-threads](src/pico-threads/pico-threads.md) | Includes the ISO C11 threads personality. | +| [pico-tls](src/pico-tls/pico-tls.md) | Add support for C11 _Thread_local storage-class specifier and matching support for a core_local concept riding on top of the RP2040 multicore hardware. | +| [picolibc-glue](src/picolibc-glue/picolibc-glue.md) | Implements the extensible retargetable locking mechanism utilized by Picolibc. Locking works transparently with and without an RTOS. | +| [picolibc](src/picolibc/picolibc.md) | Builds and integrates the Picolibc version of Newlib tuned for the Cortex-M0+ processor. Unwind table and function names are included in the build. | +| [toolkit-support](src/toolkit-support/toolkit-support.md) | Common toolkit header files including a header only ticket based spin locks and intrusive linked lists. | +| + # Using the Pico Toolkit -The [Pico Toolkit](https://github.com/sgstreet/pico-toolkit.git) integrates with the [Pico SDK](https://github.com/raspberrypi/pico-sdk) and your project following [Getting Started with the Raspberry Pi Pico Guide](https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf). In addition to the Pico SDK build dependencies of `cmake cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential` the toolkit requires the `meson` build system when using the [**picolibc**](src/picolibc) interface. +The [Pico Toolkit](https://github.com/sgstreet/pico-toolkit.git) integrates with the [Pico SDK](https://github.com/raspberrypi/pico-sdk) and your project following [Getting Started with the Raspberry Pi Pico Guide](https://datasheets.raspberrypi.com/pico/getting-started-with-pico.pdf). In addition to the Pico SDK build dependencies of `cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential` the toolkit requires the `meson` build system when using the [**picolibc**](src/picolibc) interface. ``` sudo apt install meson ``` -In your project environment you should export the **PICO_TOOLKIT_PATH** variable. Assuming checked out the [pico-sdk](https://github.com/raspberrypi/pico-sdk) and the [pico-toolkit](https://github.com/sgstreet/pico-toolkit.git) at the same level as your project. +In your project environment you should export the **PICO_TOOLKIT_PATH** variable. Assuming you checked out the [pico-sdk](https://github.com/raspberrypi/pico-sdk) and the [pico-toolkit](https://github.com/sgstreet/pico-toolkit.git) at the same level as your project. ``` $ cd your_project_path $ export PICO_SDK_PATH=../pico-sdk diff --git a/src/multicore-support/multicore-support.md b/src/multicore-support/multicore-support.md new file mode 100644 index 0000000..508c6c6 --- /dev/null +++ b/src/multicore-support/multicore-support.md @@ -0,0 +1 @@ +# Multicore Support diff --git a/src/pico-atomic/pico-atomic.md b/src/pico-atomic/pico-atomic.md new file mode 100644 index 0000000..d9db2ae --- /dev/null +++ b/src/pico-atomic/pico-atomic.md @@ -0,0 +1 @@ +# Pico Atomic diff --git a/src/pico-cmsis-rtos2/pico-cmsis-rtos2.md b/src/pico-cmsis-rtos2/pico-cmsis-rtos2.md new file mode 100644 index 0000000..9e87cdd --- /dev/null +++ b/src/pico-cmsis-rtos2/pico-cmsis-rtos2.md @@ -0,0 +1 @@ +# Pico CMSIS RTOS V2 diff --git a/src/pico-fault/pico-fault.md b/src/pico-fault/pico-fault.md new file mode 100644 index 0000000..e8bd239 --- /dev/null +++ b/src/pico-fault/pico-fault.md @@ -0,0 +1 @@ +# Pico Fault \ No newline at end of file diff --git a/src/pico-nmi/pico-nmi.md b/src/pico-nmi/pico-nmi.md new file mode 100644 index 0000000..afa7b3f --- /dev/null +++ b/src/pico-nmi/pico-nmi.md @@ -0,0 +1 @@ +# Pico NMI diff --git a/src/pico-rtt/pico-rtt.md b/src/pico-rtt/pico-rtt.md new file mode 100644 index 0000000..bc3fb70 --- /dev/null +++ b/src/pico-rtt/pico-rtt.md @@ -0,0 +1 @@ +# Pico Real Time Transfer diff --git a/src/pico-scheduler/pico-scheduler.md b/src/pico-scheduler/pico-scheduler.md new file mode 100644 index 0000000..de41353 --- /dev/null +++ b/src/pico-scheduler/pico-scheduler.md @@ -0,0 +1 @@ +# Pico Scheduler diff --git a/src/pico-threads/pico-threads.md b/src/pico-threads/pico-threads.md new file mode 100644 index 0000000..d076617 --- /dev/null +++ b/src/pico-threads/pico-threads.md @@ -0,0 +1 @@ +# Pico Threads diff --git a/src/pico-tls/pico-tls.md b/src/pico-tls/pico-tls.md new file mode 100644 index 0000000..9bd9ddb --- /dev/null +++ b/src/pico-tls/pico-tls.md @@ -0,0 +1 @@ +# Pico Thread and Core Local Storage \ No newline at end of file diff --git a/src/picolibc-glue/picolibc-glue.md b/src/picolibc-glue/picolibc-glue.md new file mode 100644 index 0000000..de3c3ee --- /dev/null +++ b/src/picolibc-glue/picolibc-glue.md @@ -0,0 +1 @@ +# Picolibc Glue diff --git a/src/picolibc/picolibc.md b/src/picolibc/picolibc.md new file mode 100644 index 0000000..76e96af --- /dev/null +++ b/src/picolibc/picolibc.md @@ -0,0 +1 @@ +# Picolibc \ No newline at end of file diff --git a/src/toolkit-support/toolkit-support.md b/src/toolkit-support/toolkit-support.md new file mode 100644 index 0000000..def15ef --- /dev/null +++ b/src/toolkit-support/toolkit-support.md @@ -0,0 +1 @@ +# Toolkit Support \ No newline at end of file