Skip to content

Changes in Ticker cause UART to fail #14489

@SibertEnovates

Description

@SibertEnovates

Description of defect

When upgrading from Mbed OS 6.1 to 6.7, we saw weird behavior in our serial communication where most of our frames (about 40 bytes) are invalid because it usually drops at least one byte somewhere in communication. By one by one disabling components in, we managed to pin down the issue to a ticker somehow. When the ticker is disabled or replaced (for example using the 'call_every' function of the mbed event queue), the UART issue is resolved.
After some further testing the issue seems to appear from Mbed OS 6.6 and onwards, which makes sense as 6.6 saw an overhaul of the ticker system. When checking out the latest version of Mbed (6.9 as of time of writing) and reverting the commits in the ticker PR, the issue also goes away. This is also discussed in this PR.

Target(s) affected by this defect ?

STM32F030RC

Toolchain(s) (name and version) displaying this defect ?

  • CMake (Clion bundled 3.17.5)
  • GNU ARM embedded toolchain (2020 q2) arm-none-eabi-g++/gcc

What version of Mbed-os are you using (tag or sha) ?

  • mbed-os-6.6.0 and higher

What version(s) of tools are you using. List all that apply (E.g. mbed-cli)

  • mbed-cli 1.10.5 (used for mbed deploy and export)
  • c++-17

How is this defect reproduced ?

UART (baud 115200) is started, with regular data being send to UART. When a Ticker that ticks each 3 ms is started, the incoming data gets dropped.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions