Не вызввается функция из цикла while

mazzz1
Offline
Зарегистрирован: 21.05.2018

Не вызывается функция из цикла while. Всем привет. На первый взгляд все очень просто, но одна из функций в цикле while не выполняется, а именно Delay_ns() (18-20 строки в коде), при этом другая High_13() работает. Если вызывать эти функции в обычном цикле loop(), то все работает. Помогите решить проблему.

uint8_t ns = 10;
uint8_t nn;
//------------------------------------------
 
void setup(){
  pinMode(13, OUTPUT);
}
//------------------------------------------
 
void loop(){
  looppp();         //вызов функции бесконечного цикла
}
//------------------------------------------
 
void looppp(){      //функции бесконечного цикла
  while(1){
    High_13();      //включаем 13-й pin
    Delay_ns();     //пауза (не вызывается)
    Low_13();       //выключаем 13-й pin
    Delay_ns();     //пауза (не вызывается)
  } 
}
//------------------------------------------
 
void Delay_ns(){        //функция паузы
  nn = 1;
  while(nn < ns){
    nn++;
  }
}
//------------------------------------------
 
void High_13(){
  PORTB = B00100000;    //включаем 13-й pin (вывод РВ5)
}
//------------------------------------------
 
void Low_13(){
  PORTB = B00000000;    //выключаем 13-й pin (вывод РВ5)
}
 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Она вызывается, только работает очень быстро. Для проверки - вставьте Serial.print внутри функции Delay_ns, чтобы убедиться, что она вызывается.

mazzz1
Offline
Зарегистрирован: 21.05.2018

Полноценного вызова нет, т.к. промежуток паузы через значение переменной - ns не регулируется, а вызывая в цикле loop регулируется.

mazzz1
Offline
Зарегистрирован: 21.05.2018

Если кто проверял и получилось изменять паузу через переменную - ns, (но нужен осциллограф чтобы убедиться) дайте знать какая у вас IDE Arduino.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

mazzz1 пишет:

Полноценного вызова нет, т.к. промежуток паузы через значение переменной - ns не регулируется, а вызывая в цикле loop регулируется.

Как определяли? на глазок? 10 тактов мк на глазок?...

16мгц, из них 10 тактов на глазок?....

Выше вам ответили....

 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

mazzz1 пишет:

Если кто проверял и получилось изменять паузу через переменную - ns, (но нужен осциллограф чтобы убедиться) дайте знать какая у вас IDE Arduino.

volatile в любой версии....

mazzz1
Offline
Зарегистрирован: 21.05.2018

Осциллографом.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

mazzz1 пишет:

Осциллографом.

Выше ответил =) volatile uint8_t nn;

mazzz1
Offline
Зарегистрирован: 21.05.2018

Буду пробывать.

mazzz1
Offline
Зарегистрирован: 21.05.2018

Работает!!! Я глазам своим не поверил после того, что весь день намучился. Спасибо большое.

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

mazzz1 пишет:
Работает!!! Я глазам своим не поверил после того, что весь день намучился. Спасибо большое.

Прекрасно =)) Рад что помог =)))