пытаюсь запустить прерывания от таймеров 2,3,4,5, для теста решил помигать диодами, делаю пошагово отладку и всё мигает как надо, а без отладки прерывание срабатывает 1 раз и на этом всё, подскажите, в чём может быть проблема... провожу кусок кода
Практически на всех форумах принято после своего вопроса и после получения положительного результата давать объяснение, что в конечном итоге привело к этому положительному результату. Даже если были собственные ошибки, пусть даже самые глупые. Именно на таких ошибках и учатся другие, ценность форумов в этом. А то как-то слегка эгоистически получается. "У меня не работает" - "А вы попробуйте то-то-то и то..." - "Всем спасибо, заработало. У меня. А вы сами ходите по этим граблям". Так?
Заголовок сообщения: Re: STM32F4 прерывание работает только в отладчике
Добавлено: Ср сен 21, 2022 14:23:34
Родился
Зарегистрирован: Ср сен 21, 2022 14:19:32 Сообщений: 2
Рейтинг сообщения:0
Добрый день. Возникла та же проблема. Таймеры 9,10,11 работают нормально. А 6, 7, 2-5 - переключают светодиод только в отладчике. Пробовал выводить их счетный регистр в UART - значение меняется. Предложенный выше код также не помог...Подскажите, что еще можно посмтотреть..
А может для начала надо что-то показать? В хрустальном шаре вашу проблему не видно.
Пока лишь могу посоветовать переместить команду очистки флага прерывания в самое начало чтобы исклчить двойное срабатывание прерывания, что может визуально выглядет как "немигание" диода.
Заголовок сообщения: Re: STM32F4 прерывание работает только в отладчике
Добавлено: Чт сен 22, 2022 08:18:43
Родился
Зарегистрирован: Ср сен 21, 2022 14:19:32 Сообщений: 2
Рейтинг сообщения:0
Спасибо. Как раз это вчера и решило проблему, хотя до этого нигде не встречал рекомендаций вначале сбрасывать флаг. Действительно, когда ткнулся осциллографом, обнаружил очень короткие импульсы...
А как так? Пока флаг не сброшен, повторно прерывание не сгенерируется, то есть вроде как логично выполнить все необходимые действия и только потом сбросить, что гарантирует выполнение всех операторов тела прерывания.
azhel12, ++ Флаг можно сбрасывать лишь в самом конце прерывания. Чтобы гарантировать, что не будет повторных входов, пока ты еще там.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
А как так? Пока флаг не сброшен, повторно прерывание не сгенерируется, то есть вроде как логично выполнить все необходимые действия и только потом сбросить
Если скорость работы ядра контроллера выше скорости работы шины, на которой висит устройство вызвавшее прерывание, то процедура "сброс флага" может длиться дольше выхода из прерывания и ядро "ловит" то же прерывание вторично. Это если на пальцах.
что гарантирует выполнение всех операторов тела прерывания.
Прервать выполнение может только прерывание с более высоким приоритетом. Тут уже флаг текущего прерывания никак не влияет. Только полный запрет всех прерываний.
Откуда возьмутся повторные входы "пока ты ещё там"? А вот повторные когда ты "уже не там" запросто.
Да элементарно: сработало прерывание, тебя отфутболили в обработчик. Ты тут же снимаешь флаг, и внезапно, пока еще не вышел из обработчика, МК опять в него заходит (т.к. флаг-то сброшен). Я на такое когда-то наталкивался, когда у меня обработчик прерывания очень длинный был и выполнялся аж пару десятков микросекунд. Не всегда бывает возможность обработчик прерывания сделать коротким, просто выставляя флаги...
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Я на такое когда-то наталкивался, когда у меня обработчик прерывания очень длинный был
Условия возникновения прерываний возникали чаще, чем ты успевал их обрабатывать. Новый обработчик запускался сразу же после выхода из предыдущего, но никак не прерывал выполняющийся. Это невозможно.
Ну, если так, то вообще без разницы, когда снимается флаг прерывания.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения