SuperTinyKernel (STK) - lightweight embedded multi/single-core multithreading for NXP Cortex-M MCUs

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

SuperTinyKernel (STK) - lightweight embedded multi/single-core multithreading for NXP Cortex-M MCUs

838 次查看
neutroncode
Contributor I

Hi NXP Devs!

Not really a question here. I would like to introduce a thread scheduling library - SuperTinyKernel (STK).

Its GitHub repo: https://github.com/dmitrykos/stk

You can check capabilities in detail on GitHub but briefly STK can:

  • Soft and hard real-time support: STK supports cooperative scheduling for “soft real-time” tasks, you can also enable hard real-time mode (KERNEL_HRT) for periodic tasks with guaranteed deadlines.
  • Static and dynamic tasks: Define all tasks at startup (KERNEL_STATIC) or allow tasks to be created and destroyed at runtime (KERNEL_DYNAMIC).
  • Low-power friendliness: STK puts MCU into a low-power mode when there are no runnable tasks (task calls Sleep).
  • Tiny footprint: Minimal C++ abstractions (no STL, no heavy namespaces) keep the kernel small and simple.
  • Portability: Supports any ARM Cortex-M MCU.
  • Multi-core support: Fully implemented for Cortex-M and RISC-V.
  • x86 development mode: Compile & debug your code on a PC before flashing to the MCU, which helps with early testing and unit tests.
  • Open-source License: MIT: Open for commercial, closed-source, open-source - your choice.

There are ready to use MCUXpresso examples for NXP K26/K66 MCU (FRDM-K66F dev board) and i.MX RT105 (IMXRT1050-EVKB dev board): https://github.com/dmitrykos/stk/tree/main/build/example/project/nxp-mcuxpresso

Any questions? Please ask, also you are welcome to participate in STK's GitHub repository.

0 项奖励
回复
1 回复

355 次查看
neutroncode
Contributor I

Since the initial post there was an active development happening on STK and it has grown to a more convenient tool for embedded development, so wanted to highlight the progress:

  • Scheduling strategies: Besides existing Round-Robin (RR) new scheduling strategies were added: Fixed-Priority (FP, similar to FreeRTOS), Smooth Weighted Round-Robin (SWRR), Rate-Monotonic (RM), Deadline-Monotonic (DM), including Worst Case Reaction Time (WCRT) analysis, Earliest Deadline First (EDF), custom (via ITaskSwitchStrategy). It is probably the only open-source scheduler that has such a rich set of scheduling strategies.

  • Synchronization API: Besides CriticalSection there is a set of synchronization primitives now: SpinLock, Mutex, Event, ConditionVariable, Semaphore, Pipe primitives for inter-task, inter-core synchronization. Synchronization is optional via KERNEL_SYNC kernel mode, so it does not bloat FLASH/RAM.

  • Traceability: STK now supports tracing of tasks scheduling with a SEGGER SystemView.

  • C interface: For C-only projects STK got a fully-featured C interface.

If there are any questions, please ask!

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2253453%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3ESuperTinyKernel%20(STK)%20-%20%E7%94%A8%E4%BA%8E%20NXP%20Cortex-M%20MCU%20%E7%9A%84%E8%BD%BB%E9%87%8F%E7%BA%A7%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%A4%9A%E6%A0%B8%2F%E5%8D%95%E6%A0%B8%E5%A4%9A%E7%BA%BF%E7%A8%8B%E6%8A%80%E6%9C%AF%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2253453%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%97%A8%EF%BC%8C%E6%81%A9%E6%99%BA%E6%B5%A6%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%EF%BC%81%3C%2FP%3E%3CP%3E%E8%BF%99%E4%B8%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E7%9C%9F%E6%AD%A3%E7%9A%84%E9%97%AE%E9%A2%98%E3%80%82%20%3CSPAN%3E%E6%88%91%E6%83%B3%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E8%B0%83%E5%BA%A6%E5%BA%93--SuperTinyKernel%20(STK)%20%3C%2FSPAN%3E%3CSTRONG%3E%E8%B6%85%E7%BA%A7%E5%BE%AE%E5%86%85%E6%A0%B8%EF%BC%88STK%EF%BC%89%3C%2FSTRONG%3E%3CSPAN%3E.%20%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E5%AE%83%E6%98%AF%20GitHub%3C%2FSPAN%3E%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fdmitrykos%2Fstk%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3E%20%E4%BB%93%E5%BA%93%EF%BC%9Ahttps%3A%2F%2Fgithub.com%2Fdmitrykos%2Fstk%3C%2FA%3E%3CBR%20%2F%3E%3CBR%20%2F%3E%3CSPAN%3E%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%9C%A8%20GitHub%20%E4%B8%8A%E6%9F%A5%E7%9C%8B%E8%AF%A6%E7%BB%86%E7%9A%84%E5%8A%9F%E8%83%BD%EF%BC%8C%E4%BD%86%20STK%20%E5%8F%AF%E4%BB%A5%E7%AE%80%E8%A6%81%E5%9C%B0%E6%9F%A5%E7%9C%8B%EF%BC%9A%3C%2FSPAN%3E%3C%2FP%3E%3CUL%3E%3CLI%3E%3CSTRONG%3E%E6%94%AF%E6%8C%81%E8%BD%AF%E5%AE%9E%E6%97%B6%E5%92%8C%E7%A1%AC%E5%AE%9E%E6%97%B6%3C%2FSTRONG%3E%EF%BC%9ASTK%20%E6%94%AF%E6%8C%81%20%22%E8%BD%AF%E5%AE%9E%E6%97%B6%20%22%E4%BB%BB%E5%8A%A1%E7%9A%84%E5%8D%8F%E5%90%8C%E8%B0%83%E5%BA%A6%EF%BC%8C%E6%82%A8%E4%B9%9F%E5%8F%AF%E4%BB%A5%E5%90%AF%E7%94%A8%E7%A1%AC%E5%AE%9E%E6%97%B6%E6%A8%A1%E5%BC%8F%20(KERNEL_HRT)%EF%BC%8C%E4%BB%A5%E6%89%A7%E8%A1%8C%E6%9C%89%E6%88%AA%E6%AD%A2%E6%97%A5%E6%9C%9F%E4%BF%9D%E8%AF%81%E7%9A%84%E5%AE%9A%E6%9C%9F%E4%BB%BB%E5%8A%A1%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E9%9D%99%E6%80%81%E5%92%8C%E5%8A%A8%E6%80%81%E4%BB%BB%E5%8A%A1%3C%2FSTRONG%3E%EF%BC%9A%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E5%AE%9A%E4%B9%89%E6%89%80%E6%9C%89%E4%BB%BB%E5%8A%A1%EF%BC%88KERNEL_STATIC%EF%BC%89%EF%BC%8C%E6%88%96%E5%85%81%E8%AE%B8%E5%9C%A8%E8%BF%90%E8%A1%8C%E6%97%B6%E5%88%9B%E5%BB%BA%E5%92%8C%E9%94%80%E6%AF%81%E4%BB%BB%E5%8A%A1%EF%BC%88KERNEL_DYNAMIC%EF%BC%89%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E4%BD%8E%E5%8A%9F%E8%80%97%E5%8F%8B%E5%A5%BD%E6%80%A7%3C%2FSTRONG%3E%EF%BC%9A%E5%BD%93%E6%B2%A1%E6%9C%89%E5%8F%AF%E8%BF%90%E8%A1%8C%E7%9A%84%E4%BB%BB%E5%8A%A1%EF%BC%88%E4%BB%BB%E5%8A%A1%E8%B0%83%E7%94%A8%20Sleep%EF%BC%89%E6%97%B6%EF%BC%8CSTK%20%E5%B0%86%20MCU%20%E7%BD%AE%E4%BA%8E%E4%BD%8E%E5%8A%9F%E8%80%97%E7%94%B5%E6%BA%90%E6%A8%A1%E5%BC%8F%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E5%8D%A0%E7%94%A8%E7%A9%BA%E9%97%B4%E5%B0%8F%3C%2FSTRONG%3E%E6%9C%80%E5%B0%8F%E5%8C%96%E7%9A%84%20C%2B%2B%20%E6%8A%BD%E8%B1%A1%EF%BC%88%E6%97%A0%20STL%E3%80%81%E6%97%A0%E9%87%8D%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%EF%BC%89%E4%BD%BF%E5%86%85%E6%A0%B8%E5%B0%8F%E8%80%8C%E7%AE%80%E5%8D%95%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E4%BE%BF%E6%90%BA%E6%80%A7%3C%2FSTRONG%3E%EF%BC%9A%E6%94%AF%E6%8C%81%E4%BB%BB%E4%BD%95%20ARM%20Cortex-M%20MCU%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E5%A4%9A%E6%A0%B8%E6%94%AF%E6%8C%81%3C%2FSTRONG%3E%EF%BC%9A%E5%AE%8C%E5%85%A8%E6%94%AF%E6%8C%81%20Cortex-M%20%E5%92%8C%20RISC-V%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3Ex86%20%E5%BC%80%E5%8F%91%E6%A8%A1%E5%BC%8F%3C%2FSTRONG%3E%EF%BC%9A%E5%9C%A8%E9%97%AA%E5%AD%98%E5%88%B0%20MCU%20%E4%B9%8B%E5%89%8D%EF%BC%8C%E5%9C%A8%20PC%20%E4%B8%8A%E7%BC%96%E8%AF%91%26amp%3B%20%E8%B0%83%E8%AF%95%E4%BB%A3%E7%A0%81%EF%BC%8C%E8%BF%99%E6%9C%89%E5%8A%A9%E4%BA%8E%E6%97%A9%E6%9C%9F%E6%B5%8B%E8%AF%95%E5%92%8C%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E3%80%82%3C%2FLI%3E%3CLI%3E%3CSTRONG%3E%E5%BC%80%E6%BA%90%E8%AE%B8%E5%8F%AF%E8%AF%81%EF%BC%9AMIT%3C%2FSTRONG%3E%EF%BC%9A%E5%BC%80%E6%94%BE%E5%95%86%E4%B8%9A%E3%80%81%E5%B0%81%E9%97%AD%E6%BA%90%E4%BB%A3%E7%A0%81%E3%80%81%E5%BC%80%E6%94%BE%E6%BA%90%E4%BB%A3%E7%A0%81--%E7%94%B1%E6%82%A8%E9%80%89%E6%8B%A9%E3%80%82%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%3CSTRONG%3E%E6%81%A9%E6%99%BA%E6%B5%A6%20K26%2FK66%20MCU%3C%2FSTRONG%3E%EF%BC%88FRDM-K66F%20%E5%BC%80%E5%8F%91%E6%9D%BF%EF%BC%89%E5%92%8C%20%3CSTRONG%3Ei.MX%20RT105%3C%2FSTRONG%3E%EF%BC%88IMXRT1050-EVKB%20%E5%BC%80%E5%8F%91%E6%9D%BF%EF%BC%89%E6%9C%89%E7%8E%B0%E6%88%90%E7%9A%84%20MCUXpresso%20%E7%A4%BA%E4%BE%8B%EF%BC%9A%3CA%20href%3D%22https%3A%2F%2Fgithub.com%2Fdmitrykos%2Fstk%2Ftree%2Fmain%2Fbuild%2Fexample%2Fproject%2Fnxp-mcuxpresso%22%20target%3D%22_blank%22%20rel%3D%22noopener%20nofollow%20noreferrer%22%3Ehttps%3A%2F%2Fgithub.com%2Fdmitrykos%2Fstk%2Ftree%2Fmain%2Fbuild%2Fexample%2Fproject%2Fnxp-mcuxpresso%3C%2FA%3E%3C%2FP%3E%3CP%3E%E6%9C%89%E9%97%AE%E9%A2%98%E5%90%97%EF%BC%9F%E8%AF%B7%E6%8F%90%E5%87%BA%E9%97%AE%E9%A2%98%EF%BC%8C%E6%88%91%E4%BB%AC%E4%B9%9F%E6%AC%A2%E8%BF%8E%E6%82%A8%E5%8A%A0%E5%85%A5%20STK%20%E7%9A%84%20GitHub%20%E4%BB%93%E5%BA%93%E3%80%82%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2303157%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20SuperTinyKernel%20(STK)%20-%20lightweight%20embedded%20multi%2Fsingle-core%20multithreading%20for%20NXP%20Cortex-M%20M%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2303157%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E8%87%AA%E9%A6%96%E6%AC%A1%E5%8F%91%E5%B8%83%E4%BB%A5%E6%9D%A5%EF%BC%8CSTK%20%E4%B8%80%E7%9B%B4%E5%9C%A8%E7%A7%AF%E6%9E%81%E5%BC%80%E5%8F%91%EF%BC%8C%E5%AE%83%E5%B7%B2%E6%88%90%E9%95%BF%E4%B8%BA%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%BC%80%E5%8F%91%E7%9A%84%E6%9B%B4%E4%BE%BF%E6%8D%B7%E5%B7%A5%E5%85%B7%EF%BC%8C%E5%9B%A0%E6%AD%A4%E6%88%91%E6%83%B3%E9%87%8D%E7%82%B9%E4%BB%8B%E7%BB%8D%E4%B8%80%E4%B8%8B%E5%AE%83%E7%9A%84%E8%BF%9B%E5%B1%95%E6%83%85%E5%86%B5%EF%BC%9A%3C%2FP%3E%3CUL%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%3C%2FSTRONG%3E%EF%BC%9A%E9%99%A4%E4%BA%86%E7%8E%B0%E6%9C%89%E7%9A%84%3CEM%3E%E5%BE%AA%E7%8E%AF%EF%BC%88RR%EF%BC%89%3C%2FEM%3E%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%E5%A4%96%EF%BC%8C%E8%BF%98%E5%A2%9E%E5%8A%A0%E4%BA%86%E6%96%B0%E7%9A%84%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%EF%BC%9A%3CEM%3E%E5%9B%BA%E5%AE%9A%E4%BC%98%E5%85%88%E7%BA%A7%3C%2FEM%3E(FP%EF%BC%8C%E7%B1%BB%E4%BC%BC%E4%BA%8E%20FreeRTOS)%E3%80%81%3CEM%3E%E5%B9%B3%E6%BB%91%E5%8A%A0%E6%9D%83%E5%BE%AA%E7%8E%AF%3C%2FEM%3E(SWRR)%E3%80%81%3CEM%3E%E9%80%9F%E7%8E%87%E5%8D%95%E8%B0%83%3C%2FEM%3E(RM)%E3%80%81%3CEM%3E%E6%88%AA%E6%AD%A2%E6%97%B6%E9%97%B4%E5%8D%95%E8%B0%83%3C%2FEM%3E(DM)%EF%BC%8C%E5%8C%85%E6%8B%AC%E6%9C%80%E5%9D%8F%E6%83%85%E5%86%B5%E5%8F%8D%E5%BA%94%E6%97%B6%E9%97%B4%20(WCRT)%20%E5%88%86%E6%9E%90%E3%80%81%3CEM%3E%E6%9C%80%E6%97%A9%E6%88%AA%E6%AD%A2%E6%97%B6%E9%97%B4%E4%BC%98%E5%85%88%3C%2FEM%3E(EDF)%E3%80%81%E8%87%AA%E5%AE%9A%E4%B9%89%EF%BC%88%E9%80%9A%E8%BF%87ITaskSwitchStrategy%EF%BC%89%E3%80%82%E5%AE%83%E5%8F%AF%E8%83%BD%E6%98%AF%E5%94%AF%E4%B8%80%E6%8B%A5%E6%9C%89%E5%A6%82%E6%AD%A4%E4%B8%B0%E5%AF%8C%E8%B0%83%E5%BA%A6%E7%AD%96%E7%95%A5%E7%9A%84%E5%BC%80%E6%BA%90%E8%B0%83%E5%BA%A6%E7%A8%8B%E5%BA%8F%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E5%90%8C%E6%AD%A5%20API%3C%2FSTRONG%3E%EF%BC%9A%E9%99%A4%E4%BA%86%3CEM%3ECriticalSection%3C%2FEM%3E%EF%BC%8C%E7%8E%B0%E5%9C%A8%E8%BF%98%E6%9C%89%E4%B8%80%E5%A5%97%E5%90%8C%E6%AD%A5%E5%8E%9F%E8%AF%AD%EF%BC%9A%E7%94%A8%E4%BA%8E%E4%BB%BB%E5%8A%A1%E9%97%B4%E3%80%81%E5%86%85%E6%A0%B8%E9%97%B4%E5%90%8C%E6%AD%A5%E7%9A%84%3CEM%3ESpinLock%3C%2FEM%3E%E3%80%81%3CEM%3EMutex%3C%2FEM%3E%E3%80%81%3CEM%3EEvent%3C%2FEM%3E%E3%80%81%3CEM%3EConditionVariable%3C%2FEM%3E%E3%80%81%3CEM%3ESemaphore%3C%2FEM%3E%E3%80%81%3CEM%3EPipe%3C%2FEM%3E%E5%9F%BA%E5%85%83%E3%80%82%E9%80%9A%E8%BF%87%20KERNEL_SYNC%20%E5%86%85%E6%A0%B8%E6%A8%A1%E5%BC%8F%E8%BF%9B%E8%A1%8C%E5%90%8C%E6%AD%A5%E6%98%AF%E5%8F%AF%E9%80%89%E7%9A%84%EF%BC%8C%E5%9B%A0%E6%AD%A4%E5%AE%83%E4%B8%8D%E4%BC%9A%E4%BD%BF%E9%97%AA%E5%AD%98%2F%E5%86%85%E5%AD%98%E8%86%A8%E8%83%80%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3E%E5%8F%AF%E8%BF%BD%E6%BA%AF%E6%80%A7%3C%2FSTRONG%3E%EF%BC%9ASTK%20%E7%8E%B0%E5%9C%A8%E6%94%AF%E6%8C%81%E4%BD%BF%E7%94%A8%3CEM%3E%E4%B8%96%E7%BA%AA%E4%BD%B3%E7%BC%98%E7%B3%BB%E7%BB%9F%E8%A7%86%E5%9B%BE%3C%2FEM%3E%E8%B7%9F%E8%B8%AA%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3CLI%3E%3CP%3E%3CSTRONG%3EC%20%E8%AF%AD%E8%A8%80%E7%95%8C%E9%9D%A2%3C%2FSTRONG%3E%E5%AF%B9%E4%BA%8E%E4%BB%85%E4%BD%BF%E7%94%A8%20C%20%E8%AF%AD%E8%A8%80%E7%9A%84%E9%A1%B9%E7%9B%AE%EF%BC%8CSTK%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%8A%9F%E8%83%BD%E9%BD%90%E5%85%A8%E7%9A%84%20C%20%E8%AF%AD%E8%A8%80%E6%8E%A5%E5%8F%A3%E3%80%82%3C%2FP%3E%3C%2FLI%3E%3C%2FUL%3E%3CP%3E%E5%A6%82%E6%9C%89%E4%BB%BB%E4%BD%95%E9%97%AE%E9%A2%98%EF%BC%8C%E8%AF%B7%E6%8F%90%E5%87%BA%EF%BC%81%3C%2FP%3E%3C%2FLINGO-BODY%3E