Миландр

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

Часовой пояс: UTC + 3 часа




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

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


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

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1155
Откуда: Тула
нет.
НО есть другие способы:
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 + 3 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB