Open RichardBrown384 opened 4 months ago
Possible fix
const auto scaledInputLatch = Scale * inputLatch;
if (scaledInputLatch) {
if (scaledTicks >= scaledValue) {
while (scaledTicks >= scaledValue) {
scaledValue += scaledInputLatch;
}
expiryCallback();
}
scaledValue -= scaledTicks;
return;
}
if (scaledTicks >= scaledValue) {
if (scaledValue) {
expiryCallback();
}
scaledValue = 0u;
return;
}
scaledValue -= scaledTicks;
Checklist
Describe the bug The IOC timers can infinite loop.
Problem code
The code infinite loops when the
inputLatch
has been programmed to zero.To Reproduce Steps to reproduce the behaviour:
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:
I'm not entirely sure how to interpret that statement.
Please complete the following information
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