Как использовать переменную в качестве параметра в функции, которая поддерживает только константное выражение - PullRequest
3 голосов
/ 09 ноября 2011

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

__delay_cycles(var); 

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

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

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

Ответы [ 3 ]

3 голосов
/ 09 ноября 2011

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

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

2 голосов
/ 09 ноября 2011

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

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

0 голосов
/ 09 ноября 2011
if(var==1)
  __delay_cycles(1);
else if(var==2)
  __delay_cycles(2);
else if(var==3)
  __delay_cycles(3);

... и т. Д.

...