|
Прерывание в прерывании, Для реализации Super Simple Tasker |
|
|
|
 |
Ответов
|
Nov 7 2017, 17:28
|

Знающий
   
Группа: Свой
Сообщений: 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?
--------------------
|
|
|
|
|
Nov 7 2017, 18:27
|

Профессионал
    
Группа: Свой
Сообщений: 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?
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|