Skip to content

Commit 299a91d

Browse files
committed
support runtime variable for delayMicroseconds
1 parent ac7870d commit 299a91d

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

avr/cores/picocore/Arduino.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,25 @@ inline void check_valid_digital_pin(uint8_t pin)
5656
{
5757
if (__builtin_constant_p(pin)) {
5858
if (pin >= NUM_DIGITAL_PINS) badArg("pin out of range");
59-
} else {
59+
}
60+
/*
61+
else {
6062
badArg("pin must be a constant");
6163
}
64+
*/
6265
}
6366

64-
/*
6567
__attribute((always_inline))
66-
inline void delayMicroseconds(uint16_t us)
68+
static inline void delayMicroseconds(uint16_t us)
6769
{
68-
_delay_us(us);
70+
us >>= 1;
71+
if (us <= 2) return; // function overhead is ~2us
72+
do {
73+
// loop overhead is 4 cycles, so 0.5us @8MHz
74+
_delay_us(1.5);
75+
} while (--us);
6976
}
70-
*/
71-
#define delayMicroseconds(us) _delay_us(us)
77+
// #define delayMicroseconds(us) _delay_us(us)
7278

7379
void delay(uint16_t count);
7480

0 commit comments

Comments
 (0)