reentrant функции нужны для другого, для случаев когда функции
могут вызываться из биглупа и из прерываний одновременно, например.
Делать все функции подряд reentrant из-за коллбэков не стоит, т.к.
reentrant функции используют симулированный стек, который ограничен
в размерах, работают медленно, генерируется большой объём кода и
т.п. И вызов любой не-reentrant функции из reentrant функции
вызывает рекурсивно те же проблемы. А всё подряд reentrant не
сделаешь. reentrant это для "многозадачных" (биглуп и прерывания) функций и для рекурсивных функций (вроде qsort). Для остальных случаев нужно использовать OVERLAY.
https://www.keil.com/support/man/docs/c51/c51_le_reentrantfuncs.htm