|
|
  |
STM32F407VET6 Вызов неприсвоенного прерывания, Вектор 0x1С - RESERVED |
|
|
|
Jan 28 2016, 15:39
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (nanorobot @ Jan 28 2016, 17:22)  Происходит незапланированное прерывание. Как это выяснили? QUOTE Обработчик дефолтный - пустой. Загадочная фраза. Что Вы хотели сказать? То, что у Вас этого обработчика нет? То, что он есть, но не вызывается? То, что есть, но просто заглушка?
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 28 2016, 15:50
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(zltigo @ Jan 28 2016, 20:39)  Как это выяснили?
Загадочная фраза. Что Вы хотели сказать? То, что у Вас этого обработчика нет? То, что он есть, но не вызывается? То, что есть, но просто заглушка? прошу прощения, некорректно выразился. именно заглушка одна на все неиспользуемые осью вектора. я сделал индивидуальные заглушки на каждый вектор . Цитата(nanorobot @ Jan 28 2016, 20:48)  прошу прощения, некорректно выразился. именно заглушка одна на все неиспользуемые осью вектора. я сделал индивидуальные заглушки на каждый вектор . в моем случае управление улетало на эту самую общую заглушку. сейчас улетает на заглушку вектора 0х0000001С
|
|
|
|
|
Jan 28 2016, 16:26
|
Местный
  
Группа: Участник
Сообщений: 244
Регистрация: 29-02-08
Пользователь №: 35 503

|
Цитата(ViKo @ Jan 28 2016, 21:16)  Допустим, испортился стек, и при возврате из функции процессор улетел, куда попало. да... с указателями намудрил
|
|
|
|
|
Jan 28 2016, 16:27
|

Гуру
     
Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244

|
QUOTE (ViKo @ Jan 28 2016, 18:16)  Допустим, испортился стек, и при возврате из функции процессор улетел, куда попало. Да, наиболее вероятный случай. "Куда попало" оказалось этой самой заглушкой. Начать с простого - в этой заглушке прежде всего глянуть а действительно-ли сейчас режим прерывания и адрес возврата. Но может, конечно и контролер чудить. Но с этим уже разбираться полсле того, как станет ясно, что действительно контроллер прерываний послал. У Автора, правда "M" кортекс, а не "А" - у эмок с контролером прерыаний вроде все без затей.
--------------------
Feci, quod potui, faciant meliora potentes
|
|
|
|
|
Jan 29 2016, 07:51
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(scifi @ Jan 29 2016, 10:25)  Интересно, какое прерывание работает через вектор 0x1C? Хочу всё знать. Давайте поточнее в терминологии. Что такое вектор 0x1C? Это 28-прерывание, закрепленное за TIM2? Или адрес, по которому должен лежать адрес обработчика? Напомню, что в отличии от AVR, в таблице векторов прерываний размещается не код, а адреса подпрограмм прерываний.
|
|
|
|
|
Jan 31 2016, 13:20
|
Знающий
   
Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454

|
Цитата(nanorobot @ Jan 28 2016, 17:22)  Выяснил, что прерывание проискодит по вектору 0х1С - то есть Reserved. Что бы это могло значить?? Может где-то некорректный define?. ChibiOs генерит программное(системное) прерывание для своих нужд для другого процессора в котором этот вектор задействован.
|
|
|
|
|
Jan 31 2016, 17:36
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(misyachniy @ Jan 31 2016, 16:20)  Может где-то некорректный... подход? Как я понял со слов ТС. Он по адресу 0x1C разместил адрес заглушки - подпрограммы, которая размещается, например, по адресу 0x0800_1500. По непонятным причинам PC улетает в окрестность 0x0800_1500, что ТС воспринимает как вызов зарезервированного прерывания, лечит не там, где надо и заодно путает нас)
|
|
|
|
|
Feb 1 2016, 13:50
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

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