Вентилятор охлаждения двигателя (Engine's cooling fan)
Moderator: STC
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Вроде приоритеты прерываний есть. Приоритет определяется положением вектора в таблице векторов прерываний. Чем ближе к началу таблицы тем выше приоритет. Неудобство прерываний в другом, нет нормальных масок прерываний. Нельзя быстро запретить только выбранное прерывание.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP112 - Up with the play
- Posts: 154
- Joined: Wed Dec 08, 2010 2:21 am
- Location: Minsk Belarus
- Contact:
Re: Вентилятор охлаждения двигателя
Приоритеты там просто первоочередность выполнения в случае одновременного возникновения нескольких прерываний. Я имел ввиду полноценную систему приоритетов, как в MCS-51, где прерывание может прервать обработку другого прерывания с более низким приоритетом и не может с более высоким.
Единственный простой выход просто на долго не задерживаться в обработке прерывания, чтобы другие не ждали.
Единственный простой выход просто на долго не задерживаться в обработке прерывания, чтобы другие не ждали.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Теперь понял что ты имел ввиду. Я делаю следующее:
1. Я стараюсь "не задерживаться" в прерываниях;
2. При входе в обработчик прерывания я стараюсь сделать неотложные операции(которые могут повлиять на качество результата) в первую очередь, затем я разрешаю прерывания и другие прерывания могут прервать текущее прерывание;
3. Если прерывание критическое или очень короткое, то я не разрешаю другие прерывания в процессе его выполнения.
Для п.2 важна возможность маскировать отдельные прерывания, а в AVR такой возможности нет (я имею ввиду что у меня это не получилось). Eсть только флаг который маскирует все прерывания. Если запрещать и разрешать отдельные прерывания битами которые есть, то флаги присутствия прерываний в очереди теряются. Но это я пробовал давно, уже немножко забыл, но вроде проблема именно в этом.
вот один из примеров где это нужно:
#ifdef COOLINGFAN_PWM
//CKP processing creates a big delay which negatively affects cooling fan's PWM. We
//need to enable T/C 2 interrupts. TODO: it is bad idea to enable all interrupts
//here. We need only OCIE2 and TOIE2.
__enable_interrupt();
#endif
1. Я стараюсь "не задерживаться" в прерываниях;
2. При входе в обработчик прерывания я стараюсь сделать неотложные операции(которые могут повлиять на качество результата) в первую очередь, затем я разрешаю прерывания и другие прерывания могут прервать текущее прерывание;
3. Если прерывание критическое или очень короткое, то я не разрешаю другие прерывания в процессе его выполнения.
Для п.2 важна возможность маскировать отдельные прерывания, а в AVR такой возможности нет (я имею ввиду что у меня это не получилось). Eсть только флаг который маскирует все прерывания. Если запрещать и разрешать отдельные прерывания битами которые есть, то флаги присутствия прерываний в очереди теряются. Но это я пробовал давно, уже немножко забыл, но вроде проблема именно в этом.
вот один из примеров где это нужно:
#ifdef COOLINGFAN_PWM
//CKP processing creates a big delay which negatively affects cooling fan's PWM. We
//need to enable T/C 2 interrupts. TODO: it is bad idea to enable all interrupts
//here. We need only OCIE2 and TOIE2.
__enable_interrupt();
#endif
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP112 - Up with the play
- Posts: 154
- Joined: Wed Dec 08, 2010 2:21 am
- Location: Minsk Belarus
- Contact:
Re: Вентилятор охлаждения двигателя
Странно, почему теряются флаги прерываний в очереди при запрете отдельными битами. Насколько знаю, установлен или нет, например, бит TOIE0 в TIMSK, а при переполнении T0 выставляется бит в TIFR. Если прерывание запрещено, то флаг так и будет стоять, и как только установишь бит в TIMSK так сразу получишь прерывание. Может проблема в том, если за это время возникло несколько этих событий прерываний, а флаг запроса все равно один. Но такая же беда будет и при общем маскировании всех прерываний.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Я сам этого не понимаю. Даташит ничего не говорит об этом, он просто говорит что при помощи TIMSK можно маскировать прерывания.
Но, когда я пытаюсь замаскировать все остальные прерывания и оставить только OCIE2 и TOIE2, то начинаются глюки:
Этот код я пытался ставить в обработчике прерывания от ДПКВ чтобы убрать разрешение лишних прерываний.
У меня создается впечатление что при изменении регистра TIMSK флаги прерываний находящихся в очереди теряются, но даташит ничего не говорит об этом. Хоть пиши в службу поддержки Atmel...
Но, когда я пытаюсь замаскировать все остальные прерывания и оставить только OCIE2 и TOIE2, то начинаются глюки:
Code: Select all
Прерывания были запрещены при входе в обработчик прерывания
uint8_t timsk_sv = TIMSK;
TIMSK = _BV(OCIE2) | _BV(TOIE2);
_ENABLE_INTERRUPTS();
...код...
_DISABLE_INTERRUPTS();
TIMSK = timsk_sv;
Прерывания будут разрешены при выходе из обработчика прерывания
У меня создается впечатление что при изменении регистра TIMSK флаги прерываний находящихся в очереди теряются, но даташит ничего не говорит об этом. Хоть пиши в службу поддержки Atmel...
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Проблема снята. Мне получилось правильно замаскировать нужные прерывания. Atmel AVR позволяет маскировать прерывания с сохранением флагов прерываний.
Причина была в невнимательности.
Причина была в невнимательности.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
-
- LQFP112 - Up with the play
- Posts: 104
- Joined: Wed Jul 20, 2011 10:25 am
- Location: Rostov-on-Don
- Contact:
Re: Вентилятор охлаждения двигателя
Будет ли сека работать только с одним датчиком температуры? Т.е. отслеживать температуру и вкл/выкл реле вентилятора?
Без подсоединения остальных датчиков.
Без подсоединения остальных датчиков.
GAZ 2410
Re: Вентилятор охлаждения двигателя
кстати. а как это делается?Atmel AVR позволяет маскировать прерывания с сохранением флагов прерываний.
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Не проверял, но должна.Будет ли сека работать только с одним датчиком температуры? Т.е. отслеживать температуру и вкл/выкл реле вентилятора?
Без подсоединения остальных датчиков.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
- STC
- LQFP144 - On Top Of The Game
- Posts: 2420
- Joined: Fri Oct 22, 2010 10:47 pm
- Location: Ukraine, Kiev
- Contact:
Re: Вентилятор охлаждения двигателя
Биты в регистре TIMSK. Но такой регистр есть только для таймеров. Например, для АЦП такого регистра нет и когда я пытался замаскировать прерывание от АЦП, то его флаг прерывания терялся.кстати. а как это делается?
Короче, криво это сделано в архитектуре AVR.
Author of the SECU-3 project. SECU-3 Engine control unit / Ignition control system
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook
SECU-3.org (Русский)
SECU-3.org (English)
SECU-3 Club ВКонтакте
SECU-3 EMS Project Facebook