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

 
 
> Прерывание в прерывании, Для реализации Super Simple Tasker
arhiv6
сообщение Nov 7 2017, 12:00
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Super Simple Tasker - один из вариантов реализации вытесняющей многозадачности для микроконтроллеров. Как в нём работает асинхронное переключение на более приоритетные задачи написано в статье под рисунком 3. Для реализации SST нужна такая вещь: в функции-обработчике прерывания, после выполнения необходимого кода, нужно как-то сообщить микроконтроллеру, что с прерыванием закончили работать но из функции-обработчика не выходить. Т.е. нужно разрешить вложенные прерывания (одни и те же).

В статье в примере для ПК это делается так: используется команда End Of Interrupt (EOI) - outportb(0x20, 0x20). Обычно она выполняется непосредственно перед выходом из функции-обработчика прерывания, но в SST после EOI вызывается диспетчер, прямо в контексте прерывания. Т.е. вызвав EOI, но оставаясь в контексте прерывания, мы разрешаем вложенные прерывания. Как это можно сделать для ARM (Cortex)?


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arhiv6
сообщение Nov 7 2017, 17:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



Смотрел я исходники ОС, но они все по похожему принципу сделаны - переключение между разными стеками. Вот например: для каждого потока выделен свой стек. Для переключения между двумя контекстами вызывается прерывание PendSV (при этом на стек складываются R0-R3) и в PendSV_Handler сохраняются оставшиеся регистры (R4-R11), потом вызывается функция os_context_switch_hook, которая возвращает указатель на стек другой задачи. С этого стека восстанавливаем (R11-R4) , переписываем LR и выходим из PendSV_Handler, при этом восстанавливаются (R3-R0). Всё, мы переключились на другую задачу/другой стек.

А можете примерно так-же объяснить, что мне сделать для пререключения задач по методике SST?
Выполняем мы задачу А. Так же через вызов прерывания PendSV хотим запустить более приоритетную задачу (запустить функцию). Попали в PendSV_Handler, сохранили (R4-R11) на текущем стеке. Всё, контекст задачи A сохранён. Как теперь правильно запустить задачу В? Сделать просто вызов LDR R1, =taskB, BLX R1 нельзя - функция будет выполняться в контексте прерывания. Как правильно сделать? Из прерывания если выйдем ( BX LR) мы попадём обратно в задачу А. Как мне выйти из прерывания и при этом запустить функцию taskB?


--------------------
Go to the top of the page
 
+Quote Post
Forger
сообщение Nov 7 2017, 18:27
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(arhiv6 @ Nov 7 2017, 20:28) *
Как правильно сделать?

Как бы вы не старались, по методике SST правильно не будет никак, поскольку ядро ARM (в частности контроллер прерываний) разрабатывался изначально под классические принципы работы RTOS.
Очевидно, что для этого были веские основания.
Если вам принципиально нужно "по методике SST", то придется городить адские костыли с полной потерей всех прелестей вложенного приоритетного контроллера прерываний.
Отлаживать такой говнокод - еще тот мартышкин труд.
Мало того, что полностью теряется полезнейшая функция sleep/delay, так еще и "задачи" теряют свой привычный очень многим смысл.
Невозможно будет применить чужой код без его тотальной переделки. Зачастую будет написать его заново.
Мифическая экономия ОЗУ и флэши (я бы сказал копеешная экономия) превратиться в неоправданные траты памяти там, где в этом не было нужды под обычной RTOS.
Особенно сочувствую тем, кому придется работать с вашим кодом ...
Вангую, что такой код будет напрочь переписан под привычную и понятную всем схему, где задачи выполняются в фоне задач, а прерывания - в фоне прерываний....


Впрочем, если вы по-прежнему упорно настроены на SST (задачи работают в фоне прерываний), то придется поломать голову и сделать свое решение самостоятельно,
тогда только в этом случае вы поймете тупиковость этой затеи, как минимум на ARM процах.

Для убедительности моих слов разместите тут код простейшей задачи моргания светодиода с различной скважностью в бесконечном цикле "по методике SST".
Время включенного и выключенного состояния - параметры изменяемые и кратны 1мс. Разумеется, процессорное время должно тратиться лишь на включение и выключение светодиода, но не на задержки.
Вот так эта задачка выглядит на привычной OS (все времена в мс):
Код
while(true)
{
  led.on();
  sleep(onTime);
  led.off();
  sleep(offTime);
}

Как это будет выглядеть под мифической SST?


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- arhiv6   Прерывание в прерывании   Nov 7 2017, 12:00
- - Forger   Цитата(arhiv6 @ Nov 7 2017, 15:00) один и...   Nov 7 2017, 13:02
|- - Студент заборстроительного   Цитата(Forger @ Nov 7 2017, 16:02) Цитата...   Nov 8 2017, 16:41
|- - Forger   Цитата(Студент заборстроительного @ Nov 8 201...   Nov 8 2017, 20:41
|- - ig_z   QUOTE (Forger @ Nov 8 2017, 22:41) С друг...   Nov 9 2017, 20:15
|- - Forger   Цитата(ig_z @ Nov 9 2017, 23:15) в каждой...   Nov 9 2017, 21:41
- - arhiv6   Как минимум, это интересно - попробовать разные по...   Nov 7 2017, 13:17
|- - Forger   Цитата(arhiv6 @ Nov 7 2017, 16:17) А ещё ...   Nov 7 2017, 13:30
||- - DASM   Цитата(Forger @ Nov 7 2017, 16:30) В мелк...   Nov 7 2017, 14:28
||- - Forger   Цитата(DASM @ Nov 7 2017, 17:28) Я отказа...   Nov 7 2017, 14:45
||- - jcxz   Цитата(DASM @ Nov 7 2017, 16:28) Я отказа...   Nov 7 2017, 15:04
|- - jcxz   Цитата(arhiv6 @ Nov 7 2017, 15:17) Как ми...   Nov 7 2017, 15:00
- - Obam   Цитата(arhiv6 @ Nov 7 2017, 16:00) нужно ...   Nov 7 2017, 13:44
- - AHTOXA   Цитата(arhiv6 @ Nov 7 2017, 17:00) Как эт...   Nov 7 2017, 14:17
- - ViKo   Подтверждаю, RTX RTOS от Keil - весьма достойная п...   Nov 7 2017, 14:52
- - DASM   "прихожу лишь к одному выводу " - приход...   Nov 7 2017, 14:53
|- - jcxz   Цитата(DASM @ Nov 7 2017, 16:53) Вы лучше...   Nov 7 2017, 15:08
|- - Forger   Цитата(DASM @ Nov 7 2017, 17:53) "пр...   Nov 7 2017, 15:18
- - scifi   Гугл вводит на гитхаб. Возможно, всё украдено до н...   Nov 7 2017, 15:04
- - DASM   Так может Вы дадите совет, сколько памяти давать к...   Nov 7 2017, 15:08
|- - jcxz   Цитата(DASM @ Nov 7 2017, 17:08) Так може...   Nov 7 2017, 15:11
|- - DASM   Цитата(jcxz @ Nov 7 2017, 18:11) А в чём ...   Nov 7 2017, 15:29
|- - jcxz   Цитата(DASM @ Nov 7 2017, 17:29) Тем, что...   Nov 7 2017, 15:58
- - DASM   Я немного преувеличил для ясности. Эти РТОС замеча...   Nov 7 2017, 15:11
|- - Forger   Цитата(DASM @ Nov 7 2017, 18:11) Эти РТОС...   Nov 7 2017, 15:38
- - DASM   Да никто не хает, каждый до..ит как хочет. Просто ...   Nov 7 2017, 15:39
|- - Forger   Цитата(DASM @ Nov 7 2017, 18:39) Ваши РТО...   Nov 7 2017, 15:46
|- - jcxz   Цитата(DASM @ Nov 7 2017, 17:39) но навск...   Nov 7 2017, 16:11
|- - Forger   Цитата(jcxz @ Nov 7 2017, 19:11) Чтобы по...   Nov 7 2017, 16:13
- - arhiv6   Цитата(AHTOXA @ Nov 7 2017, 21:17) Здесь ...   Nov 7 2017, 15:59
|- - jcxz   Цитата(arhiv6 @ Nov 7 2017, 17:59) Пожалу...   Nov 7 2017, 16:16
|- - Forger   Цитата(jcxz @ Nov 7 2017, 19:16) Наверное...   Nov 7 2017, 17:56
||- - arhiv6   Цитата(Forger @ Nov 8 2017, 01:27) Как бы...   Nov 7 2017, 19:00
|- - jcxz   Цитата(arhiv6 @ Nov 7 2017, 19:28) Смотре...   Nov 7 2017, 21:33
- - arhiv6   jcxz, Forger, я не знаю, как правильно сделать, по...   Nov 7 2017, 18:14
- - DASM   Меня устраивает карусель кооперативная на таймерах...   Nov 7 2017, 18:50
|- - Forger   Цитата(DASM @ Nov 7 2017, 21:50) void Led...   Nov 7 2017, 19:01
- - DASM   Первое, что приходит в голову так: о как, у меня т...   Nov 7 2017, 19:05
|- - Forger   Цитата(DASM @ Nov 7 2017, 22:02) Просто к...   Nov 7 2017, 19:05
||- - DASM   Цитата(Forger @ Nov 7 2017, 22:05) Ну-ну,...   Nov 7 2017, 19:08
|- - arhiv6   Цитата(DASM @ Nov 8 2017, 02:05) Первое, ...   Nov 7 2017, 19:08
|- - Forger   Цитата(DASM @ Nov 7 2017, 22:05) Первое, ...   Nov 7 2017, 19:21
|- - jcxz   Цитата(DASM @ Nov 7 2017, 21:05) вы шину ...   Nov 7 2017, 21:46
- - DASM   Ну да , тут собственно у меня так и есть   Nov 7 2017, 19:13
- - DASM   @ Читайте матчасть по ARM Cortex.@ Ладно, спорить ...   Nov 7 2017, 19:29
|- - Forger   Цитата(DASM @ Nov 7 2017, 22:29) @ Читайт...   Nov 7 2017, 19:36
|- - AlexandrY   Цитата(Forger @ Nov 7 2017, 21:36) Для те...   Nov 7 2017, 20:41
||- - Forger   Цитата(AlexandrY @ Nov 7 2017, 23:41) Да ...   Nov 7 2017, 21:44
|- - AVR   Цитата(Forger @ Nov 7 2017, 22:36) ОК, сл...   Nov 8 2017, 08:44
||- - Forger   Цитата(AVR @ Nov 8 2017, 11:44) Ради него...   Nov 8 2017, 12:53
|- - jcxz   Цитата(Forger @ Nov 7 2017, 21:36) Для те...   Nov 8 2017, 20:49
|- - Forger   Цитата(jcxz @ Nov 8 2017, 23:49) может ес...   Nov 8 2017, 20:54
- - DASM   А где тут DMA и что и куда оно грузит?   Nov 7 2017, 21:01
|- - AlexandrY   Цитата(DASM @ Nov 7 2017, 23:01) А где ту...   Nov 8 2017, 06:13
- - DASM   Ну не знаю, у меня на Ардуино все проще, а на мали...   Nov 7 2017, 22:35
- - DASM   Да уж.. сколько чудных открытий человек недавно п...   Nov 8 2017, 21:23
|- - Forger   Цитата(DASM @ Nov 9 2017, 00:23) склетон ...   Nov 8 2017, 23:29
- - syoma   Возвращаясь к оригинальной теме по поводу прерыван...   Nov 17 2017, 10:45
|- - Forger   Цитата(syoma @ Nov 17 2017, 13:45) что AR...   Nov 17 2017, 11:07
|- - scifi   Цитата(syoma @ Nov 17 2017, 13:45) Каково...   Nov 17 2017, 11:15
||- - Forger   Цитата(scifi @ Nov 17 2017, 14:15) Всё он...   Nov 17 2017, 11:37
||- - syoma   Цитата(scifi @ Nov 17 2017, 14:15) Всё он...   Nov 17 2017, 12:02
||- - Forger   Цитата(syoma @ Nov 17 2017, 15:02) И мое ...   Nov 17 2017, 12:17
||- - Obam   Цитата(syoma @ Nov 17 2017, 16:02) …Если ...   Nov 17 2017, 13:03
||- - AlexandrY   Цитата(syoma @ Nov 17 2017, 14:02) Ну я н...   Nov 17 2017, 13:42
||- - jcxz   Цитата(syoma @ Nov 17 2017, 14:02) Наскол...   Nov 17 2017, 13:44
|- - Timmy   Цитата(syoma @ Nov 17 2017, 13:45) Каково...   Nov 17 2017, 12:01
- - syoma   Знающие люди подсказали такой вариант. У них работ...   Nov 17 2017, 18:04
- - AlexandrY   Цитата(syoma @ Nov 17 2017, 20:04) Знающи...   Nov 17 2017, 18:56
- - syoma   Цитата(AlexandrY @ Nov 17 2017, 21:56) Кт...   Nov 17 2017, 20:51
- - AlexandrY   Цитата(syoma @ Nov 17 2017, 22:51) Если б...   Nov 17 2017, 21:35


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

 


RSS Текстовая версия Сейчас: 3rd September 2025 - 08:05
Рейтинг@Mail.ru


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