这可能是由于Atmel Studio默认使用-Funroll-loops参数而导致的。您可以通过将其值更改为-fno-unroll-loops来禁用此选项来优化代码。在AVR-GCC中,我们还可以开启优化等级-O1(该级别默认为-O0),这将为我们生成更小、更高效的代码。
下面是示例代码:
#include
// Disable loop unrolling
#pragma GCC optimize ("-fno-unroll-loops")
ISR(TIMER0_COMPA_vect)
{
// Empty ISR
}
int main(void)
{
// Enable timer0 compare interrupt
TIMSK0 |= (1 << OCIE0A);
// Set CTC mode, 64 prescaler
TCCR0A |= (1 << WGM01);
TCCR0B |= (1 << CS01) | (1 << CS00);
OCR0A = 249;
// Enable interrupts
sei();
while (1)
{
// Main loop
}
return 0;
}