Делаю ПБ скоростных счетчиков с разными функциями для 4808 (там прерывание на любом пине) на основе штатного.
И вот в одной из настроек штатного есть такие строки при компиляции
void _SCT_1coutFunction()
{ _SCT_1IC++;
attachInterrupt(digitalPinToInterrupt (2), _SCT_1positiveCoutFunction, RISING );
}
Правильно ли я понимаю, что зайдя в функцию _SCT_1coutFunction, мы не выйдем из нее пока не случится другое прерывание и не отработает уже другая функция _SCT_1positiveCoutFunction?
Уточните плиз по прерыванию
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Уточните плиз по прерыванию
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Уточните плиз по прерыванию
Нет.Ingwar писал(а): 17 окт 2020, 21:32 Правильно ли я понимаю, что зайдя в функцию _SCT_1coutFunction, мы не выйдем из нее пока не случится другое прерывание и не отработает уже другая функция _SCT_1positiveCoutFunction?
настроит прерывание на пине 2 по положительному перепаду, фронту, по которому будет выполнен обработчик _SCT_1positiveCoutFunctionIngwar писал(а): 17 окт 2020, 21:32 attachInterrupt(digitalPinToInterrupt (2), _SCT_1positiveCoutFunction, RISING );
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Уточните плиз по прерыванию
Все, врубился

Отправлено спустя 7 минут 21 секунду:
Все возможные варианты прерывания декларируем в setup, а потом, после срабатывания первого из них, в его функции задаем другое, которого будем ждать и т. д.?


Отправлено спустя 7 минут 21 секунду:
Все возможные варианты прерывания декларируем в setup, а потом, после срабатывания первого из них, в его функции задаем другое, которого будем ждать и т. д.?
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Уточните плиз по прерыванию
Прерывание можно объявить в любой момент. Так-же его можно всегда перенастроить - изменить обработчик или событие его вызывающее.Ingwar писал(а): 17 окт 2020, 22:36 Все возможные варианты прерывания декларируем в setup, а потом, после срабатывания первого из них, в его функции задаем другое, которого будем ждать и т. д.?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Уточните плиз по прерыванию
Только не в составе функции? Задекларировал в сетапе - компилится, но не работает)
Да, наверное, но мне пока рано... пока копипаст... вдумчивый копипастSancho писал(а): 17 окт 2020, 22:42 Так-же его можно всегда перенастроить - изменить обработчик или событие его вызывающее.

Отправлено спустя 49 минут 32 секунды:
Еще не могу понять почему выход на 7 пине не работает в такой конструкции
[spoiler]bool re=0;
void setup()
{
attachInterrupt (0, _SCT_1coutFunction, FALLING );
attachInterrupt(0, _SCT_1positiveCoutFunction, RISING );
pinMode(7, OUTPUT);
}
void loop()
{
digitalWriteFast(7, re);
}
void _SCT_1coutFunction()
{
re=0;
attachInterrupt( 0 , _SCT_1positiveCoutFunction, RISING );
}
void _SCT_1positiveCoutFunction()
{
re=1;
attachInterrupt( 0 , _SCT_1coutFunction, FALLING );
}[/spoiler]
Но работает в такой
[spoiler]void setup()
{
attachInterrupt (0, _SCT_1coutFunction, FALLING );
attachInterrupt(0, _SCT_1positiveCoutFunction, RISING );
pinMode(7, OUTPUT);
}
void loop()
{
}
void _SCT_1coutFunction()
{
digitalWriteFast(7, 0);
attachInterrupt( 0 , _SCT_1positiveCoutFunction, RISING );
}
void _SCT_1positiveCoutFunction()
{
digitalWriteFast(7, 1);
attachInterrupt( 0 , _SCT_1coutFunction, FALLING );
}[/spoiler]
Не работает в этой
[spoiler]bool Dubl_fr;
bool out7;
void setup()
{
attachInterrupt (0, _SCT_1coutFunction, FALLING );
attachInterrupt(0, _SCT_1positiveCoutFunction, RISING );
pinMode(7, OUTPUT);
}
void loop()
{
out7 = Dubl_fr;
digitalWriteFast(7, out7 );
}
void _SCT_1coutFunction()
{
Dubl_fr = 0;
attachInterrupt( 0 , _SCT_1positiveCoutFunction, RISING );
}
void _SCT_1positiveCoutFunction()
{
Dubl_fr = 1;
attachInterrupt( 0 , _SCT_1coutFunction, FALLING );
}[/spoiler]
Но работает в этой
[spoiler]unsigned long CP;
bool Dubl_fr;
unsigned long _SCT_1P= 0UL;
unsigned long _SCT_1IC= 0UL;
bool out7;
void setup()
{
_SCT_1P=micros();
attachInterrupt (0, _SCT_1coutFunction, FALLING );
attachInterrupt(0, _SCT_1positiveCoutFunction, RISING );
pinMode(7, OUTPUT);
}
void loop()
{
if((( micros()-_SCT_1P) > 1000000 )||(( micros()-_SCT_1P) <0))
{
CP = _SCT_1IC;
_SCT_1IC=0;
_SCT_1P = micros();
}
out7 = Dubl_fr;
digitalWriteFast(7, out7 );
}
void _SCT_1coutFunction()
{
_SCT_1IC++;
Dubl_fr = 0;
attachInterrupt( 0 , _SCT_1positiveCoutFunction, RISING );
}
void _SCT_1positiveCoutFunction()
{
Dubl_fr = 1;
attachInterrupt( 0 , _SCT_1coutFunction, FALLING );
}
[/spoiler]
Это возможна фишка ядра?
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
Уточните плиз по прерыванию
Переменные которые изменяются в обработчике прерываний надо объявлять так:
Код: Выделить всё
volatile bool re=0;
-
- Полковник
- Сообщения: 1928
- Зарегистрирован: 28 окт 2015, 22:47
- Откуда: Ленобласть
- Имя: Игорь
- Поблагодарили: 2 раза
Уточните плиз по прерыванию
А чем объяснить нижние 2 примера? Они отличаются только "вырезанным" замером за период.dsfbuy писал(а): 18 окт 2020, 00:33 Переменные которые изменяются в обработчике прерываний надо объявлять так:
Отправлено спустя 3 минуты 11 секунд:
Это помогло, спасибо.
Отправлено спустя 4 минуты 56 секунд:
Подозреваю козни компилятора...
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Уточните плиз по прерыванию
[ref]Ingwar[/ref],
Нет необходимости в сетапе объявлять оба типа прерывания на одном пине, если по ходу исполнения они меняются, всё равно последнее "затрёт" предыдущее.
Нет необходимости в сетапе объявлять оба типа прерывания на одном пине, если по ходу исполнения они меняются, всё равно последнее "затрёт" предыдущее.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость