-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Checklist
- The application is running with a good CMOS configuration.
Describe the bug
The IOC timers can infinite loop.
Problem code
if (scaledTicks >= scaledValue) {
const auto scaledInputLatch = Scale * inputLatch;
while (scaledTicks >= scaledValue) {
scaledValue += scaledInputLatch;
}
expiryCallback();
}
scaledValue -= scaledTicks;
The code infinite loops when the inputLatch
has been programmed to zero.
To Reproduce
Steps to reproduce the behaviour:
- Configure a timer
- While the timer is counting down program 0 to the input latch
- Expire the timer.
Expected behaviour
While this is a programming error, there's an additional dimension that wasn't thought about durning development. Namely what's supposed to happen when the timer latch is programmed to zero? Does the IOC continuously set the timer bits in IRQ A or does it only do that the first time the timer expires?
The VTI manual says:
If a counter is loaded with zero it continuously reloads and does not count.
I'm not entirely sure how to interpret that statement.
Please complete the following information
- Version CURRENT HEAD
Additional context
The IOC timers (and timers in general) don't currently have any unit tests. Unit tests for the IOC should include this case.
See #5