[Oberon] Oberon as (embedded) rtos.

Frans-Pieter Vonck fp at vonck.nl
Sun Nov 11 11:35:23 CET 2018


> I recommend that you read Wirth's 1996 paper titled "Tasks versus
> Threads: An Alternative Multiprocessing Paradigm". The relative merits
> of tasks, processes, coroutines and threads are discussed.
> 

In the article of Marco Sanvido
explanation of the scheduler of HelyOS, the basis for the Onbass 
project.

https://www.researchgate.net/profile/Marco_Sanvido/publication/2460197_A_Computer_System_for_Model_Helicopter_Flight_Control/links/0deec53862b35e842d000000/A-Computer-System-for-Model-Helicopter-Flight-Control.pdf

 From the article:
"The strategy usually adopted is the use of coroutines as the 
multitasking
entity. Our approach, uses subroutines as the multitasking entity in-
stead. The scheduler starts the subroutine tasks in a fixed and 
predefined order,
according to their priority. The task may be preempted by other tasks, 
i.e. sus-
pended but, in opposition to the coroutine approach, they run to 
completion."

In wikipedia explained as:
https://en.wikipedia.org/wiki/Rate-monotonic_scheduling#cite_note-12

The article of Wirth "Tasks versus Threads" was plublished in 1996, a 
year later, in 1997 the Marsrover was rebooting by the Watchdog 
timer,caused by  used priority inheritence in combination with threads.

"VxWorks provides preemptive priority scheduling of threads. Tasks on 
the Pathfinder spacecraft were executed as threads with priorities that 
were assigned in the usual manner reflecting the relative urgency of 
these tasks.

Pathfinder contained an "information bus", which you can think of as a 
shared memory area used for passing information between different 
components of the spacecraft. A bus management task ran frequently with 
high priority to move certain kinds of data in and out of the 
information bus. Access to the bus was synchronized with mutual 
exclusion locks (mutexes)."

 From
"What really happened on Mars Rover Pathfinder"
http://www.rvs.uni-bielefeld.de/lectures/TechInf/TI2/download/19.49-1.1.html


Some lessons learned...
https://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf


Greets,
F.P.

Chris Burrows schreef op 2018-11-06 11:48:
> I recommend that you read Wirth's 1996 paper titled "Tasks versus
> Threads: An Alternative Multiprocessing Paradigm". The relative merits
> of tasks, processes, coroutines and threads are discussed.
> 
> "An alternative to threads is presented as a paradigm for
> single-processor multi-tasking systems. It avoids complex and hidden
> mechanisms for process scheduling, and is therefore particularly
> suitable for realtime systems requiring fast response times, and for
> small systems in general."
> 
> "Tasks, called commands, are a conceptual pillar of the Oberon
> operating environment. Making them interruptible adds significant
> power to the concept and is shown to require surprisingly few changes
> and additions to the existing system, hence retaining its basic
> compactness and efficiency."
> 
> An implementation of these ideas (called System7) on Native Oberon can
> be downloaded from the ETH Oberon site:
> 
> ftp://ftp.ethoberon.ethz.ch
> 
> by following the path:
> 
> ETHOberon/Contrib/System7/
> 
> Now that interrupts are working on Project Oberon 2013 it would be an
> interesting exercise to try out these concepts there as well,
> 
> Regards,
> Chris
> 
> Chris Burrows
> CFB Software
> http://www.astrobe.com/RISC5
> 
>> -----Original Message-----
>> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
>> Frans-Pieter Vonck
>> Sent: Tuesday, 6 November 2018 6:39 PM
>> To: Jörg Straube
>> Cc: ETH Oberon and related systems; paulreed at paddedcell.com
>> Subject: Re: [Oberon] a module a page (keeps the mind sane)?
>> 
>> Hi J rg,
>> 
>> I saw the coroutine module is not yet written for project oberon.
>> But that does not keep me from trying out the concept of cooperatieve
>> multitasking.
>> I will look into that,
>> 
>> Thanks.
>> F.P.
>> 
>> J rg Straube schreef op 2018-11-05 23:22:
>> > F.P.
>> >
>> > Installing tasks in the Oberon loop is THE way to enable multi
>> tasking
>> > in Oberon.
>> >
>> > T := Oberon.NewTask(myHandler, 1000);
>> > Oberon.Install(T);
>> >
>> > Every 1000 ms the procedure  myHandler  will be called.
>> >
>> > Another way to have cooperative multitasking is to implement module
>> >  Coroutines .
>> >
>> > br
>> > J rg
>> >
> 
> 
> --
> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related 
> systems
> https://lists.inf.ethz.ch/mailman/listinfo/oberon


More information about the Oberon mailing list