реклама на сайте
подробности

 
 
> ARM 7(9) Cortex A, Простой переключатель контекста
mantech
сообщение May 30 2018, 10:49
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Приветствую.

Собственно интересует сам сабж, простейший переключатель контекста для работы 2 функций вытесняющим способом, без всяких очередей, листов и пр. наворотов РТОСов, под контроллер прерываний данных МК.

Вроде простая задача, но че-то затупило у меня, почему-то не работает вложенное прерывание или программное на котором делал свою старую реализацию. Выдирать из фриртосов и пр. процесс не простой, т.к. честно говоря в АРМовском асме силен не особенно. Буду рад, если у кого что завалялось подобное...

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jcxz
сообщение May 30 2018, 11:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(mantech @ May 30 2018, 13:49) *
Собственно интересует сам сабж, простейший переключатель контекста для работы 2 функций вытесняющим способом, без всяких очередей, листов и пр. наворотов РТОСов, под контроллер прерываний данных МК.
Вроде простая задача, но че-то затупило у меня, почему-то не работает вложенное прерывание или программное на котором делал свою старую реализацию. Выдирать из фриртосов и пр. процесс не простой, т.к. честно говоря в АРМовском асме силен не особенно. Буду рад, если у кого что завалялось подобное...

В Cortex-A, насколько я слышал, архитектура прерываний подобна ARM7/9. А там всего два вектора: IRQ и FIQ (не считая fault-ов). И устроено там всё совсем не так как в Cortex-M.
Там вытеснение простым способом не сделать - не заточено ядро под ОСы.
Там нет понятия "вложенных прерываний". При срабатывании какого-то прерывания, процессор переключается на контекст данного прерываний (свой набор регистров), поэтому такое же вложенное прерывание уже невозможно. Вложенности и переключения контекста там делаются искусственно - копированием регистров из одного стека в другой.

Цитата(mantech @ May 30 2018, 14:54) *
Дак у фриртоса тоже подобное есть, только использовать это без ртосной обвязки трудновато, либо надо хорошо знать асм...

Без знания асм и механизма работы прерываний там никак.
Go to the top of the page
 
+Quote Post
mantech
сообщение May 30 2018, 12:39
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ May 30 2018, 14:57) *
Там вытеснение простым способом не сделать - не заточено ядро под ОСы.
Там нет понятия "вложенных прерываний". При срабатывании какого-то прерывания, процессор переключается на контекст данного прерываний (свой набор регистров), поэтому такое же вложенное прерывание уже невозможно. Вложенности и переключения контекста там делаются искусственно - копированием регистров из одного стека в другой.


Без знания асм и механизма работы прерываний там никак.



Хорошо, упрощу задачу. В пред. проекте нужно было сделать переключение таким образом -
Есть прерывания устройств (уарты и пр...) которые должны выполнятся всегда, обработчики маленькие и быстрые. Есть задача №1, которая вызывается из прерывания таймера по истечению опред. интервала. При наступлении данного события из прерывания таймера вызывалось программное прерывание, после этого обработчик таймера завершал свою работу. Управление передавалось задаче программного прерывания и она там работала до тех пор, пока флаг разрешения не уст. в 1, после этого задача сама завершалась (как в кооперативном режиме), и оставшееся время отдавалось осн. программе.
Т.е. получаем 3 уровня работы - прерывания, задача прогр. прерывания и осн. программа.

Это все работало на кортекс А9 с контроллером GIC , сейчас хочу подобное сделать на А8 у него нет GIC, и все это не работает....
Go to the top of the page
 
+Quote Post
scifi
сообщение May 30 2018, 13:29
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(mantech @ May 30 2018, 15:39) *
Есть прерывания устройств (уарты и пр...) которые должны выполнятся всегда, обработчики маленькие и быстрые.
...
Это все работало на кортекс А9 с контроллером GIC , сейчас хочу подобное сделать на А8 у него нет GIC, и все это не работает....

Если есть прерывания устройств, значит, есть и какой-то контроллер прерываний. Надо пользоваться его возможностями.
Go to the top of the page
 
+Quote Post
mantech
сообщение May 30 2018, 13:53
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(scifi @ May 30 2018, 16:29) *
Если есть прерывания устройств, значит, есть и какой-то контроллер прерываний. Надо пользоваться его возможностями.


Вот и пытаюсь, только когда попадаю в прерывание, чтоб разрешить его снова даю команду CPSIE I на чем оно и зависает...

Цитата(k155la3 @ May 30 2018, 16:16) *
Можно поискать планировщик/sheduler наподобие этого
и из него - переключатель контекста. Кода не так много.


Все здорово, но опять же под М серию...
Go to the top of the page
 
+Quote Post
mantech
сообщение May 30 2018, 15:24
Сообщение #6


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(mantech @ May 30 2018, 16:53) *
Все здорово, но опять же под М серию...


Вопрос закрыт, дело было в неправильном сохранении регистров, поправил заработало. Всем спасибо rolleyes.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016