----- Am 17. Nov 2018 um 2:02 schrieb Chris Johns chr...@rtems.org: > On 16/11/18 5:08 pm, Sebastian Huber wrote: >> The RTEMS_USE_16_BIT_OBJECT define is not set by an RTEMS port. Remove >> support for 16-bit object identifiers. If someone really wants to use >> RTEMS on a 16-bit target, then it is better to use self-contained >> objects instead of playing around with object identifier optimizations. > > Are self-contained threads supported?
Self-contained threads are not yet supported. There are some steps left to realize them. One issue is that the existing APIs using a thread ID should also work with threads without a normal object ID. We could remove one bit from the object class field and use it to indicate if the ID is a normal object ID or a pointer (the pointer address must be at least 2-byte aligned). In case the normal lookup fails, then we check the bit and if it set, then we assume it is a pointer to a TCB. Another problem is that the TCB has a configuration defined size. We could layout self-contained threads like this: TCP space for configuration defined TCB content space for thread-local storage (size defined at link-time) space for POSIX key value pairs space for stack #define RTEMS_THREAD_DEFINE(name, size) struct { Thread_Control TCB; char space[size]; } _Thread_Object_##name; static const Thread_Configuration _Thread_Config_##name = { .name = #name, .object = &_Thread_Object_##name.TCB, .size = size }; RTEMS_ROSET_ITEM(_Threads, &_Thread_Config_##name) The threads need a static constructor, if the allocated size is too small, then we issue a fatal error. I think we should move the POSIX key value pairs to thread-specific storage (for example at the end of the stack area, a stack overflow would then first hit the POSIX key values of the same thread) for SMP performance reasons and memory management issues with the free list which is currently used. _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel