-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Description of defect
In the CAN implementation for STM32 microcontrollers the CAN::read() function is responsible for clearing the flag that generates the Rx interrupt. This is because the flag is reset by a register that also controls the FIFO buffer. If the data is not pulled from the buffer before the flag is reset then the data will not be available.
The issue is that CAN::read() has uses a mutex which can't be used in an interrupt context.
Because you need to read the data before resetting the flag which is generating the interrupt and you cant read the data in an interrupt because of the mutex in the read function, it is impossible to use CAN with an interrupt.
As far as I can tell, this will affect all STM32 microcontrollers. It may also effect other platforms depending on their implementation.
Either the mutex needs to be removed or the data must be read and cached by a lower level ISR.
Target(s) affected by this defect ?
STM32
Toolchain(s) (name and version) displaying this defect ?
n/a
What version of Mbed-os are you using (tag or sha) ?
n/a
What version(s) of tools are you using. List all that apply (E.g. mbed-cli)
n/a
How is this defect reproduced ?
n/a