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