On 13/09/2020 23:17, Joel Sherrill wrote:
On Sun, Sep 13, 2020 at 3:41 AM Sebastian Huber
<sebastian.hu...@embedded-brains.de
<mailto:sebastian.hu...@embedded-brains.de>> wrote:
On 12/09/2020 02:53, Chris Johns wrote:
> On 12/9/20 1:34 am, Sebastian Huber wrote:
>> + * @par Notes
>> + * By default, the calculation for the required memory in the
RTEMS Workspace
>> + * for tasks assumes that all Classic API Tasks are created by
>> + * rtems_task_create(). This configuration option can be used
to reduce the
>> + * required memory for the system-provided task storage areas
since tasks
>> + * created by rtems_task_create_from_config() use a
user-provided task storage
>> + * area.
>> + */
>> +#define CONFIGURE_TASKS_CREATED_FROM_CONFIG
> The documentation does not deal with 0 the default. It is fair
to assume a
> config that controls allocations for an API is consistent with
similar calls. It
> I set message queues to 0 any create call fails. I needed to
check the patch to
> know if 0 meant you could not create any tasks from a config.
>
> If CONFIGURE_TASKS_CREATED_FROM_CONFIG was added to the
configuration table
> (which I am ok with) the rtems_task_create_from_config() could
check for a
> non-zero value before proceeding.
The tasks created by rtems_task_create_from_config() are normal
Classic
API tasks. The only difference is that the thread storage is
provided by
the user. If you get the configuration wrong, you just have a wrong
workspace size. There are lots of other ways to get a wrong workspace
size. I am not sure if we really should add extra code just to check
this option and produce more run-time errors.
>
>> +#ifndef CONFIGURE_TASKS_CREATED_FROM_CONFIG
>> + #define CONFIGURE_TASKS_CREATED_FROM_CONFIG 0
>> +#endif
>> +
>> +#if CONFIGURE_TASKS_CREATED_FROM_CONFIG > CONFIGURE_MAXIMUM_TASKS
>> + #error "CONFIGURE_TASKS_CREATED_FROM_CONFIG shall be less
than or equal to CONFIGURE_MAXIMUM_TASKS"
>> +#endif
>> +
>> #ifndef CONFIGURE_MAXIMUM_POSIX_THREADS
>> #define CONFIGURE_MAXIMUM_POSIX_THREADS 0
>> #endif
>> diff --git a/cpukit/include/rtems/confdefs/wkspace.h
b/cpukit/include/rtems/confdefs/wkspace.h
>> index de476dbf82..215cdcb141 100644
>> --- a/cpukit/include/rtems/confdefs/wkspace.h
>> +++ b/cpukit/include/rtems/confdefs/wkspace.h
>> @@ -100,7 +100,9 @@
>> + _CONFIGURE_POSIX_INIT_THREAD_STACK_EXTRA \
>> + _CONFIGURE_LIBBLOCK_TASKS_STACK_EXTRA \
>> + CONFIGURE_EXTRA_TASK_STACKS \
>> - + rtems_resource_maximum_per_allocation( _CONFIGURE_TASKS ) \
>> + + rtems_resource_maximum_per_allocation( \
>> + _CONFIGURE_TASKS - CONFIGURE_TASKS_CREATED_FROM_CONFIG \
> I am confused by this. Does _CONFIGURE_TASKS have the number of
tasks created
> from config included in it? How was that added in?
>
> I would have assumed I set CONFIGURE_TASKS_CREATED_FROM_CONFIG
and that would be
> added _CONFIGURE_TASKS internally.
>
> Sorry, I think I am not understanding something.
My proposal is to configure the maximum Classic API tasks as usual:
#define CONFIGURE_MAXIMUM_TASKS 123
Then also define how many are created by
rtems_task_create_from_config():
#define CONFIGURE_TASKS_CREATED_FROM_CONFIG 42
An alternative could be to do something like this:
#define CONFIGURE_MAXIMUM_TASKS 81
#define CONFIGURE_MAXIMUM_TASKS_CREATED_FROM_CONFIG 42
However, this has some issues:
1. What happens if you use the unlimited option for both?
Make it clear that CONFIGURE_MAXIMUM_TASKS_CREATED_FROM_CONFIG is a
subset of CONFIGURE_MAXIMUM_TASKS.
CONFIGURE_MAXIMUM_TASKS_CREATED_FROM_CONFIG must be strictly <=
CONFIGURE_MAXIMUM_TASKS.
CONFIGURE_MAXIMUM_TASKS_CREATED_FROM_CONFIG can't have unlimited set.
Check all that from confdefs.h.
2. You need extra code to enforce the individual maximum values.
Macros I think. At compile time.
3. It suggests that the tasks belong to different APIs or object
classes. This is not the case.
Not if explained well.
What about:
CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE
or
CONFIGURE_TASKS_WITH_USER_PROVIDED_STORAGE
I don't like the work maximum for this configuration option. You can
also create more that this value indicates, however, at the expense of a
wasted system-provided stack space.
This new name makes the configuration independent of a directive name
(rtems_task_create_from_config(), rtems_task_build(), rtems_task_make(),
...). Long but descriptive option names a not really an issue since you
write them only once in your application.
This new option has the following constraints:
1. CONFIGURE_MINIMUM_TASKS_WITH_USER_PROVIDED_STORAGE <=
CONFIGURE_MAXIMUM_TASKS
2. The unlimited flag must not be set.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel