Skip to content

Commit 18cd97e

Browse files
committed
fix bug making cycle counting affect micros() on some platforms
1 parent be40f79 commit 18cd97e

File tree

1 file changed

+14
-12
lines changed

1 file changed

+14
-12
lines changed

common/scoped_cycle_counter.h

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,35 @@
33

44
class ScopedCycleCounter {
55
public:
6-
ScopedCycleCounter(uint64_t& dest) :
7-
dest_(dest) {
8-
#ifndef DISABLE_DIAGNOSTIC_COMMANDS
6+
static inline uint32_t getCycles() {
97
#ifdef TEENSYDUINO
10-
cycles_ = ARM_DWT_CYCCNT;
8+
return ARM_DWT_CYCCNT - counted_cycles_;
119
#else
12-
cycles_ = DWT->CYCCNT;
10+
return DWT->CYCCNT - counted_cycles_;
1311
#endif
12+
}
13+
ScopedCycleCounter(uint64_t& dest) :
14+
dest_(dest) {
15+
#ifndef DISABLE_DIAGNOSTIC_COMMANDS
16+
cycles_ = getCycles();
1417
#endif
1518
}
1619
~ScopedCycleCounter() {
1720
#ifndef DISABLE_DIAGNOSTIC_COMMANDS
1821
uint32_t cycles;
19-
#ifdef TEENSYDUINO
20-
cycles = ARM_DWT_CYCCNT - cycles_;
21-
ARM_DWT_CYCCNT = cycles_;
22-
#else
23-
cycles = DWT->CYCCNT - cycles_;
24-
DWT->CYCCNT = cycles_;
25-
#endif
22+
cycles = getCycles() - cycles_;
23+
noInterrupts();
24+
counted_cycles_ += cycles;
25+
interrupts();
2626
dest_ += cycles;
2727
#endif
2828
}
2929
private:
30+
static uint32_t counted_cycles_;
3031
uint32_t cycles_;
3132
uint64_t& dest_;
3233
};
3334

35+
uint32_t ScopedCycleCounter::counted_cycles_ = 0;
3436

3537
#endif

0 commit comments

Comments
 (0)