forked from Imagelibrary/rtems
Notepads where a feature of RTEMS' tasks that simply functioned in the same way as POSIX keys or threaded local storage (TLS). They were introduced well before per task variables, which are also deprecated, and were barely used in favor of their POSIX alternatives. In addition to their scarce usage, Notepads took up unnecessary memory. For each task: - 16 32-bit integers were allocated. - A total of 64 bytes per task per thread. This is especially critical in low memory and safety-critical applications. They are also defined as uint32_t, and therefore are not guaranteed to hold a pointer. Lastly, they are not portable solutions for SMP and uniprocessor systems, like POSIX keys and TLS. updates #2493.
36 lines
1.1 KiB
Plaintext
36 lines
1.1 KiB
Plaintext
--
|
|
|
|
Overview of newlib support (newlib is from CYGNUS)
|
|
Each task can have its own libc state including:
|
|
open stdio files
|
|
strtok
|
|
multi precision arithmetic state
|
|
etc.
|
|
|
|
This is implemented by a reentrancy data structure for each task.
|
|
|
|
When a task is "started" (in RTEMS sense) the reentrancy structure
|
|
is allocated.
|
|
|
|
When task is switched to, the value of global variable _impure_ptr
|
|
is changed to the value of the new tasks reentrancy structure.
|
|
|
|
When a task is deleted
|
|
atexit() processing (for that task) happens
|
|
task's stdio buffers are flushed
|
|
|
|
When exit(3) is called
|
|
calling task's atexit processing done
|
|
global libc state atexit processing done
|
|
(this will include any atexit routines installed by drivers)
|
|
executive is shutdown
|
|
causes a context switch back to bsp land
|
|
|
|
|
|
NOTE:
|
|
libc extension are installed by bsp_libc_init()
|
|
iff we are using clock interrupts.
|
|
This hack is necessary to allow the tmtests to avoid
|
|
timing the extensions.
|
|
|