Как использовать переменную как параметр в функции, которая поддерживает только постоянное выражение

Я использую эту функцию:

__delay_cycles(var); 

и я получаю следующую ошибку:

Аргумент _delay_cycles должен быть постоянным выражением

Справедливо! Но как я могу обойти это? Я должен каждый раз откладывать свою программу с разным значением. Я получаю данные от RS232, и я заражен им в переменной int . Я должен использовать эту функцию, и я не могу изменить ее структуру. Я использую AtMega16.

Одно из предположений, которое сразу приходит в голову, – вызвать __delay_cycles() с постоянным аргументом, но сделать это в цикле и изменить количество итераций цикла.

Цикл добавит некоторые накладные расходы, поэтому, если вам нужна точность, вам придется вычесть (постоянную) стоимость одной итерации цикла из (константного) аргумента в __delay_cycles() .

Не используйте эту функцию. По-видимому, это нестандартный техасский хлам, который не ведет себя в соответствии с правилами языка C. Вместо этого напишите свою собственную функцию задержки, используя таймеры на кристалле, или найдите ее в сети. Занимает менее 1 часа работы, что, без сомнения, меньше времени, чем вы будете размышлять о значении различных нестандартных барахлов.

Настоящая причина, почему встраиваемая индустрия имеет так много дерьмовых компиляторов, заключается в том, что встроенные программисты соглашаются на постоянную подачу нестандартного мусора, даже если нет причин, чтобы когда-либо отклоняться от стандарта C.

 if(var==1) __delay_cycles(1); else if(var==2) __delay_cycles(2); else if(var==3) __delay_cycles(3); 

…и так далее.