Хотел поинтересоваться у кого возникали потребности запускать несколько разнообразных процедур(от пары комманд до целого алгоритма на пол секунды) по определённым временным интервалам(от 1 мкс до пол дня) для каждой и в определённой последовательности и при этом интервалы не должны зависеть от времени исполнения всех процедур которые должны например ещё и в фоне мониториться
Виртуальная потоковая многозадачность на ATMega
Здравствуйте!
Хотел поинтересоваться у кого возникали потребности запускать несколько разнообразных процедур(от пары комманд до целого алгоритма на пол секунды) по определённым временным интервалам(от 1 мкс до пол дня) для каждой и в определённой последовательности и при этом интервалы не должны зависеть от времени исполнения всех процедур которые должны например ещё и в фоне мониториться
Хотел поинтересоваться у кого возникали потребности запускать несколько разнообразных процедур(от пары комманд до целого алгоритма на пол секунды) по определённым временным интервалам(от 1 мкс до пол дня) для каждой и в определённой последовательности и при этом интервалы не должны зависеть от времени исполнения всех процедур которые должны например ещё и в фоне мониториться
- Реклама
это вам смотреть в сторону RTOS. их есть не одна, многие бесплатные, например, uOS
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Так куда ж там эта ось если нужно ну 4-6 "под программок" максимум не считая перываний
я пока реализовал на таймере, ведущем текущее системное время икаждой подпрограмме задаю с какого времени она работает, она в начале сама себе назначает новое время следующего запуска и потом отрабатывает своё тело....а условия этих все подпрограммок крутятся в вечном цикле главной функции, в которой ещё сделаны подпрограммы слежения за буферами и их отрабатыванием при заполнении
я пока реализовал на таймере, ведущем текущее системное время икаждой подпрограмме задаю с какого времени она работает, она в начале сама себе назначает новое время следующего запуска и потом отрабатывает своё тело....а условия этих все подпрограммок крутятся в вечном цикле главной функции, в которой ещё сделаны подпрограммы слежения за буферами и их отрабатыванием при заполнении
по сути вы сделали свою ось
немного кривенькую и не универсальную - вот и вся разница. но с каждым новым нюансом проблему станут нарастать, как снежный ком - и что тогда? имхо, если такая многозадачность действительно требуется - сразу лучше в сторону RTOS смотреть и ее осваивать.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Ну пока что типа как проблем-то и нету 
Просто интересно кто какие подходы реализовывал...
В частности например разделение доступа к ресурсу....понятное дело МК не двуядерный и одновременно в полном смысле этого слова 2 кода выполняться не могут...но вот например печатаю я с ком порта текст по символьно в дисплюй....и тут приходит время в другое место экрана вывести например температуру....наверное надо было бы как-то знать что ещё не закончена печать и притормозить вывод другого контента другим обработчиком...
Просто интересно кто какие подходы реализовывал...
В частности например разделение доступа к ресурсу....понятное дело МК не двуядерный и одновременно в полном смысле этого слова 2 кода выполняться не могут...но вот например печатаю я с ком порта текст по символьно в дисплюй....и тут приходит время в другое место экрана вывести например температуру....наверное надо было бы как-то знать что ещё не закончена печать и притормозить вывод другого контента другим обработчиком...
- Реклама
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
Почитайте книжечки по теории ОСей, там это очень прекрасно написано, а вообще, нужно зделать что-то типа менеджера/диспетчера задач который как раз и будет это рулить, к примеру делать очереди, и смотреть приоритетности задач, и уже во главу ставить та которая должна выполнятся незамедлительно, делите задачи на 2 типа: требуют немедленного выполнения и могут подождать, и от этого уже пляшите.clawham писал(а):Ну пока что типа как проблем-то и нету
Просто интересно кто какие подходы реализовывал...
В частности например разделение доступа к ресурсу....понятное дело МК не двуядерный и одновременно в полном смысле этого слова 2 кода выполняться не могут...но вот например печатаю я с ком порта текст по символьно в дисплюй....и тут приходит время в другое место экрана вывести например температуру....наверное надо было бы как-то знать что ещё не закончена печать и притормозить вывод другого контента другим обработчиком...
Даташит - библия моя...


- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
Вот моя папка архива по ОСькам - просто как перечень некоторых


это всё слишком сложно и применимо больше к большим серьёзным камням типа арма 
а у меня только на реализаци. того что уже есть со всеми возможными оптимизациями ушло 75% флешки и 300 байт стека - памяти у меня свободной всего 10 байт
хочется какого-то простого алгоритма создания очереди выполнения и отсроченного выполнения. Любая задача может попасть под периодичность выполнения....вот и получаемые приоритеты...
в общем пока получается ничего лучшего и не предвидется
а у меня только на реализаци. того что уже есть со всеми возможными оптимизациями ушло 75% флешки и 300 байт стека - памяти у меня свободной всего 10 байт
хочется какого-то простого алгоритма создания очереди выполнения и отсроченного выполнения. Любая задача может попасть под периодичность выполнения....вот и получаемые приоритеты...
в общем пока получается ничего лучшего и не предвидется
- Сообщения: 293
- Зарегистрирован: Пн дек 24, 2007 07:09:09
Почитайте здесь http://easyelectronics.ru/avr-uchebnyj- ... adach.html. Он хорошо пишет, жаль что на асме.
Даташит - библия моя...


- Сообщения: 828
- Зарегистрирован: Пн мар 16, 2009 21:40:57
Бредни электроникс ! Теперь понял почему там автор такой бред пишет ! Оказывается забивал на все всю учебу - так похоже и научился.
Предупреждение! Aheir
Теперь другим мозги бредом забивает.Как отучиться в Южно Уральском Гос Университете забивая на все и вся
Предупреждение! Aheir
Последний раз редактировалось ikarab Ср июл 08, 2009 22:38:02, всего редактировалось 2 раза.
а я там уже бывал и не раз...человечек конечно много чего интересного для новичков выкладывает но...в принципе-то нового для себя я ничего не нашел...да .... всё что можно придумать это операционка уОс или ей подобные но...сношком оно много ресурсов жрёт + привыкать писать по этому шаблону + всёравно это очень приблизительно...да у меня в принципе тот же функционал заложен - в данный момент и последовательности и прерывания и фоновые задачи и приостановки на время и так далее но без стеков без диспетчера задач и таймер - то всего навсего отсчитывает системное время в милимекундах и минутах...в принципе-то всё очень наглядно и по шаблону можно попереповторять все любые вариации требуемые...
Просто как просграммист - чую есть альтернативные методы борьбы с распределением времени ядра и скорее всего более красивые но я пока что их не вижу...итак нормально...но чувствую я что скоро прийдёться пересаживаться на мегу 32
- не справляется моё чудо со всем что я на него нагородил - в частности обновление 20 раз в секунду экрана потоковыми данными из ком-порта....и было б всё хорошо если б эта сволоч работала быстрее....никак не могу поднять на своей мамке скорость выше 115200...
Просто как просграммист - чую есть альтернативные методы борьбы с распределением времени ядра и скорее всего более красивые но я пока что их не вижу...итак нормально...но чувствую я что скоро прийдёться пересаживаться на мегу 32
Сделай буфер, и обновляй свой дисплюй из буфера каждые, например, 20 мс. А прогой выводи в буфер. И проблема решенано вот например печатаю я с ком порта текст по символьно в дисплюй....и тут приходит время в другое место экрана вывести например температуру....наверное надо было бы как-то знать что ещё не закончена печать и притормозить вывод другого контента другим обработчиком...
- Сообщения: 387
- Зарегистрирован: Пт сен 12, 2008 03:26:14
Простейший диспетчер (который я описывал) и две очереди (задач и таймеров) это мизер ресурсов. На асме занимает не более 300байт флеша и десяток байт ОЗУ(я в Тини2313 ее пихаю и еще остается вагон места)
Если не знаете асма, то на Си то же самое будет весить не намного больше (думаю очередь задач можно через указатели легко реализовать). Зато будет единый скелет который остается только обвесить мясом. И который не надо будет править при изменении/наворачивании алгоритма.
Классические же способы разделения времени на основании флажков/переходов страдают тем, что для того чтобы подправить прогу нужно заново переписать всю управляющую структуру. Это во первых нетехнологично, а во вторых ошибок можно нагородить которые фиг найдешь.
Полноценные ОС с вытесняющим мультитаскингом ИМХО на МК уровня АВР избыточны, тут вполне можно обойтись грамотно настроенной кооперативкой.
Если не знаете асма, то на Си то же самое будет весить не намного больше (думаю очередь задач можно через указатели легко реализовать). Зато будет единый скелет который остается только обвесить мясом. И который не надо будет править при изменении/наворачивании алгоритма.
Классические же способы разделения времени на основании флажков/переходов страдают тем, что для того чтобы подправить прогу нужно заново переписать всю управляющую структуру. Это во первых нетехнологично, а во вторых ошибок можно нагородить которые фиг найдешь.
Полноценные ОС с вытесняющим мультитаскингом ИМХО на МК уровня АВР избыточны, тут вполне можно обойтись грамотно настроенной кооперативкой.
для того же примера скажу что 48*84 точек гораздо больше чем памяти МК не говоря уже о свободнойАlex писал(а):Сделай буфер, и обновляй свой дисплюй из буфера каждые, например, 20 мс. А прогой выводи в буфер. И проблема решенано вот например печатаю я с ком порта текст по символьно в дисплюй....и тут приходит время в другое место экрана вывести например температуру....наверное надо было бы как-то знать что ещё не закончена печать и притормозить вывод другого контента другим обработчиком...
Ну вы, господа, даёте.... RTOS на AVR ставить. Для обучения, ознакомления с ОС оно, возможно, и стоит, но для реального дела вряд ли.
На 128-й Меге делал аппарат (коммерческий), выполняющий "одновременно" до 10 задач, порой достаточно ресурсоёмких (2 из них были связаны с фильтрацией сигналов). Для сравнения - коллега написал ОС для той же самой меги, но вот для приложений ресурсов почти не осталось (в первую очередь оперативной памяти). В итоге в продажу пошёл мой вариант.
Если нет необходимости запускать/останавливать произвольные приложения, то никакой RTOS не требуется. Достаточно распределить задачи по приоритетам, оценить затраты процессорного времени на каждую, оценить допустимые задержки обработки событий (в принципе связано с определением приоритета задачи) и на основе этой информации написать простейший диспетчер, выделяющий каждой задаче определённое время на выполнение. Очень высокой частотой системного таймера увлекаться не стоит - машинка то слабая. Наиболее критичные ко времени выполнения задачи придётся реализовывать на прерываниях.
Если нужно более подробно - опишите что должно делать устройство.
На 128-й Меге делал аппарат (коммерческий), выполняющий "одновременно" до 10 задач, порой достаточно ресурсоёмких (2 из них были связаны с фильтрацией сигналов). Для сравнения - коллега написал ОС для той же самой меги, но вот для приложений ресурсов почти не осталось (в первую очередь оперативной памяти). В итоге в продажу пошёл мой вариант.
Если нет необходимости запускать/останавливать произвольные приложения, то никакой RTOS не требуется. Достаточно распределить задачи по приоритетам, оценить затраты процессорного времени на каждую, оценить допустимые задержки обработки событий (в принципе связано с определением приоритета задачи) и на основе этой информации написать простейший диспетчер, выделяющий каждой задаче определённое время на выполнение. Очень высокой частотой системного таймера увлекаться не стоит - машинка то слабая. Наиболее критичные ко времени выполнения задачи придётся реализовывать на прерываниях.
Если нужно более подробно - опишите что должно делать устройство.
Настоящему коту и в декабре март!
- Сообщения: 387
- Зарегистрирован: Пт сен 12, 2008 03:26:14
Кооперативку почему бы нет? Памяти она сожрет мизер. Та же Сальва например.Дикий Кот писал(а):Ну вы, господа, даёте.... RTOS на AVR ставить.


