Error __builtin_avr_delay_cycles expects a compile time integer constant |
![]() |
Добавил(а) microsin |
Ошибка связана с попыткой подставить в функцию _delay_us или _delay_us переменную вместо целочисленной константы: uint8_t delay10mks = 10; ... _delay_us(100 * delay10mks); Исправить ситуацию можно двумя способами. Во-первых, можно вместо _delay_us использовать функцию delayMicroseconds, которая есть среди библиотек Arduino. Имейте в виду, что эта функция имеет жестко определенные встроенные задержки на инструкциях nop, и поэтому она рассчитана на определенные значения тактовой частоты F_CPU. Во-вторых, можно заменить _delay_us своей реализацией функции задержки, примерно так: void mydyn_delay_us(uint16_t us) { for (unsigned i = 0; /* требуется как минимум поддержка C99 */ 0 < us; ++i) { if (0 != (us % 2)) { switch (i) { case 0: _delay_us(1 << 0); break; case 1: _delay_us(1 << 1); break; case 2: _delay_us(1 << 2); break; case 3: _delay_us(1 << 3); break; case 4: _delay_us(1 << 4); break; case 5: _delay_us(1 << 5); break; case 6: _delay_us(1 << 6); break; case 7: _delay_us(1 << 7); break; case 8: _delay_us(1 << 8); break; case 9: _delay_us(1 << 9); break; case 10: _delay_us(1 << 10); break; case 11: _delay_us(1 << 11); break; case 12: _delay_us(1 << 12); break; case 13: _delay_us(1 << 13); break; case 14: _delay_us(1 << 14); break; case 15: _delay_us(1 << 15); break; } } us >>= 1; } }
|