Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры Atmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.51/79: Рейтинг темы: голосов - 79, средняя оценка - 4.51
kyr_tt
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,368
1

RTOS for AVR

12.01.2011, 00:31. Просмотров 14292. Ответов 27
Метки нет (Все метки)

Цитата Сообщение от zyxmom
Цитата Сообщение от vystor_b_k
По моему опыту, АРМ7 очень неудобен в системах реального времени из-за слишком запутанной и слабенькой системы прерываний.
А много ли реально приложений, где совсем никак нельзя обойтись без системы реального времени?

Реальна ли система реального времени? (теоретики дают время переключения контекста 1мкс или нет?).
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.01.2011, 00:31
Ответы с готовыми решениями:

RTOS для AVR. Какая там загрузка контроллера?
Пишу диспетчер мультизадачности для AVR. Интересен вопрос - сколько примерно тактов отъедают...

AVR AVRISP STK500 V3.0 USB ISP Programmer for AVR IC
Люди помогите плз. не могу разобраться. приобрел этот чудный девайс (AVR AVRISP STK500 V3.0 USB...

AVR Atmega324PU не прошивается AVR ISP Mk2
Добрый день. На плату впаян данный микроконтроллер в корпусе tqfp. При подключении программатора...

Анализ стека AVR / AVR stack analysis
Привет! Уперся я в стек, и решил понять что почем. Нашел вот такой вот скриптик:...

Время и RTOS
Доброго времени суток! Имеется МК STM32T4 пользующийся услугами FriiRTOS. Есть возможность...

27
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 00:34 2
Ну, 1 мкс - это на чем-то весьма серьезном, и работа из ROM. Реально получается побольше... Однако около 100 килогерц на STM32 я выжимал для пробы, в реальном приложении было 50. Работало... и задачки были не такие уж маленькие.

Сейчас анонсированы МК с нулевым временем ожидания flash, посмотрим, что будет на них.
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
12.01.2011, 10:58 3
Цитата Сообщение от okotimiv
Ну, 1 мкс - это на чем-то весьма серьезном, и работа из ROM. Реально получается побольше... Однако около 100 килогерц на STM32 я выжимал для пробы, в реальном приложении было 50. Работало... и задачки были не такие уж маленькие.

Сейчас анонсированы МК с нулевым временем ожидания flash, посмотрим, что будет на них.
Ну во-первых, надо бы определиться с понятием "системы реального времени".

Во всех учебниках пишут, что система называется системой реального времени, если ее реакция на внешние раздражения УКЛАДЫВАЕТСЯ в ТРЕБОВАНИЯ к этой системе.

Таким образом, если у меня требования - среагировать в течение 24 часов, и система успевает среагировать в этом промежутке времени - то такая система ТОЖЕ БУДЕТ системой реального времени!
Так что отсюда плясать надо!
Все дело в требованиях к системе!

Другое дело, что система должна быть базирована НЕ на событиях, а на временных рамках. Как-то криво сказал. Попробую объяснить.
Например - винды и линукс - системы, построенные на событиях. Т.е. у них шедулер работает на основании событий - нажал пользователь кнопку - пошло событие в очередь задач, и только тогда соответствующая задача запускается.

А системы реального времени должны быть построены на основе жестких временных рамок - на каждую задачу отведено определенное время процессора, вне зависимости от событий. И это время может быть, например, 5 секунд раз в 24 часа ;-) , но это уже система реального времени, так как задача запускается в строго заданных временных рамках. Ну примерно так.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 12:41 4
Илексей, определение совершенно правильное, но где вы нахватались этой ерунды про "события" и "временные рамки"? :))

В любой нормальной RTOS есть система событий, и она почти всегда задействована. И никакого "отведено определенное время процессора" нет и в помине.

Но давайте про RTOS не здесь, а в какой-то другой ветке?
0
12.01.2011, 12:41
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
12.01.2011, 12:54 5
Цитата Сообщение от okotimiv
Илексей, определение совершенно правильное, но где вы нахватались этой ерунды про "события" и "временные рамки"? :))

В любой нормальной RTOS есть система событий, и она почти всегда задействована. И никакого "отведено определенное время процессора" нет и в помине.

Но давайте про RTOS не здесь, а в какой-то другой ветке?
Нахватался на одном семинаре про встроенные линукс, которые тут проводят.
А так же - увидел своими глазами, когда начал ковырять Integrity на текущей работе, и FriiRTOS дома.
И, что самое интересное, отвечал этими ответами на такие вопросы на собеседовании при устройстве на работу ;-)

"В любой нормальной RTOS есть система событий, и она почти всегда задействована."

Ага. Задействованна. Но я имел ввиду малость другое - что обработка этих событий происходит в одном случае именно по появлению этого события, т.е. событийный запуск задачи, либо тогда, когда задачу шедулер запустит. Т.е. через определенные промежутки процессорного времени.

"И никакого "отведено определенное время процессора" нет и в помине."
- в помине есть. И вполне себе работает. ;-) просто не всегда задействовано. В той же Integrity можно выбрать - либо задачи переключаются через определенные промежутки времени, либо работают так, как события появляются.

Во FriiRTOS тоже можно выбрать либо кооперативные задачи, либо вытесняемые (кажется так называется).

Так что не только теорией надо питаться, но и практикой тоже.

А вот Винда и линукс - это событийные операционки. Вам это любой начинающий программер скажет.
Одно то, что главный цикл программы построен на обработке сообщений, уже указывает на событийность операционки.

"Но давайте про RTOS не здесь, а в какой-то другой ветке?"
Можно, но мне в лом новую ветку для этого создавать, тем более, что мое мнение такое, и таковым оно и останется, так как практика (и не малая. Всего то каких то 10 лет работы) показывает именно это.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 13:13 6
Цитата Сообщение от MostirOtyxiy
Но я имел ввиду малость другое - что обработка этих событий происходит в одном случае именно по появлению этого события, т.е. событийный запуск задачи, либо тогда, когда задачу шедулер запустит. Т.е. через определенные промежутки процессорного времени.
Ппц. Илексей, вы что, издеваетесь? Посмотрите внимательно на граф состояния задачи любой RTOS, в том числе и FriiRTOS, и перестаньте уже бредить про события, пожалуйста :))

Если задача находится в состоянии ожидания события, она не будет запущена шедулером, пока событие не наступит. И в таком состоянии почти любая задача пребывает бОльшую часть времени. Она может ждать события (event), какого-то определенного времени, если в ней задержка, освобождения семафора, появления чего-то нужного в очереди, активности с противоположного конца трубы, и так далее. И какие, блин "определенные промежутки"? Это применимо только к случаю одновременной активности задач с одинаковым приоритетом, зовется Round Robin, и есть не во всех RTOS, в freeRTOS вроде есть, в uCOS нет, в большинстве коммерческих есть. Однако таких ситуация разработчики стараются избегать, именно потому что выполнение становится недетерминированным. В остальных случаях поток исполнения определяется самой задачей, системой приоритетов (задача может быть прервана другой задачей с более высоким приоритетом), и прерываниями, в том числе и системными.

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

Продолжайте ковырять дальше, семинара явно оказалось недостаточно.
0
MostirOtixiy
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
12.01.2011, 13:25 7
Цитата Сообщение от okotimiv
Ппц. Илексей, вы что, издеваетесь? Посмотрите внимательно на граф состояния задачи любой RTOS, в том числе и FriiRTOS, и перестаньте уже бредить про события, пожалуйста :))
Ну ну.
Вы же вроде преподавал там где-то. Освежите ваши знания. Хорошо?

"Если задача находится в состоянии ожидания события, она не будет запущена шедулером"
-Тут ключевой момент - в ожидании события. Вот мы и пришли к событийным ОСам.
Но что же мне делать, если событий я не жду, или, точнее, иногда на них "смотрю", а все остальное время моргаю светодиодом?
во FriiRTOS, например, шедулер именно что переключает задачи путем переключения контекста. Естественно, что предварительно он смотрит, ждет ли задача какие либо события. но если она их не ждет - то он ее включает и все тут.
Все. На этом все по этой теме.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
12.01.2011, 14:04 8
Цитата Сообщение от MostirOtyxiy
"Если задача находится в состоянии ожидания события, она не будет запущена шедулером"
-Тут ключевой момент - в ожидании события. Вот мы и пришли к событийным ОСам.
ну так FriiRTOS - событийная ось или нет? а ведь в ней шедулер точно так же НЕ запустит поток, если он висит в ожидании события.
или линукс возьмите, сделайте программку из while(1); и запустите. две запустите, три... они у вам ВСЕ одновременно будут работать, без каких либо событий в "событийной" (по-вашему) оси. не видите здесь "че-то не так"?

таким образом, если ос вытесняющая, она будет запускать ВСЕ задачи, которые не ждут событий, по своей очереди. и событийность организуется уже вами - хотите, ждите события, не хотите - не ждите. разница только в том может быть, что одна ос переключит сразу же контекст на задачу ждущую события (если у нее бОльший приоритет), а другая как-нибудь позже, как получится.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 14:15 9
Ладно, ребята, вижу что никакого понимания принципов работы RTOS нет. Ни событийных, ни синхронных.

Gредлагаю перенести тему в SOFT, AVR тут в общем-то не при чем.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
12.01.2011, 14:33 10
как так нет?
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 14:44 11
А вот так, нету. Попробуйте сделайте три задачи с циклами while(1) и запустите их в uCOS, дав последовательные, к примеру. приоритеты (одинаковых там не может быть). Увидите, что будет. Возьмите PowerPac или RTL, отключите RR, и сделайте то же самое уже с одинаковым приоритетом. И тоже будете удивлены.

Для справки - жесткое распределение времени, это свойство синхронных RTOS, они работают по жесткому, заранее разработанному графику. И это ОЧЕНЬ узскоспециальный случай RTOS, его тут наверное даже нет смысла обсуждать. Эти RTOS требуют высокой квалификации разработчика, крайне не гибки в использовании, требуют немалых расчетов при создании систем. Нужны там, где есть именно синхронные приложения, а таких не так уж много.

Большинство наиболее распространенных RTOS - event-dryven. Основная задача - детерминированное по времени реагирование на асинхронные события, наиболее часто встречается в реальных приложениях.

Моргание светодиодом, как это ни странно, классический случай событийной системы.
0
Orsymus Orso
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
12.01.2011, 14:47 12
Может не сихронных, а вытесняющих? Синхронно на одном ядре ничто не может работать.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 14:52 13
Вот это и есть одна из основных путаниц. Нет, ИМЕННО синхронных. Вытесняющие или кооперативные - это описание совершенно другого механизма.

Синхронные тут всего лишь русски перевод, не слизком удачный. На самом деле time-dryven.
0
ptumbum
0 / 0 / 0
Регистрация: 07.10.2010
Сообщений: 135
12.01.2011, 15:11 14
Orsymus Orso, за синхронностью это надо к Parlax Propeller =) Там восемь микроядер =)
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 15:22 15
И абсолютно необязательно при этом, что задачи на этих микроядрах будут работать синхронно. Одновременно и синхронно - не синонимы.
0
ptumbum
0 / 0 / 0
Регистрация: 07.10.2010
Сообщений: 135
12.01.2011, 15:48 16
okotimiv, ну понятно. Синхронизировать надо уже ручками, через общую память.
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 15:59 17
Совершенно необязательно через память. Собственно, стандартные методы взаимодействия через общую память как раз асинхронные.
0
ptumbum
0 / 0 / 0
Регистрация: 07.10.2010
Сообщений: 135
12.01.2011, 16:04 18
okotimiv, не я говорю, как в пропеллере приходилось делать. Ну ладно, чего-то я в оффтоп полез =) Там даже не rtos, а просто многозадачность =)
0
okotimiv
1 / 1 / 0
Регистрация: 30.08.2010
Сообщений: 3,382
12.01.2011, 16:28 19
Ладно.

Однако путаница в головах, судя по всему, изрядная.

То, к чему с самого начала прицепился Илексей (семинар, что-ли, повлиял) - это системы, управляемые временем. То есть их поведение, и поведение каждой задачи внутри такой системы, полностью описывается точной временной диаграммой, которая и является основным и часто единственным основанием для переключение контекстов и изменения статуса задач. Последовательность выполнения тоже заранее известна (во всяком случае почти всегда относительно любой выбранной пары взаимодействующих задач). Это очень узкий класс систем, и мнение о том, что только они являются "настоящими системами реального времени", совершенно неверно.

Кстати говоря, частенько такие системы возникают просто "на коленке", вообще без RTOS. И часто именно последовательный переход на систему управляемую событиями, делает работу более продуктивной. И даже уменьшает время отклика. Например, опрос клавиатуры с определенным и неизменным интервалом - система, управляемая временем. Если же вы делаете прерывание - это уже событие. Если это прерывание создает event, или пихает что-то в очередь - это уже настоящая event-dryven система. И согласитесь, что она может работать и быстрее, и эффективнее опроса. Почему? Да потому что нажимающий кнопки с МК не синхронизирован, а пытаться синхронно обрабатывать асинхронные по сути дела процессы, занятие не слишком продуктивное.

А таких процессов в реальной среде, в которой работают устройства на МК - большинство. Подавляющее большинство.

Именно поэтому большинство RTOS - event-dryven. И именно поэтому стиль программирования, который в них принят, обычно наиболее эффективен.

Некоторые RTOS вообще не умеют делить время процессора между активными задачами с одинаковым приоритетом. Большинство умеют, но только для задач с приоритетом ниже заданного, при помощи отключаемого Round Robin. И весьма грубо, при том.

И не надо путать это с преемптивностью и кооперативностью. И не надо пихать суда umyx и windows, только запутаетесь.
0
Ymk
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,233
12.01.2011, 17:10 20
Цитата Сообщение от okotimiv
Попробуйте сделайте три задачи с циклами while(1) и запустите их в uCOS, дав последовательные, к примеру. приоритеты (одинаковых там не может быть).
я может не правильно выразился? я говорил про линукс, т.к. MostirOtyxiy говорил про него. я специально привел примеры о которых говорилось. и во фриртосе будет точно так же, если приоритеты одинаковые.
0
12.01.2011, 17:10
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2011, 17:10

RTOS производства РФ
Доброго дня. В сети появилась инфа о создании ОС реального времени некоей питерской компанией...

Литература по RTOS
Полезные ссылки • стартовая http://ru.wikipedia.org/wiki/Операционная_система_реального_времени...

Выбор RTOS
Есть ли универсальное решение для выбора RTOS для микроконтроллеров. Например столько памяти -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru