Electronics > Beginners
RTOS vs Superloop, when to use?
Muffins:
Hi Guys,
I have recently started down the train of learning about real time operating systems. I downloaded a port of ChibiOS to my arduino IDE and have been playing with that on an ATmege328p.
Anyway, I was wondering if superloops are actually used in consumer products and how I would determine if my program was reliable. In my mind RTOS is the way to go for making sure tasks play nice with one anther but at what point do I consider using it?
rstofer:
Superloops work well when there is no time critical task. They can still be pretty responsive if you only test for one, or a few, conditions during each pass. Don't get hung up in a subtask. No while(1) loops... They are simple to code, simple to debug and don't hide all the details in semaphores.
If there are critical tasks that can't be handled by a simple interrupt driven queue, an RTOS is the way to go. The thing is, most programs can work with simple IO queues. There is still a need for interrupts but there isn't a need for a scheduler.
Finally, anybody can code a Superloop. It's not quite as easy to write for an RTOS and debugging can be a nightmare. Things firing off willy-nilly can sometimes have interesting inter-reactions.
Don't take sides! There is a time and place for both approaches. It really comes down to the system requirements and the skill of the programmer.
Windows and Linux are hybrids. Neither are real-time. I don't know much about Linux but Windows is a cooperative multitasking system where tasks willing give up their slot on some condition preemptive multitasking system. Works well!
langwadt:
--- Quote from: rstofer on September 02, 2018, 09:36:05 pm ---Superloops work well when there is no time critical task. They can still be pretty responsive if you only test for one, or a few, conditions during each pass. Don't get hung up in a subtask. No while(1) loops... They are simple to code, simple to debug and don't hide all the details in semaphores.
If there are critical tasks that can't be handled by a simple interrupt driven queue, an RTOS is the way to go. The thing is, most programs can work with simple IO queues. There is still a need for interrupts but there isn't a need for a scheduler.
Finally, anybody can code a Superloop. It's not quite as easy to write for an RTOS and debugging can be a nightmare. Things firing off willy-nilly can sometimes have interesting inter-reactions.
Don't take sides! There is a time and place for both approaches. It really comes down to the system requirements and the skill of the programmer.
Windows and Linux are hybrids. Neither are real-time. I don't know much about Linux but Windows is a cooperative multitasking system where tasks willing give up their slot on some condition. Works well!
--- End quote ---
afaik Windows hasn't been cooperative multitasking since before win95
jmelson:
--- Quote from: rstofer on September 02, 2018, 09:36:05 pm ---
Windows and Linux are hybrids. Neither are real-time.
--- End quote ---
Plain Linux is not real time, but there are several real time kernels that are built on Linux. There are RTAI, Xenomai and RT-Preempt for the X86, and at least RT-Preempt for ARM. Machinekit is a specialized RT system for CNC machine controllers, but it is a one-piece download that contains a complete Linux system with the RT-Preempt kernel for the BeagleBone Black.
Jon
rstofer:
--- Quote from: langwadt on September 02, 2018, 10:31:02 pm ---afaik Windows hasn't been cooperative multitasking since before win95
--- End quote ---
You are correct, they have changed to preemptive multitasking with the NT based kernels.
Navigation
[0] Message Index
[#] Next page
Go to full version