RTEMS simple example
Joel Sherrill <joel@OARcorp.com>
joel.sherrill at OARcorp.com
Thu Sep 29 18:14:46 UTC 2005
Aleix Conchillo Flaque wrote:
> Hi,
>
> I've been playing a bit with RTEMS and thought that someone could be
> interested in another example of RTEMS usage. I have taken the algorithms
> found in a public file around called "stanford.c" and separated them into
> tasks. The example uses quite a few features of RTEMS, such as semaphores,
> message queues, events, memory regions and partitions and some other
> things.
Neat. Would you mind if it got merged into RTEMS examples?
> This is my first attempt at using RTEMS so I'm sure a lot of things could be
> done better and I would really appreciate if someone could point them
> out, and thus make the example better and useful for other people
> wanting to learn RTEMS.
You might want to consider adding a simple menu to the bottom of the
Init task which lets you print out the CPU usage or generate a stack
report if you have that turned on.
> I have copied below the README file so you don't have to open the file to
> see the idea.
The ERC32 specific addresses is easy to solve. We have this issue on
the RTEMS tests and solve it by declaring an array that is the memory
so the linker can easily account for it. It's just a test/demo so not
a problem. This is a hack at changing this.
static unsigned char partition_buffer[ 100000 ];
static void *partition_address = (void *) partition_buffer;
static unsigned int const partition_length = 100000;
static unsigned int const partition_buf_size = 10000;
static unsigned char region_buffer[ 20480 ];
static void *region_address = (void *) region_buffer;
static unsigned int const region_length = sizeof( region_buffer );
static unsigned int const region_page_size = 1024;
> The latest source tree can be found at:
>
> http://arch.hacks-galore.org/cgi-bin/archzoom.cgi/aconchillo@ieec.fcr.es--rtems/stanford--dev--0--LATEST
>>From there you can download a tarball. Or, you can download the tarball
> directly from:
> http://hacks-galore.org/aleix/rtems/rtems-stanford.tar.gz
>
> Thanks in advance for all the comments, critiques or whatever.
>
> aleix
>
> --
> Aleix Conchillo Flaque Software Engineer
> aconchillo at ieec.fcr.es Institut d'Estudis Espacials de Catalunya (IEEC)
> http://www.ieec.fcr.es
>
> ----------------------------------------
>
> RTEMS stanford example
> ----------------------
>
> This is a simple example to show some of the features of RTEMS.
>
> The application is based on three kinds of tasks:
>
> - wait task: this task waits for two events, RTEMS_EVENT_0 or
> RTEMS_EVENT_1 (see RTEMS documentation for event details).
> RTEMS_EVENT_0 is sent by application tasks indicating that
> they have finished. RTEMS_EVENT_1 can only be sent from the
> error task and indicates a fatal error causing the whole
> application to stop. When RTEMS_EVENT_0 is received the wait
> task also decrements the counter of running tasks in the
> system. This counter is controlled by a sempahore that with
> the current implementation is not needed at all (as it is
> only used by the wait task), but has been kept to show the
> RTEMS semaphore API.
>
> - error task: the error task is in charge of receving error
> messages on a queue. Two types of error messages can be
> received, normal or fatal errors. When a normal error is
> received, the error tasks prints the acompanying description
> in the message (only if debug is activated). If the error
> task receives a fatal error from an application task, it
> automatically sends an EVENT_1 to the wait task.
>
> - application tasks: these tasks perform some well known
> algorithms. The algorithms have been obtained from the
> public file stanford.c (which is also included in the 'etc'
> directory). All of the application tasks have the same
> priority, this means that if a task have the RTEMS_TIMESLICE
> mode activated, it will share the CPU with other tasks with
> the same priority and with RTEMS_TIMESLICE mode activated.
>
> Note that this example has only been tested in an ERC32 environment
> and may not work in other systems. For instance, the memory task uses
> specific ERC32 memory addresses which should be changed to the
> specific ones in another system.
>
> ***
>
> The stanford.c benchmarks were gathered by John Hennessy and modified
> by Peter Nye.
>
> --
> Aleix Conchillo Flaque <aconchillo at ieec.fcr.es>
>
>
>
--
Joel Sherrill, Ph.D. Director of Research & Development
joel at OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the users
mailing list