|
|
|
вектора прерываний, две таблицы |
|
|
|
May 26 2016, 05:01
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
"Положение векторов в адресном пространстве может быть изменено программно, так же как и дистанция между векторами."© Гуголь
Т.е. можно
|
|
|
|
|
May 26 2016, 15:59
|
Частый гость
Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743
|
Сути вопроса никто не понял. Попробую поэтапно. 1. Хочу ДВЕ(!!!) таблицы векторов во flash. Не важно, какой плотности. Таблицы должны быть с разными векторами и вызывать разные обработчики прерываний. При старте с помощью ebase должна выбираться одна из них со своим набором привязанных к ней обработчиков. 2. Тогда в тексте программы появляются соответственно ДВА разных обработчика ОДНОГО вектора, на что компилятор ругается. Не хочет он сразу и
void __attribute__((interrupt(X), vector(Y))) foo {};
и
void __attribute__((interrupt(X), vector(Y))) bar {};
К тому же нужно связать первый обработчик с первой таблицей, а второй, соответственно, со второй. И уже при старте в ebase писать адрес нужной таблицы.
3. Даже если одну таблицу разместить в озу и при старте менять вектора, то проблема одинаковых атрибутов разных обработчиков остается.
Догадываюсь, что штатно это не реализуемо. Но надеюсь, что решение есть. Пока приходится в одном обработчике в зависимости от режима вызывать разные функции. Лишние расходы на сохранение/восстановление регистров.
Сообщение отредактировал Drozd2 - May 26 2016, 16:20
|
|
|
|
|
May 26 2016, 20:33
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
Цитата(Drozd2 @ May 26 2016, 16:59) Сути вопроса никто не понял. Попробую поэтапно. 1. Хочу ДВЕ(!!!) таблицы векторов во flash. Во флешь нельзя. Только в ОЗУ. Хоть 10 таблиц
Сообщение отредактировал СНБ - May 26 2016, 20:34
|
|
|
|
|
May 26 2016, 20:57
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
Сформировать две таблицы. А потом переключать их.
"Положение векторов в адресном пространстве может быть изменено программно, так же как и дистанция между векторами."© Гуголь
|
|
|
|
|
May 27 2016, 14:53
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
Цитата(Valentine Loginov @ May 27 2016, 07:55) Да можно и во флеш. Еще раз: посмотрите как в скрипте компоновщика... Физически нельзя. А компоновщик и прочее - это уже все программные извраты компилятора. Я думал речь идет о возможностях непосредственно архитектуры Например, компилятор может генерировать код, который копирует вектора из флэш в RAM. А в ручную на ассемблере можно и не такие извраты делать. Но тогда в теме нужно было сразу сказать, что интересует не "железные" возможности, а софтовые извраты
|
|
|
|
|
May 27 2016, 15:46
|
Частый гость
Группа: Участник
Сообщений: 97
Регистрация: 19-11-09
Пользователь №: 53 743
|
Цитата Да, у них будут другие индексы, ну сделайте список define'ов под них. А вот насчет других индексов то я и не подумал. Начинаю понимать. Хотя с define пока довольно туманно. Попробую додуматься сам. Спасибо!
Сообщение отредактировал Drozd2 - May 27 2016, 15:49
|
|
|
|
|
May 27 2016, 15:59
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
Т.е. для Вас "камень" это то, как его представляет для Вас предоставляет компилятор? А я думал Вы системщик/железячник, а не программист. Цитата(Drozd2 @ May 27 2016, 16:46) Хотя с define пока довольно туманно. Это Ваш первый проект? Курсовая?
|
|
|
|
|
May 27 2016, 17:08
|
Участник
Группа: Участник
Сообщений: 73
Регистрация: 2-05-16
Пользователь №: 91 564
|
Цитата(Drozd2 @ May 27 2016, 17:25) Да я вообще дворник. Так, заглянул с умными людьми пообщаться. Не обижайтесь. Просто складывается ощущение, что это первый процессор, с которым Вы разбираетесь, и что это первая программа, которую вы пишите в своей жизни. Это так? Объясните нормально в чем проблема: Вы не знаете поддерживает ли железо данную возможность или вы просто не знаете как это в компиляторе написать? Т.е. у вас вопрос по архитектуре железа или по компилятору? Т.е. Вам нужен просто пример исходного кода? Т.е. Вас интересует "что конкретно я должен написать в этом долбаном компиляторе чтобы прога заработала как надо и плевать мне на архитектуру, как оно там все внутри организовано и прочее" Так?
Сообщение отредактировал СНБ - May 27 2016, 17:09
|
|
|
|
|
May 30 2016, 07:06
|
Частый гость
Группа: Участник
Сообщений: 78
Регистрация: 7-04-10
Из: Пушкино
Пользователь №: 56 462
|
Цитата(СНБ @ May 27 2016, 17:53) Физически нельзя. А компоновщик и прочее - это уже все программные извраты компилятора. Я думал речь идет о возможностях непосредственно архитектуры
Например, компилятор может генерировать код, который копирует вектора из флэш в RAM. А в ручную на ассемблере можно и не такие извраты делать. Но тогда в теме нужно было сразу сказать, что интересует не "железные" возможности, а софтовые извраты Что-то когда я работаю с прерываниями в pic32 у меня обработчики прерываний размещены во флеш-памяти и PC в прыгает по адресам rom. Если нужно подменить вектора - переинициализирую ebase и он начинает прыгать по другой таблице прерываний. И все во флеш. ЧЯДНТ?
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|