|
Подскажите пожалуйста, про многозадачность. |
|
|
|
Oct 18 2006, 07:29
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 14-09-06
Пользователь №: 20 377

|
Есть несколько задач (программ) которые должны выполнятся с минимальным временем, можно организовать как линейный список функций, которые последовательно вызываются из главной функции main() при условии что время выполнения каждой функции ограничено т.е. внутри функции нет кода который задерживает выполнения (ожидает чего либо). Например одна функция обрабатывает принятый массив с USARTа. другая расшифровывает принятую команду и выполняет ее, подготавливает ответ к отправке (квитирование). Еще пару функций, которые что-то делают (обслуживают клавиатуру, исполнительные устройства). Получается все запутанно, если делать все функции в виде конечных автоматов с минимальным временем работы каждой. Хорошо было бы, если каждая функция выполнялась в виде задачи, ожидает, данные с параллельного потока пускай ждет, получила что хотела, выполняет. Есть задержка в функции скажем, на 20 секунд, пускай ждет, в это время выполняются другие функции. С операционными системами как-то все сложно, может планировщик задач да и все. Какие есть решение не сложные? Механизм взаимодействия функций друг с другом.
|
|
|
|
|
 |
Ответов
|
Oct 26 2006, 22:05
|
Знающий
   
Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984

|
2vod Смотрел,хорошая оська,незнаю как насчет фунциональности,так как глубоко не копал, но написано стильно и понравились кое какие нестандартные приемы,в частности реализация косвенного перехода на подпрограмму (задачу) с маневрами со стеком и т.д. Оказывается не только я такой "экстремал-извращенец", хотя конечно вот это необязательно было делать Код ____INIT_THREAD_CONTEXT: std Y+CONST_THREAD_CONTEXT_SIZE+3,r24;save SPL std Y+CONST_THREAD_CONTEXT_SIZE+2,r25;save SPH std Y+CONST_THREAD_CONTEXT_SIZE+1,REG_OS_TEMP;save SREG std Z+CONST_THREAD_AMOUNT,Yh st Z+,Yl adiw Y,CONST_THREAD_MEM_SIZE RET ;------------------------------------------------ Для этого есть такая рееедко применяемая ,но всетаки существующая команда косвенного перехода на подпрограмму по Z icall .  Скажу чесно,оси никогда не цеплял,так как считаю что асм потеряет свои преимущества перед другими языками при ее применении. Но своебразную многозадачность реализовывал.Сами знаете ,частенько на асме проги небольшие выходят .Вот и захотельсь мне зделать многофункциональный девайс ,тоесть впихнуть несколько программ (которые были уже написаны) в один контроллер. Я не навязываю свой способ ,но я думаю будет интересен.Раскажу вкратце. 1 Заместь векторов в таблице указываем вызов планировщика Например заместь rjmp PROG rjmp INT0 rjmp INT1 ..... Пишем rcall PLAN_START rcall PLAN rcall PLAN ..... Я думаю догадались для чего заместь rjmp стоит rcall    Чтобы планировчик по стеку смог определить какой адресс вектора был у прерывания . 2 К этому адрессу плюсуем адрес начала векторов прерываний одной из программ который выбрал планировщик ,подвигаем стек,и переходим на вектор,ну а дальше как обычно. 3 Естественно в PLAN_START обнуляем память до RAMEND-1 ,последняя ячейка у нас для выбора программы,ну и т.д. Вот такие извращения.  Что нам это дает? Можно просто тупо соединять несколько программ,с сохранением абсолютно ВСЕХ прерываний для каждой программы без каких либо переделок,все что нужно если хотим программно перепрыгивать из одной программы в другую - дописать в нужном месте номер проги в последнюю ячейку и call PLAN_START  
|
|
|
|
|
Oct 27 2006, 03:42
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 20-10-06
Пользователь №: 21 500

|
to bodja74 Цитата(bodja74 @ Oct 27 2006, 05:05)  хотя конечно вот это необязательно было делать Код ____INIT_THREAD_CONTEXT: Этим вызовом я инициализирую 1. в стек задчи сохраняю адрес возврата (в д.с. стартовый адрес) 2. инициализирую соотв. ячейку в таблице указателей задач текущим указателем стека задачи после всей инициализации молча прыгаю в планировщик. там пусть сам выбирает [offtopic] Цитата(bodja74 @ Oct 27 2006, 05:05)  Для этого есть такая рееедко применяемая ,но всетаки существующая команда косвенного перехода на подпрограмму по Z icall .  Я пока "не догнал", как там "матеро" можно его использовать, но будем думать. Там еще проблема. Я регистр Z оставил для пользования прерываниям - такая специфика - надо каждые __256 тактов__ _гарантировано_ обновить ШИМ-регистр таймера. А все значения в таблице прописаны во флэш. таблица 1кб  Цитата(bodja74 @ Oct 27 2006, 05:05)  Скажу чесно,оси никогда не цеплял,так как считаю что асм потеряет свои преимущества перед другими языками при ее применении. ИМХО напрасно, если писать что-то тяжелее "эха" на уарте. Цитата(bodja74 @ Oct 27 2006, 05:05)  Но своебразную многозадачность реализовывал.Сами знаете ,частенько на асме проги небольшие выходят .Вот и захотельсь мне зделать многофункциональный девайс ,тоесть впихнуть несколько программ (которые были уже написаны) в один контроллер. Ну то что Вы копали, спасибо кстати, это и есть "реализация своеобразной многозадачности". про проги небольшие молчу - свою "ОС" пользую когда прога занимает от 1кб. [/offtopic] Цитата(bodja74 @ Oct 27 2006, 05:05)  Я не навязываю свой способ ,но я думаю будет интересен.Раскажу вкратце. ... Идею понял. Поздравляю, редкостное извращение  Я придерживаюсь тех позиций что прерывание должно отработать максимально быстро. И прерывания полностью отвязаны от процессов. пример кода к указанному выше требованию. Код MODULATOR_INT: ____OCR_REG_WRITE MOD_PWM;1 lds Zh,ADR_MOD_TABLE_HIGH;2 mov Zl,MOD_ADR ;1 lpm MOD_PWM,Z+ ;3 с инкрементом mov MOD_ADR,Zl ;1 cpse MOD_PWM,Zh ;1/2 хитрость RETI ;4 - 13 тактов SREG не портится, Z_reg портиться далее код перезагрузки указателей на следующий сигнал В реализиции "AVRasmOS.zip" на любой евент может быть назначена любая комбинация задач. ну а в прерывании ____EVENT_SET и в путь  просто лишний переход RCALL (как у Вас) и последющие вычисления требует (ИМХО навскидку) многовато тактов и не способствуют универсализиции, той что не потребует много накладных расходов.
|
|
|
|
Сообщений в этой теме
_Алекс Подскажите пожалуйста, про многозадачность. Oct 18 2006, 07:29 Сергей Б Ну для этого и придуманы прерывания, например для ... Oct 18 2006, 07:35 _Алекс Цитата(Сергей Б @ Oct 18 2006, 10:35) Ну ... Oct 18 2006, 07:42 Сергей Б Ну так ясное дело в прерывании, например для юарта... Oct 18 2006, 08:01 Alexander Storm Попробуй всеж чуток с операционками разобраться, п... Oct 18 2006, 19:24  Dog Pawlowa Осень. Пора, как все, лететь к RTOS.
Но я пока ... Oct 19 2006, 09:04   _Алекс Цитата(Dog Pawlowa @ Oct 19 2006, 12:04) ... Oct 19 2006, 09:26    Dog Pawlowa Цитата(_Алекс @ Oct 19 2006, 12:26) Поясн... Oct 19 2006, 09:48  osnwt Цитата(Alexander Storm @ Oct 18 2006, 22... Oct 19 2006, 14:09   AVR Цитата(osnwt @ Oct 19 2006, 18:09) Цитата... Oct 19 2006, 16:38 GinRider Цитата(_Алекс @ Oct 18 2006, 10:29) Получ... Oct 18 2006, 08:13 Сергей Б Цитата(GinRider @ Oct 18 2006, 12:13) Цит... Oct 18 2006, 08:27 rezident Можно и без вложенных прерываний в одном прерывани... Oct 18 2006, 08:37 GetSmart В винде вот красиво сделано. Там есть обработчики ... Oct 18 2006, 08:43 IgorKossak Наклёвывается необходимость применения RTOS.
По кр... Oct 18 2006, 08:52 GinRider Цитата(IgorKossak @ Oct 18 2006, 11:52) Н... Oct 18 2006, 09:28  µµC Цитата(GinRider @ Oct 18 2006, 13:28) Есл... Oct 18 2006, 09:47  SasaVitebsk Цитата(GinRider @ Oct 18 2006, 12:28) Цит... Oct 18 2006, 09:50   GinRider Цитата(SasaVitebsk @ Oct 18 2006, 12:50) ... Oct 18 2006, 11:29    µµC Цитата(GinRider @ Oct 18 2006, 15:29) Про... Oct 18 2006, 12:12     defunct Цитата(µµC @ Oct 18 2006, 15:12) Получает... Oct 18 2006, 13:48 _Алекс Есть функции, есть планировщик задач. Функции заци... Oct 18 2006, 11:18 Сергей Борщ Цитата(_Алекс @ Oct 18 2006, 14:18) Есть ... Oct 18 2006, 11:56 defunct Цитата(_Алекс @ Oct 18 2006, 10:29) Есть ... Oct 18 2006, 11:32 Михаил Горюнов Скромная попытка объяснить необъятное двумя словам... Oct 18 2006, 13:09 _Алекс Почитал по операционнкам, попроще получается коопе... Oct 19 2006, 08:06 Hz! Цитата(_Алекс @ Oct 19 2006, 11:06) Почит... Oct 19 2006, 09:20 Hz! ЦитатаЯсно, а кто задачи с приоритетами 2 и 3 дела... Oct 19 2006, 10:05 Alex B._ Автор jacOS высылает исходники по запросу, напишит... Oct 19 2006, 17:50 _Алекс Посмотрел ОС scmRTOS, jacOS, Salvo. многозадачност... Oct 20 2006, 05:52 osnwt Цитата(_Алекс @ Oct 20 2006, 08:52) Посмо... Oct 20 2006, 06:09 µµC Цитата(_Алекс @ Oct 20 2006, 09:52) Посмо... Oct 20 2006, 09:47  _Алекс Исходники можно взять для jacos, и повторю, нужны ... Oct 20 2006, 10:50   µµC Цитата(_Алекс @ Oct 20 2006, 14:50) А у в... Oct 20 2006, 11:19 Alex B._ >> Один минус: отсутствие исходников
Это не... Oct 20 2006, 12:39 osnwt Цитата(Alex B._ @ Oct 20 2006, 15:39) ... Oct 20 2006, 16:57 Alex B._ Согласен на полминуса.
Для того чтобы лучше понять... Oct 20 2006, 18:27 osnwt Поддержка - или платить постоянно за нее, или авто... Oct 20 2006, 18:33 haker_fox Цитата(_Алекс @ Oct 18 2006, 16:29) Есть ... Oct 21 2006, 03:26 yod У многих "универсальных" ОС основная про... Oct 24 2006, 10:18 Turion А ничего, что на сайте scmRTOS висит версия 2.04a-... Oct 25 2006, 11:59  Сергей Борщ Цитата(Turion @ Oct 25 2006, 14:59) А нич... Oct 25 2006, 12:13 µµC Цитата(yod @ Oct 24 2006, 14:18) Функция ... Oct 25 2006, 12:47  yod jacOS - это круто, потому что FSM (Finite State Ma... Oct 25 2006, 12:57   µµC Цитата(yod @ Oct 25 2006, 16:57) потому ч... Oct 25 2006, 13:14    yod Цитата(µµC @ Oct 25 2006, 20:14) В каком ... Oct 26 2006, 03:33     dxp Цитата(yod @ Oct 26 2006, 10:33) Цитата(µ... Oct 26 2006, 04:17      Dog Pawlowa Цитата(dxp @ Oct 26 2006, 07:17) А само ... Oct 26 2006, 06:06       osnwt Цитата(Dog Pawlowa @ Oct 26 2006, 09:06) ... Oct 26 2006, 06:39     µµC Цитата(yod @ Oct 26 2006, 07:33) "За... Oct 26 2006, 17:30  bodja74 Цитата(yod @ Oct 27 2006, 06:42) Я пока ... Oct 27 2006, 20:13   trofim .def Zero = rxx ;любой регистр
clr Zero ; в и... Oct 31 2006, 11:16    bodja74 Цитата(trofim @ Oct 31 2006, 14:16) Кто п... Oct 31 2006, 13:02     =GM= Цитата(bodja74 @ Oct 31 2006, 13:02) Цита... Oct 31 2006, 16:30      bodja74 Цитата(=GM= @ Oct 31 2006, 19:30) Цитата(... Oct 31 2006, 16:40       =GM= Цитата(bodja74 @ Oct 31 2006, 16:40) Абсо... Oct 31 2006, 17:41        bodja74 Цитата(=GM= @ Oct 31 2006, 20:41) Ну ладн... Oct 31 2006, 19:27         =GM= GM Ну ладно, при случае(:-). А вы где территориаль... Nov 1 2006, 11:07          bodja74 Цитата(=GM= @ Nov 1 2006, 14:07) GM Ну ла... Nov 1 2006, 16:41           =GM= [quote name='bodja74' date='Nov 1 2006... Nov 1 2006, 18:01           =GM= Цитата(bodja74 @ Nov 1 2006, 16:41) ЗЫ ГЫ... Nov 2 2006, 15:43
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|