Спасибо! Искал в библиотеках, поэтому и не нашёл.Так и есть (может опять не правильно всё понял))
1.delayMicroseconds() не использует
Timer0, а , насколько я смог понять, считает циклы сама , возвращая 1через каждые 4-ре цикла. Поэтому минимальная задержка зависит от частоты процессора.
Поэтому эту функцию и можно использовать в прерываниях.
2.delay() использует micros(), который работает по прерываниям от счётчика Timer0.
Поэтому и нельзя прерывание использовать в прерываниях.
3.Прерывания в delay() запрещаются только во время переполнения регистров счётчика, но после сброса все флаги сохраняются, так что другое прерывание может "потеряться" если только сработает точно во время overflow Timer0 (это уже мои догадки...)
Ну а чё, у нас в России всё череж жопу.
Кто Вам сказал? Суворов вот "через Альпы" ходил.
Функцию delay() нельзя использовать в прерываниях, а вот delayMicroseconds() - можно.
Ещё бы знать почему?
Откройте текст этих функций и посмотрите. Если вопросы останутся, тогда спросите.
Откройте текст этих функций и посмотрите. Если вопросы останутся, тогда спросите.
К сожалению, пока не смог найти текст функции delay(), но нашёл полезную для себя ветку на форуме
http://arduino.ru/forum/programmirovanie/vzaimodeistvie-preryvanii-s-delay-i-mezhdu-soboi
Пока понял лишь , что delay() работает используя micros() (минимум 4 микросекунды??) по прерываниям от счётчика Timer0,
Так же и delayMicroseconds() использует Timer0.
и в это время запрещаются все другие прерывания. Не ясно пока становятся ли они в очередь, или пропадают.
Был бы благодарен, если-бы Вы подсказали, где можно посмотреть текст этих функций.
К сожалению, пока не смог найти текст функции delay()
Она лежит на Вашем компьютере, неужели поиском по файлам не умеете пользоваться?
delayMicroseconds() использует Timer0.
Это неправда, Вас обманули. Хотя, глянул по Вашей ссылке, там такого не написано. Скорее всего Вы это сами придумали. Так вот, это не так.
и в это время запрещаются все другие прерывания.
Это тоже неправда. Ничего там не запрещается.
где можно посмотреть текст этих функций.
На Вашем собственно компьютере в файле
<где у Вас там стоит Arduino IDE>\hardware\arduino\avr\cores\arduino\wiring.c
Спасибо! Искал в библиотеках, поэтому и не нашёл.Так и есть (может опять не правильно всё понял))
1.delayMicroseconds() не использует
Timer0, а , насколько я смог понять, считает циклы сама , возвращая 1через каждые 4-ре цикла. Поэтому минимальная задержка зависит от частоты процессора.
Поэтому эту функцию и можно использовать в прерываниях.
2.delay() использует micros(), который работает по прерываниям от счётчика Timer0.
Поэтому и нельзя прерывание использовать в прерываниях.
3.Прерывания в delay() запрещаются только во время переполнения регистров счётчика, но после сброса все флаги сохраняются, так что другое прерывание может "потеряться" если только сработает точно во время overflow Timer0 (это уже мои догадки...)