6 ms·
Show HN: TinyOS – A minimalist RTOS for Cortex-M written in C
- hpscript 7mo agoHi HN, I’ve been working on a tiny RTOS as a personal project to better understand how operating systems and schedulers work internally. This project includes: - Basic task scheduler - Context switching - Simple memory management - Runs on (your target hardware or environment) Motivation: I wanted to learn OS internals by building everything from scratch rather than relying on existing frameworks. Challenges: - Implementing context switching correctly - Designing a minimal but usable scheduler - Keeping the codebase simple and readable I’d really appreciate feedback, especially on: - Architecture design - Scheduler implementation - Code structure GitHub: https://github.com/cmc-labo/tinyos-rtos https://github.com/cmc-labo/tinyos-rtos
- Retr0id 7mo agoDid you never even try compiling it?
- bahmboo 7mo agoImpressive! Very complete on first glance. You might want to soften or qualify the RTOS statement so people focus on its compactness and low latency. As you are already seeing in the comments the RTOS aspect has a lot of opinions depending on what one is trying to accomplish.
- peteforde 7mo agoVery cool! Thanks for sharing. I would appreciate an honest comparison with FreeRTOS. Building something like this is an excellent learning exercise for the coder, but someone who has to balance the risks, learning curve and feature set has to justify the adventure in a different way. One thing that would be interesting to hear more about would be your own recounting of the places where you made opinionated decisions about how things should work.
- maximusdrex 7mo agoLooks like a fun project, but I’m curious what you actually tested on. There’s real numbers for estimated context switch timing, and you mentioned implementing context switching, but I can’t find any actual implementations of the context switching routine in your code. You don’t need to do this yourself, but it’s weird to talk about it if you haven’t.
- Retr0id 7mo agohttps://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45f6f33246a33ef4fc9a5d7e4de/src/kernel.c#L106 https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45... "Context switch (to be implemented in assembly for target architecture)" There's no asm in the repo so I can only assume this is not something that actually compiles and runs. Other things that are missing: - No startup code (stack setup etc.) - No linker script ("to be created", per makefile comment)
- maximusdrex 7mo agoYeah, I read that note and stopped looking further. I was hoping that maybe the hardware-specific code was in a different project and just wanted to be nice in case. I just don’t get the point of making AI slop out of something like a toy RTOS, which is inherently a learning project more than anything else. There’s nothing even fun about doing it if you won’t even try to get it to run on an STM32 or something.
- m132 7mo ago> Runs on (your target hardware or environment) Nice try, OpenClaw
- Yokohiii 7mo agoI have no practical insight on RTOS in general, if anyone bothers to give me a hint, please. From all what I've looked into, RTOS does mean to create software systems that are almost perfectly predictable and safe to execute. Predictable latency, runtime and memory usage, plus maybe side channels to do the unpredictable stuff in between. It's actual rocket science, as no systemic mistakes are allowed. The confusion is that this project doesn't mention any of it. Is it just hijacking of a fancy acronym, are there two worlds side by side or am I completely misled?
- avadodin 7mo agoYou're probably thinking of a hard real-time RTOS with time slices and WCET constraints. For soft real-time, you basically only need low latency. Threads with priorities, synchronization primitives and some way of handling interrupts is generally considered good enough. From the description, this sounds like the kind of RTOS that runs most embedded RT applications currently if perhaps a bit heavier in features than the average with filesystem and networking support.
- Yokohiii 7mo agoThe distinction between hard and soft RTOS explains my confusion. Thanks for the heads up!
- brcmthrowaway 7mo agoCan someone explain this whole boondoggle with RTOS and latency means in practice? Why would someone make a context switch HIGH latency? That defeats the purpose.
- Yokohiii 7mo agoNot sure what you are referring to, no one said that?
- jtrueb 7mo agoRTOS can be used a lot looser than you describe. Like a build system, scheduling, and interrupt framework that allows you to program an MCU like you describe. Zephyr RTOS and Free RTOS provide easy enough ways to write code that uses blocking APIs but probably runs your code according to the timing constraints if you hold it right. As an alternative, you could write for “bare metal” and handle the control flow, scheduling, interrupting, etc. yourself. If you are writing to “random” addresses according to some datasheet to effect some real world change, you are probably reaching for an RTOS or bare metal unless you are writing OS driversn. If you look at the linux drivers, you will see a lot of similarities to the Zephyr RTOS drivers, but one of them is probably clocking in the MHz while the other in the GHz
- nofunsir 7mo agoWhat ever happened to μC/OS? Seemed both well documented and well suited to have taken over for the current MCU explosion. I almost never see anyone talk about it. Looks like it open-sourced in 2020. https://github.com/weston-embedded https://github.com/weston-embedded
- mc7alazoun 7mo ago[flagged]
- jockm 7mo agoQuestion: Do you mean real time, meaning there is some kind of expectation of task switching time, nothing can stop other threads from executing, etc; or do you really mean embedded?
- Retr0id 7mo agoIt doesn't implement task switching at all...
- jockm 7mo agoCan you back that up? It supports `os_task_create()`, `ps`, `top`, and the default for `MAX_TASKS` is 8.
- Retr0id 7mo agohttps://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45f6f33246a33ef4fc9a5d7e4de/src/kernel.c#L105-L108 https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45... This codebase is essentially a stage prop, it has never been compiled nor executed.
- onetimeusename 7mo agoHow much of this was by AI?
- Retr0id 7mo agoIt doesn't even compile, the whole thing is evidently built on vibes.
- bahmboo 7mo agoIt doesn't compile for you or doesn't compile at all? Honest question. It's a nice project in the face of it but if it's all AI fever dreams that would be disappointing. I don't have the cycles to try it out right now.
- synergy20 7mo agothis reminds me of: https://github.com/tinyos/tinyos-main https://github.com/tinyos/tinyos-main more than one decade ago
- tvst 7mo agoI thought this was about UC Berkeley's TinyOS: https://github.com/tinyos/tinyos-main https://github.com/tinyos/tinyos-main This was a big deal in some academic circles in the early 2000s
- lormayna 7mo agoI did my master thesis working with that in 2006. It was fun but challenging to work with a so primitive OS (no memory dynamic allocation, etc.) and so many bugs.
- m132 7mo agoThe README mentions ARMv7-M, RISC-V, and AVR, but no actual SoCs or boards, and the source code contains unconditional inline assembly for Arm. Similarly, there are measurements of context switch time on RISC-V, while the scheduler is one big stub that doesn't even enter a task, only returns from itself using Arm-specific assembly [0]. The examples rely on this scheduler never returning, so there's no way any of them can run [1]. The bootloader is also a stub [2]. Not a single exception vector table, but plenty of LLM-style comments explaining every single line. Others (well, two people really) have also noted the lack of a linker script, start-up code, and that the project doesn't even build. 82 points at the time of writing, which is 4 hours from the post's submission. Already on the main page. The only previous activity of the author? Two other vibe-coded projects of similar quality and a few comments with broken list formatting, suggesting that they were never even reviewed by a human prior to posting. Does anybody read past the headline these days? Had my hopes higher for this site. [0] https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45f6f33246a33ef4fc9a5d7e4de/src/kernel.c#L164-L172 https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45... [1] https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45f6f33246a33ef4fc9a5d7e4de/examples/blink_led.c#L84-L88 https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45... [2] https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45f6f33246a33ef4fc9a5d7e4de/src/bootloader.c#L130-L152 https://github.com/cmc-labo/tinyos-rtos/blob/2a47496047fdb45...
- deleted 7mo ago[deleted]
- Retr0id 7mo agoDon't forget the 71 stars on github, and counting!
- m132 7mo agoOh wow, was 60 just a while ago. Guess the dead Internet theory is no longer just a theory.
- mbernstein 7mo agoHN used to provide a really high signal to noise ratio for me, but it's degrading pretty quickly. There are new accounts below saying "hey I just learned what RTOS means, thanks!" I reflexively reload HN many times per day, but I'm wondering if I need a walled garden with some sort of curation of individuals - which sucks - to get the signal level I want.
- ryguz 7mo ago[dead]
- throwawaypath 7mo agoInteresting this kernel implements kernel message queues, which are almost never used out in the wild. Are there any examples of popular software projects that use POSIX/SysV message queues?
- nurettin 7mo agoThere is already a TinyOS in the sensor networks space. I've used it with MicaZ motes over a decade ago. https://github.com/tp-freeforall/prod https://github.com/tp-freeforall/prod
- jaylew1997 7mo agoThanks for sharing