I got a little bit of a breathing space this summer and so I decided I'd try something I have heard many people call 'impossible' - yes it's true that it is weird to try and make an OS for an Arduino board(except that Yun, which has a Linux environment embedded in it), but I thought I'd try and be a skeptic and do what I want.What is this?
This is mainly an operating system (OS) simulator for Arduino boards (I have tried this only on Uno, you may try on other boards and let me know what happened 😅). I am not a CS student or somebody looking forward to be an embedded systems engineer who mainly does coding of operating systems, but a little bit of inspiration fired me up.
Talking about this project, this one is not a perfect simulation and I have tried my maximum to do what I can. I tried to reduce the screen reset interval to 100 milliseconds and it is apparent in the running of the simulator (especially when the launcher runs).What is this intended for?
I made it so that those beginners at Arduino or microcontroller programming who want to make DIY devices can make them themselves. Not all may be satisfied with what I have made, but still I believe this is a good tool for anyone who is a beginner (like myself 😂). All that you need to do to run my version of this project is to upload the RunOS.in file in the project. Those who wish to make their own versions can fork my code on Github (available here at https://github.com/Coder-X15/MCUOS ; or run
git clone https://github.com/Coder-X15/MCUOS.git in a terminal if you have Git) and edit the source code to suit your needs.
Most videos on YouTube feature smartwatch makers using apps to enable Bluetooth connectivity and thus use such a system to make their watches work. I felt unsatisfied with that - and since all revolutions begin either with the advent of a a different thought or from dissatisfaction, I decided to begin one.How can you contribute?
You may star my project on Github or edit the source there. I know that my own code is a bit insensible (especially my concept of it - how things need to run, the basic terminologies to be used, etc.) even if it works, so any valuable contribution will help this project grow. Also, if you are a CS graduate or student learning OS programming, it will be a great help if you could help me out with this. After you contribute, please let me know in the comments.What is it that I did?
To speak it short, I made two schedulers for two types of subroutines (schedulers in the sense that you can swap the order of the subroutines and thus decide what runs first and what comes afterwards) - one is system subroutines [those that the system needs and that which all apps require to function properly] and app-specific subroutines [ones that are made as part of an app; these have to be coded alongside the app (if they require) and loaded into the app-specific subroutine scheduler in the
app.load() function of the app you make], made generalized functions [ones that run a specific set of instructions and hence makes app development easier; can be found in the
apps/general_functions.h header], made hardware classes [one to handle the pins and the other to handle the screen], made two apps for beginners to learn app development for this environment], a header containing constants that can be altered by the user according to their needs before uploading the code [that helps in avoiding issues with display and the like, especially incorrect pin configuration of the LCD screen] and a place to make and place your apps.
My current project is device specific and you'll see it in the README section of the Github page.Updates
- Currently I have made a configurable distribution of the library. You may download it by navigating to the branch 'configurable' or by downloading version v2.0 or by just typing
-b configurable .You'll have to set up your library by running
setup_script.pyin the root directory (requires Python 3 or above).
I know that I have made conceptual errors somewhere, so if you are able to correct them, please do so and also let me know.