[PATCH 7/7] rtems: Add rtems_task_build()

Gedare Bloom gedare at rtems.org
Sun Aug 30 15:17:50 UTC 2020


On Sun, Aug 30, 2020 at 8:50 AM Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
>
> On 22/08/2020 09:49, Chris Johns wrote:
>
> > On 21/8/20 9:51 pm, Sebastian Huber wrote:
> >> In contrast to rtems_task_create() this function creates a task with a
> >> user-provided task storage area.
> > The name is build but it creates a task? I am wondering about
> > rtems_task_create_static or something along this line?
>
> A function to do a static initialization is a contradiction from my
> point of view. Static initialization means for me that you statically
> initialize a data structure and then it is ready to use (it may involve
> a static constructor).
>
> The function builds a task from user-provided (stack, attributes, etc.)
> and system-provided (thread control block) components.
>

yes, as a technical term we usually take "static" to mean something
done at compile/build time.

> >
> >> Close #3959.
> > Sorry, I had not read the ticket's details.
>
> There is a similar ticket for message queues:
>
> https://devel.rtems.org/ticket/4007
>
> >
> > Chris
> >
> >> ---
> >>   cpukit/Makefile.am                     |   1 +
> >>   cpukit/include/rtems/rtems/tasks.h     |  65 ++++++
> >>   cpukit/include/rtems/rtems/tasksimpl.h |  11 +
> >>   cpukit/rtems/src/taskbuild.c           | 273 ++++++++++++++++++++++++
> >>   cpukit/rtems/src/taskcreate.c          | 274 +++++--------------------
> >>   testsuites/sptests/sp01/init.c         |  22 +-
> >>   testsuites/sptests/sp01/sp01.doc       |   1 +
> >>   testsuites/sptests/sp01/system.h       |   2 +-
> >>   8 files changed, 413 insertions(+), 236 deletions(-)
> >>   create mode 100644 cpukit/rtems/src/taskbuild.c
> >>
> >> diff --git a/cpukit/Makefile.am b/cpukit/Makefile.am
> >> index bc56822cf8..e382478eac 100644
> >> --- a/cpukit/Makefile.am
> >> +++ b/cpukit/Makefile.am
> >> @@ -785,6 +785,7 @@ librtemscpu_a_SOURCES += rtems/src/statustext.c
> >>   librtemscpu_a_SOURCES += rtems/src/statustoerrno.c
> >>   librtemscpu_a_SOURCES += rtems/src/systemeventreceive.c
> >>   librtemscpu_a_SOURCES += rtems/src/systemeventsend.c
> >> +librtemscpu_a_SOURCES += rtems/src/taskbuild.c
> >>   librtemscpu_a_SOURCES += rtems/src/taskcreate.c
> >>   librtemscpu_a_SOURCES += rtems/src/taskdelete.c
> >>   librtemscpu_a_SOURCES += rtems/src/taskexit.c
> >> diff --git a/cpukit/include/rtems/rtems/tasks.h b/cpukit/include/rtems/rtems/tasks.h
> >> index 12c323e60e..dff811686a 100644
> >> --- a/cpukit/include/rtems/rtems/tasks.h
> >> +++ b/cpukit/include/rtems/rtems/tasks.h
> >> @@ -164,6 +164,71 @@ rtems_status_code rtems_task_create(
> >> [...]
> >> +  /**
> >> +   * @brief This member defines the optional handler to free the task storage
> >> +   *   area.
> >> +   *
> >> +   * It may be NULL.
> >> +   */
> >> +  void ( *storage_free )( void * );
> > Called under what context? What can this call do? For example call the standard
> > heap allocator.
>
> This is a good question.  What about:
>
> @brief This member defines the optional handler to free the task storage
> area.
>
> It is called when the task building aborts due to a failed task create
> extension or the task is deleted. It is called from task context under
> protection of the object allocator lock. It is allowed to call free() in
> this handler.
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel


More information about the devel mailing list