Не вызввается функция из цикла while
- Войдите на сайт для отправки комментариев
Пнд, 21/05/2018 - 21:46
Не вызывается функция из цикла 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)
}
Она вызывается, только работает очень быстро. Для проверки - вставьте Serial.print внутри функции Delay_ns, чтобы убедиться, что она вызывается.
Полноценного вызова нет, т.к. промежуток паузы через значение переменной - ns не регулируется, а вызывая в цикле loop регулируется.
Если кто проверял и получилось изменять паузу через переменную - ns, (но нужен осциллограф чтобы убедиться) дайте знать какая у вас IDE Arduino.
Полноценного вызова нет, т.к. промежуток паузы через значение переменной - ns не регулируется, а вызывая в цикле loop регулируется.
Как определяли? на глазок? 10 тактов мк на глазок?...
16мгц, из них 10 тактов на глазок?....
Выше вам ответили....
Если кто проверял и получилось изменять паузу через переменную - ns, (но нужен осциллограф чтобы убедиться) дайте знать какая у вас IDE Arduino.
volatile в любой версии....
Осциллографом.
Осциллографом.
Выше ответил =) volatile uint8_t nn;
Буду пробывать.
Работает!!! Я глазам своим не поверил после того, что весь день намучился. Спасибо большое.
Прекрасно =)) Рад что помог =)))