| Examples 🔆 | CLI 💻️ | main CI 📦️ |
dev CI 🚢 |
Support 🙏 |
|---|---|---|---|---|
![]() |
![]() |
J's Embedded Systems Core: a convenient, dynamic and portable wrapper for FreeRTOS with native CLI support running on embedded systems with a central core unit that makes adding, debugging and abstracting new features easy.
jescore is a dynamic abstraction library for commonly used FreeRTOS tasks written in C. Its goal is to make development of multitasking procedures easier with more focus on the actual application than the boring backend-stuff. jescore does that for you. A second goal is native CLI support: As huge fan of CLIs, I also want this functionality on my embedded systems, to better interact with the device and to test software without hardware. This way, graphical UI elements become naturally abstracted from the actual process. On a desktop OS, calling cd folder is exactly the same as double clicking on that folder with the cursor, but the second method provides a good looking UI, then calls cd folder by itself. jescore follows a similar philosophy.
jescore works by launching a given "job" in a runtime environment that is then executed in a multitasking context. The core handles calls to these jobs and checks if they have been registered by the user. Such a call can happen in the form of the API from within the program or the CLI if the MCU is connected to a host machine. This means that a program can be written that has automatic and native CLI support for automation tasks, in-situ debugging or backend-access that the UI of a project doesn't allow. It additionally implements so called "base jobs", which offer additional functionality like job status, logging and benchmarking.
jescore is built with PlatformIO. To get started there immediately, you just need to add jescore to your dependencies in platformio.ini:
; platformio.ini:
[env:my_board]
...
lib_deps =
https://github.com/jake-is-ESD-protected/jescore ; as repo
; or
jescore ; as PlatformIO registry libraryFind more instructions on project setup in the wiki.
Use the standard way of make instead! Clone this repo and obtain a local copy of the FreeRTOS-Kernel. You can now follow the example Makefile and adjust it for your project.
Many times I find myself needing the same type of overarching architecture for embedded systems projects. This includes things like multitasking, interrupts, sampling tasks and user input tasks. As of now, every project consists of me setting up this architecture manually for every project, always slightly different with new knowledge added. At one point I stopped and thought, why not outsource this specific framework into its own project, software, module... Something that is always at the center of my projects: jescore.
The great thing about this name is that it can stand for "J's embedded systems core" but it can also be an homage to the legacy YouTube name "J's e-shack", which inspired this core system in the first place.
jescore runs on all ESP32 boards with the Arduino FW for beginners and hobbyists and on selected STM32 boards with the STM32 HAL for the nerds. Note that Cortex-M0 series (STM32F0, STM32L0, STM32G0, STM32C0) are not supported due to RAM constraints.
Want more boards? See the complete list at Board Support or open an issue!
All that stuff is explained in detail in the wiki.
The software shown here is how I like to structure my projects. You might disagree with the way the code is structured. If you would like to try this code out as well and you are not happy with certain features, you are very welcome to contribute. I keep this core updated to always reflect my current coding style for embedded systems. For any legal conditions regarding this software, see the license.


