[En-Nut-Discussion] newLib integration
athomi at bluewin.ch
athomi at bluewin.ch
Sat Jun 20 13:10:17 CEST 2009
Hi Thiago
>Given that the Nut/OS only has cooperative threads, not preemptive
>threads, then it already is reentrant :)
I thought about your point but came to the conclusion that i have to disagree.
IMO making newlib reentrant means among others not to use global variables. Acctually newlib uses the variable
"errno" as a global variable (see the already mentioned article about porting newlib) and this variable has to be
"converted" into a (at least) task specific variable.
Cooperative or not, you can't garantee that a newlib call (which may set the "errno" global variable) is always
followed by the check of the function's "return value" (in this case the "errno" variable).
You might argue, that if we define a "design rule" that a newlib call has to be followed by its check of the errno (and
is not interruptable -- exept of interrupt service routines -- by the cooperative Nut/OS), then the non-reentrant
newlib functions may work. But i wouldn't count on the awareness of this "design rule" of all developers.
Regards,
Aurel
More information about the En-Nut-Discussion
mailing list