Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make ticker computation use shift-by-0 #14532

Merged
merged 1 commit into from
Apr 13, 2021
Merged

Commits on Apr 12, 2021

  1. Make ticker computation use shift-by-0

    Runtime code that analysed clock frequency to determine numerator and
    denominator for conversion to standard 1MHz failed to handle the case
    of either being 1 correctly.
    
    Although it would spot other values that could be performed as shifts,
    it failed to spot that 1 is "shift by 0", so would end up doing runtime
    multiply and/or divide by 1. The runtime divide by 1 could be slow on a
    Cortex-M0 device, increasing interrupt latency.
    
    UART character loss on STM32F0 devices has been traced to this incorrect
    code.
    
    Correct the `exact_log2` routine so that `exact_log2(1)` returns 0 to
    fix this.
    
    Original code had a single special no-multiply-or-divide case for
    hardware clock frequency being exactly 1MHz, as USTICKER is on STM32F0 -
    this code lacks that but has a more general special case that covers all
    shift-convertible frequencies like 500kHz or 8MHz, which should be
    similar speed as shifts are cheap.
    kjbracey committed Apr 12, 2021
    Configuration menu
    Copy the full SHA
    904d4e4 View commit details
    Browse the repository at this point in the history