[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