Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2020-дек-05 17:23

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 2 сообщения ] 
Автор Сообщение
 Заголовок сообщения: Перенос векторо прерываний
СообщениеДобавлено: 2017-окт-24 13:08 
Не в сети

Зарегистрирован: 2017-июл-24 10:16
Сообщения: 63
Организация: НИИССИ
В ВЕ3
в кортексе 3 есть VTOR
а в кортексе 1-м там reserved на этом месте
Возможно или нет?


Вернуться к началу
 Заголовок сообщения: Re: Перенос векторо прерываний
СообщениеДобавлено: 2017-окт-24 15:17 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1530
Откуда: Тула
нет.
НО есть другие способы:
1. пристроить внешнюю ПЗУ/ОЗУ с векторами и переключаться на неё (отдельный вопрос корректного переключения "на ходу");
2. для каждого (используемого) прерывания сделать обработчик, который будет переходить по указателю на ф-цию, расположенному в ОЗУ (в виде таблицы или по произвольному адресу -- вопрос реализации).

Можно что-то в духе: всю таблицу векторов прерываний забить указателем на defaultHandler, а в нём переходить по указателям из таблицы в ОЗУ
void empty(void) {}
void (*handlers[64])() = { 
empty,
Reset_Handler,              ; Reset Handler
NMI_Handler,                ; NMI Handler
HardFault_Handler,          ; Hard Fault Handler
MemManage_Handler,          ; MPU Fault Handler
BusFault_Handler,           ; Bus Fault Handler
UsageFault_Handler,         ; Usage Fault Handler
empty,
empty,
empty,
empty,
SVC_Handler,                ; SVCall Handler
DebugMon_Handler,           ; Debug Monitor Handler
empty,
PendSV_Handler,             ; PendSV Handler
SysTick_Handler,            ; SysTick Handler
MIL-STD-1553B2_Handler, 
MIL-STD-1553B1_Handler, 
....
}
void defaultHandler(void)
{
(*handlers[__get_IPSR()])();
}
придётся только обойти нюанс с Reset_Handler'ом... Например
if(__get_IPSR() == 1) {
(*Reset_Handler)();
} else {
(*handlers[__get_IPSR()])();
}
возможны и другие подводные камни - надо пробовать...

_________________
сочувствующий…


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 2 сообщения ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB