Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F407VET6 Вызов неприсвоенного прерывания
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
nanorobot
Дивайс на STM32F407 под ChibiOs. Ubuntu + Eclipse + GCC. Происходит незапланированное прерывание. Обработчик дефолтный - пустой. Поставил отдельные затычки на каждый незапланированный вектор. Выяснил, что прерывание проискодит по вектору 0х1С - то есть Reserved. Что бы это могло значить??
zltigo
QUOTE (nanorobot @ Jan 28 2016, 17:22) *
Происходит незапланированное прерывание.

Как это выяснили?
QUOTE
Обработчик дефолтный - пустой.

Загадочная фраза. Что Вы хотели сказать? То, что у Вас этого обработчика нет? То, что он есть, но не вызывается? То, что есть, но просто заглушка?
nanorobot
Цитата(zltigo @ Jan 28 2016, 20:39) *
Как это выяснили?

Загадочная фраза. Что Вы хотели сказать? То, что у Вас этого обработчика нет? То, что он есть, но не вызывается? То, что есть, но просто заглушка?


прошу прощения, некорректно выразился. именно заглушка одна на все неиспользуемые осью вектора.
я сделал индивидуальные заглушки на каждый вектор .


Цитата(nanorobot @ Jan 28 2016, 20:48) *
прошу прощения, некорректно выразился. именно заглушка одна на все неиспользуемые осью вектора.
я сделал индивидуальные заглушки на каждый вектор .



в моем случае управление улетало на эту самую общую заглушку.
сейчас улетает на заглушку вектора 0х0000001С
ViKo
Допустим, испортился стек, и при возврате из функции процессор улетел, куда попало.
nanorobot
Цитата(ViKo @ Jan 28 2016, 21:16) *
Допустим, испортился стек, и при возврате из функции процессор улетел, куда попало.



да... с указателями намудрил
zltigo
QUOTE (ViKo @ Jan 28 2016, 18:16) *
Допустим, испортился стек, и при возврате из функции процессор улетел, куда попало.

Да, наиболее вероятный случай. "Куда попало" оказалось этой самой заглушкой. Начать с простого - в этой заглушке прежде всего глянуть а действительно-ли сейчас режим прерывания и адрес возврата.
Но может, конечно и контролер чудить. Но с этим уже разбираться полсле того, как станет ясно, что действительно контроллер прерываний послал.
У Автора, правда "M" кортекс, а не "А" - у эмок с контролером прерыаний вроде все без затей.


Непомнящий Евгений
Так а самый простой вариант - это прерывание кто-то включил и оно иногда срабатывает - не рассматривали? Плюс любое прерывание можно активировать софтварно...
scifi
Цитата(Непомнящий Евгений @ Jan 29 2016, 08:38) *
Так а самый простой вариант - это прерывание кто-то включил и оно иногда срабатывает - не рассматривали? Плюс любое прерывание можно активировать софтварно...

Интересно, какое прерывание работает через вектор 0x1C? Хочу всё знать.
adnega
Цитата(scifi @ Jan 29 2016, 10:25) *
Интересно, какое прерывание работает через вектор 0x1C? Хочу всё знать.

Давайте поточнее в терминологии.
Что такое вектор 0x1C? Это 28-прерывание, закрепленное за TIM2?
Или адрес, по которому должен лежать адрес обработчика?
Напомню, что в отличии от AVR, в таблице векторов прерываний размещается не код, а адреса подпрограмм прерываний.
Непомнящий Евгений
Зарезервированное sm.gif

Ок, тогда присоединяюсь к комментаторам выше
misyachniy
Цитата(nanorobot @ Jan 28 2016, 17:22) *
Выяснил, что прерывание проискодит по вектору 0х1С - то есть Reserved. Что бы это могло значить??


Может где-то некорректный define?.
ChibiOs генерит программное(системное) прерывание для своих нужд для другого процессора в котором этот вектор задействован.

adnega
Цитата(misyachniy @ Jan 31 2016, 16:20) *
Может где-то некорректный...

подход?

Как я понял со слов ТС. Он по адресу 0x1C разместил адрес заглушки - подпрограммы, которая размещается, например, по адресу 0x0800_1500.
По непонятным причинам PC улетает в окрестность 0x0800_1500, что ТС воспринимает как вызов зарезервированного прерывания,
лечит не там, где надо и заодно путает нас)
Tarbal
Может еще такое случиться: случилось прерывание с вектором по меньшему адресу, а там заглушки не было -- оно и доислолнялось до этой заглушки.
adnega
Цитата(Tarbal @ Feb 1 2016, 15:51) *
Может еще такое случиться: случилось прерывание с вектором по меньшему адресу, а там заглушки не было -- оно и доислолнялось до этой заглушки.

Не может.
Вызов прерывания - это не переход на программу обработки прерывания, а копирование адреса из таблицы векторов прерываний и переход по этому полученному адресу. Если бы случилось прерывание с меньшим номером, скопировался бы соответствующий для него адрес обработчика, а это никак не связано с адресом следующего обработчика - тут вам не AVR, где в таблице векторов размещались не адреса, а инструкции обработчика (да, чаще всего там был безусловный переход или iret).
Tarbal
Цитата(adnega @ Feb 1 2016, 16:50) *
Не может.
Вызов прерывания - это не переход на программу обработки прерывания, а копирование адреса из таблицы векторов прерываний и переход по этому полученному адресу. Если бы случилось прерывание с меньшим номером, скопировался бы соответствующий для него адрес обработчика, а это никак не связано с адресом следующего обработчика - тут вам не AVR, где в таблице векторов размещались не адреса, а инструкции обработчика (да, чаще всего там был безусловный переход или iret).


Ну тогда не может sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.