_delay_ms(t) в AtmelStudio не воспринимает переменную t

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Попытался скомпилировать вот этот код для Atmega328 в AtmelStudio v.7

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>

int main(void){	
  DDRC |= 1>>0;
  PORTC &= ~(1>>0);
  while (1) {
	  PORTC |= (1>>0);
	  for(uint8_t t=0;t<200;t++){
	  _delay_ms(t);
	  }
	  PORTC &= ~(1>>0);
	  _delay_ms(200);	  
	}
}

Выдает ошибку: ожидает целочисленную константу

Если не использовать переменную , то естественно все компилируется.
Кто подскажет,как заставить _delay_ms(t) работать от переменной?

 

 

rkit
Offline
Зарегистрирован: 23.11.2016

Никак. Этот макрос не принимает переменную, ты сам сказал.

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Я так понимаю, это не работает только в AtmelStudio?

rkit
Offline
Зарегистрирован: 23.11.2016

Проверь голову, у тебя с ней что-то не в порядке.

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Проверил, все в порядке, что дальше?

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);  
}
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  for( int i=0;i<100;i++){
  delay(1000+i);                     
  }
  digitalWrite(LED_BUILTIN, LOW);    
  delay(1000);                       
}

А для IDE это не является ошибкой.

 

 

SAB
Offline
Зарегистрирован: 27.12.2016

попробуй объявить ее как глобальной переменной

ua4lcn
Offline
Зарегистрирован: 27.02.2016

SAB пишет:

попробуй объявить ее как глобальной переменной

Не прокатывает Ни локальной ,ни глобальной.

 

ua4lcn
Offline
Зарегистрирован: 27.02.2016

SAB пишет:

попробуй объявить ее как глобальной переменной

Не прокатывает Ни локальной ,ни глобальной.

 

nik182
Offline
Зарегистрирован: 04.05.2015

А самому макрос написать ? Не? Можно и не макрос а функцию с тем же функционалом. Там ж, небойсь , волатильная переменная декрементится ?

rkit
Offline
Зарегистрирован: 23.11.2016

Тогда глаза проверь. У тебя delay написано, а не _delay_ms.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ua4lcn пишет:

Проверил, все в порядке, что дальше?

Что ты проверил? Где тут  _delay_ms() ?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

ua4lcn пишет:

Я так понимаю, это не работает только в AtmelStudio?

Это не работает НИГДЕ. 
В отличии от delay(), для _delay_ms()  нужно указывать заранее определённое число, т.к. задержка рассчитывается при компиляции. Нельзя туда подставлять переменную.

ua4lcn пишет:

как заставить _delay_ms(t) работать от переменной?

Увы, никак.

b707
Offline
Зарегистрирован: 26.05.2017

ТС, ты зачем Атмелстудию выбрал? Покрасоваться?
Раз не можешь свою функцию delay() на С написать, программируй в Ардуино Иде, не выпендривайся :)

ua4lcn
Offline
Зарегистрирован: 27.02.2016

b707 пишет:
ТС, ты зачем Атмелстудию выбрал? Покрасоваться?
Раз не можешь свою функцию delay() на С написать, программируй в Ардуино Иде, не выпендривайся :)

Ну вообще то, позже, функцию задержки свою прописал. Просто пришлось столкнуться с кодом в AtmelStudio. Раньше, плотно, не писал в этой проге. Вот и решил спросить у коллег.

ua4lcn
Offline
Зарегистрирован: 27.02.2016

Jeka_M пишет:

ua4lcn пишет:

Я так понимаю, это не работает только в AtmelStudio?

Это не работает НИГДЕ. 
В отличии от delay(), для _delay_ms()  нужно указывать заранее определённое число, т.к. задержка рассчитывается при компиляции. Нельзя туда подставлять переменную.

ua4lcn пишет:

как заставить _delay_ms(t) работать от переменной?

Увы, никак.


Спасибо, а то были какие то сомнения.