[Oberon] Oberon as (embedded) rtos.

Frans-Pieter Vonck fp at vonck.nl
Mon Nov 12 13:42:23 CET 2018


> They use the rtos Vxworks for flight systems and that has a message
> que between tasks
Nasa uses vxworks (closed source)
ESA uses RTEMS (open source)
https://www.rtems.org/

RTMES in combination with ADA
https://devel.rtems.org/wiki/TBR/UserManual/RTEMSAda
http://beru.univ-brest.fr/~singhoff/ENS/USTH/TP/tp.html#Ref1.1

Greets,
F.P.


Frans-Pieter Vonck schreef op 2018-11-12 12:27:
> Also interesting, the JPL Rule for inter process communication.
> 
> from: https://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
> ---------------------------------------------------------------------------
> Rule 6 (inter-process communication)
> 
> An IPC mechanism should be used for all task communication. Callbacks
> should be avoided. No task should directly execute code or access data
> that belongs to a different task. All IPC messages shall be received at 
> a
> single point in a task.
> 
> 
> Communication and data exchanges between different tasks (modules) in
> the system are
> best performed through a disciplined use of IPC (inter-process 
> communication)
> messaging. IPC messages should then contain only data, preferably no
> data pointers, and
> never any function pointers. Each task or module should maintain its
> own data structures,
> and not allow direct access to local data by other tasks. This style
> of software architecture
> is based on principles of software modularity, data hiding, and the
> separation of concerns
> that can avoid the need for the often more error-prone use of
> semaphores, interrupt
> masking and data locking to achieve task synchronization
> ----------------------------------------------------
> 
> 
> Found in System Oberon, message handlers!
> Now the question is how this message model is implemented in C++ by 
> JPL.
> They use the rtos Vxworks for flight systems and that has a message
> que between tasks
> See code below (From:
> https://www.uio.no/studier/emner/matnat/fys/FYS4220/h11/undervisningsmateriale/laboppgaver-rt/VxWorks-6.2_Application_Programmers_Guide.pdf)
> 
> /* In this example, task t1 creates the message queue and sends a 
> message
> * to task t2. Task t2 receives the message from the queue and simply
> * displays the message.
> */
> /* includes */
> #include <vxWorks.h>
> #include <msgQLib.h>
> /* defines */
> #define MAX_MSGS (10)
> #define MAX_MSG_LEN (100)
> MSG_Q_ID myMsgQId;
> 
> task2 (void)
> {
>   char msgBuf[MAX_MSG_LEN];
>   /* get message from queue; if necessary wait until msg is available 
> */
>   if (msgQReceive(myMsgQId, msgBuf, MAX_MSG_LEN, WAIT_FOREVER) == 
> ERROR)
>   return (ERROR);
>   /* display message */
>   printf ("Message from task 1:\n%s\n", msgBuf);
> }
> 
> #define MESSAGE "Greetings from Task 1"
> task1 (void)
> {
>    /* create message queue */
>    if ((myMsgQId = msgQCreate (MAX_MSGS, MAX_MSG_LEN, MSG_Q_PRIORITY))
>       == NULL)
>       return (ERROR);
>    /* send a normal priority message, blocking if queue is full */
>    if (msgQSend (myMsgQId, MESSAGE, sizeof (MESSAGE), WAIT_FOREVER,
>    MSG_PRI_NORMAL) == ERROR)
>    return (ERROR);
> }
> 
> 
> 
> Paul and Chris,
> Oberon in Space?
> http://flightsoftware.jhuapl.edu/
> 
> Greets,
> F.P.
> 
> 
> 
> Chris Burrows schreef op 2018-11-12 08:12:
>>> -----Original Message-----
>>> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
>>> Paul Reed
>>> Sent: Monday, 12 November 2018 12:26 AM
>>> To: ETH Oberon and related systems
>>> Subject: Re: [Oberon] Oberon as (embedded) rtos.
>>> 
>>> > https://en.wikipedia.org/wiki/Rate-monotonic_scheduling#cite_note-
>>> 12
>>> > ..."What really happened on Mars Rover Pathfinder"
>>> > http://www.rvs.uni-
>>> bielefeld.de/lectures/TechInf/TI2/download/19.49-1.
>>> > 1.ht
>>> > ml
>>> > ...Some lessons learned...
>>> > https://lars-lab.jpl.nasa.gov/JPL_Coding_Standard_C.pdf
>>> 
>>> Thanks, nice reading!  It reminded me that Chris Burrows has already
>>> pointed out how much you need to do of MISRA-C when writing in C,
>>> which with Oberon you get out-of-the-box.
>>> 
>> 
>> Thanks for remembering, Paul!
>> 
>> For those who were not fortunate enough to be able to attend Oberon 
>> Day 2011
>> this is a summary of my attempts to get some measure of the 
>> comparative
>> reliability of C and Oberon-07 when used for embedded software 
>> development.
>> 
>> From Wikipedia: "MISRA C is a set of software development guidelines 
>> for the
>> C programming language developed by MISRA (Motor Industry Software
>> Reliability Association). Its aims are to facilitate code safety, 
>> security,
>> portability and reliability in the context of embedded systems"
>> 
>> I took the 142 rules of the MISRA-C:2004 "Guidelines for the use of 
>> the C
>> language in critical systems" and applied them to Oberon-07. I 
>> discovered
>> that more than 70% of the rules are NOT required when programming in
>> Oberon-07. They are either already enforced by the language or are not
>> applicable.
>> 
>> Examples of MISRA rules that are not applicable to Oberon-07:
>> 
>>   Rule 14.4: The goto statement shall not be used. (Oberon-07 does not 
>> have
>> GOTO)
>> 
>>   Rule 14.5: The continue statement shall not be used. (Oberon-07 does 
>> not
>> have CONTINUE)
>> 
>> Examples of MISRA rules that are enforced by the design of Oberon-07:
>> 
>>   Rule 14.7: A function shall have a single point of exit at the end 
>> of the
>> function.
>> 
>>   Rule 16.6: The number of arguments passed to a function shall match 
>> the
>> number of parameters.
>> 
>> The remaining 30% of MISRA rules would need to be followed if using
>> Oberon-07 for critical systems. They include:
>> 
>>   Rule 2.4 (advisory): Sections of code should not be "commented out".
>> 
>>   Rule 20.4: Dynamic heap memory allocation shall not be used.
>> 
>> More information about MISRA and their guidelines can be found on 
>> their
>> website:
>> 
>>   www.misra.org.uk
>> 
>> Regards,
>> Chris Burrows
>> CFB Software
>> http://www.astrobe.com
>> 
>> 
>> --
>> Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related 
>> systems
>> https://lists.inf.ethz.ch/mailman/listinfo/oberon
> --
> 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