-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Description
Description
The following test applications call puts inside an ISR which can lead to problems when newlib's locking functions are implemented by the platform:
tests/isr_yield_higher
tests/periph_rtc
Background
newlib's reentrant versions of system calls use lock functions for different lock objects. For example, puts locks the stdout file using _lock_acquire_recursive. While the lock functions in single-thread environments are only dummies, these functions would have to be implemented by the operating system in multi-thread environments.
The only reasonable way in RIOT to realize these lock functions
_lock_acquire
_lock_acquire_reusrive
_lock_try_acquire
_lock_try_acquire_reusrive
seems to be RIOT's built-in mechanism mutex and rmutex. Since mutex and rmutex don't work in interrupt context, system calls must not be used in ISRs.
The problem was found out in PR #11108.
Steps to reproduce
Enable locking functions in cpu/esp8266/syscalls.c in PR #11108 and flash tests/isr_yield_higher
make BOARD=esp8266-esp-12x -C tests/isr_yield_higher