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

 
 
> mRTOS-кооперативная операционная система, порт CodeVision, порт WinAvr, mRTOS-кооперативная операционная система для AVR
LVII
сообщение Oct 30 2009, 11:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 13-05-08
Пользователь №: 37 469



Предлагаю на рассмотрение уважаемым ембеддерам кооперативную операционную систему реального времени для малых и средних контроллеров AVR, правда никто не запрещает использовать ее для всех типов контроллеров. Существует два порта - под CodeVision и WinAVR.
Сразу же хочу оговориться, что понятие реального времени в случае кооперативных систем достаточно условно - это описано в статье на сайте и документации к ОС.
Используя эту систему начинаю разработку с проектирования ПО - используя упрощенную нотацию UML в бесплатном редакторе DIA.
Разрабатывать проекты получается быстрее, существенно легче стало обеспечивать модификацию, сопровождение и отладку программного обеспечения. Понятнее и прозрачнее стали тексты программ.

Адрес сайта - http://movilavn.narod.ru/

Зайти в раздел "Статьи", выбрать статью - "mRTOS - кооперативная операционная система для микроконтроллеров".
Для загрузки доступны сама ОС, документация и примеры использования.

Сообщение отредактировал LVII - Oct 30 2009, 11:58
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
LVII
сообщение Nov 2 2009, 11:34
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 49
Регистрация: 13-05-08
Пользователь №: 37 469



ОС была намеренно минимизирована. Чтобы уместилась даже на малые AVR типа 2313. Поэтому средства межпроцессорного взаимодействия такие, как сообщения, очереди, mailbox отсутствуют. В документации есть упоминание о том, как используя event организовать все это самостоятельно.

Асинхронно, синхронно. Асинхронно формируются(могут формироваться) event(прерывание). Синхронно передается управление. Это кооперативная операционная система - это + код вносят некоторые возможности RTOS.

Приоритеты. Кооперативная операционная система это сама ОС + прикладной код. Только тогда она может в какой мере заменить preemtive систему. Мой подход к проектированию таков - предположим есть 4 задачи. Есть период времени T приблизительно определенный суммой приоритетов процессов. Одна (первая) главная, вторая за период T может сгенирить 3 события, третья 2, четвертая 1. Назначаем приоритеты 1-ой 200, 2-ой 150, 3-ей 100, 4-ой 50. За время T каждой равномерно будет передано управление исходя из приоритетов. Приведенная схема проектирования упрощена. Но даже так работает!

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

Сообщение отредактировал LVII - Nov 2 2009, 11:37
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 2 2009, 12:24
Сообщение #3


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(LVII @ Nov 2 2009, 13:34) *
Асинхронно, синхронно. Асинхронно формируются(могут формироваться) event(прерывание). Синхронно передается управление.
О чём я и говорю - управление передаётся только синхронно на верхнем уровне функций процессов, поэтому кроме точки возврата ничего не надо сохранять, статусный регистр в том числе.

Цитата(LVII @ Nov 2 2009, 13:34) *
Сохранение и восстановление статусного регистра. Сохраняем состояние процесса. Даже синхронно передавая управление, процесс может остаться в разных состояниях. При возврате анализируем статусный регистр. Иначе для сохранения состояния пришлось использовать статическую переменную. Экономия - не знаю? Но работает. Накладные расходы на это ничтожны. А возможность использования остается.
Я прошу конкретный пример, а не "есть возможность".

А теперь смотрим код:
Код
// Макрос - контекст текущей задачи                  
#define CPU_STATE (tasks[current_task].cpu_state)
// Макрос - переключатель задач
#define DISPATCH dispatch_task(CPU_STATE);
...
// Номер текущей задачи
extern char current_task;
// Массив структур TCB
extern struct TCB tasks[MAXTASKS];
Перед вызовом dispatch_task(switch_buf cpu_state) надо вычислить адрес начала массива cpu_state типа switch_buf.
Код
tasks[current_task].cpu_state
для чего в регистры будет загружено значение переменной current_task, умножено на sizeof(struct TCB) и сложено с адресом начала массива tasks и смещением offsetof(struct TCB, cpu_state).
Таким образом, при входе в dispatch_task в регистре SREG всегда будут флаги, оставшиеся от этих вычислений, а не мифическое "состояние процесса". Я думал, что после критического замечания "по сути", которое Вы просили, Вы сможете сами критически глянуть на свой код.
Ещё понятно было бы, если бы dispatch_task() не принимал аргументов (какая разница - всё равно макрос берёт их из тех же глобальных параметров, кстати, это тоже несколько уменьшило бы код), тогда действительно в SREG был бы результат последних операций процесса перед вызовом диспетчера. Ну и как это применать? Так, чтоли?
Код
    c = a + b;
    DISPATCH;
    if( SREG & (1<<SREG_Z) ) {
         // c присвоен 0 перед вызовом диспетчера
    }


Цитата
Накладные расходы на это ничтожны
Байт на задачу, при 4 задачах - больше 3% ОЗУ упомянутой tiny2313


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- LVII   mRTOS-кооперативная операционная система, порт CodeVision, порт WinAvr   Oct 30 2009, 11:53
- - oll   Цитата(LVII @ Oct 30 2009, 16:53) Предлаг...   Oct 30 2009, 12:25
- - LVII   Благодарствую за положительную оценку! Буду ра...   Oct 30 2009, 17:04
- - alcosar   Начинаем читать документацию, идущую в файле с mRT...   Oct 30 2009, 17:14
|- - _Pasha   Цитата(alcosar @ Oct 30 2009, 20:14) Ну и...   Oct 30 2009, 18:16
||- - oll   Цитата(_Pasha @ Oct 30 2009, 23:16) И к т...   Oct 31 2009, 05:08
|- - LVII   Цитата(alcosar @ Oct 30 2009, 19:14) Ну и...   Oct 31 2009, 11:19
|- - alcosar   Цитата(LVII @ Oct 31 2009, 15:19) До реше...   Nov 1 2009, 05:22
- - LVII   alcosar - по существу вопроса у Вас, что нибудь ес...   Nov 1 2009, 07:00
|- - AHTOXA   Цитата(LVII @ Nov 1 2009, 12:00) Вообще в...   Nov 1 2009, 07:52
- - sensor_ua   Не буду разбираться кто где плагиатор. Вот попался...   Nov 1 2009, 07:41
|- - plus   Цитата(sensor_ua @ Nov 1 2009, 10:41) поп...   Nov 2 2009, 21:22
|- - RA3WUM   Цитата(sensor_ua @ Nov 1 2009, 10:41) Не ...   Nov 3 2009, 10:58
|- - mempfis_   Цитата(RA3WUM @ Nov 3 2009, 14:58) Спасиб...   Nov 3 2009, 11:31
- - LVII   Один человек только протестировал! Остальные ...   Nov 1 2009, 11:56
|- - AHTOXA   Цитата(LVII @ Nov 1 2009, 16:56) Один чел...   Nov 1 2009, 12:05
|- - Petka   Цитата(LVII @ Nov 1 2009, 14:56) Один чел...   Nov 1 2009, 12:16
- - LVII   Проверил сам - да действительно почти совпадают не...   Nov 1 2009, 13:03
|- - klen   че за базар? граждане? код смотрите который вам пр...   Nov 1 2009, 13:18
|- - Petka   Цитата(klen @ Nov 1 2009, 16:18) че за ба...   Nov 1 2009, 13:34
||- - ReAl   Цитата(Petka @ Nov 1 2009, 15:34) Спокуха...   Nov 1 2009, 14:43
|- - haker_fox   Цитата(klen @ Nov 1 2009, 21:18) я книгу ...   Nov 2 2009, 00:24
- - oll   Может "ОЗУ и код даром выброшены", но мн...   Nov 1 2009, 17:23
|- - ReAl   Цитата(oll @ Nov 1 2009, 19:23) Может ...   Nov 1 2009, 19:17
||- - ReAl   Цитата(ReAl @ Nov 1 2009, 21:17) Я просто...   Nov 2 2009, 00:39
|- - LVII   Цитата(oll @ Nov 1 2009, 19:23) Да еще во...   Nov 1 2009, 19:18
- - sensor_ua   Цитатаи все это на одном таймере для чего этот тай...   Nov 1 2009, 17:38
- - LVII   ЦитатаХитрая хитрость с "приоритетами".....   Nov 1 2009, 19:11
- - oll   для чего этот таймер использовали? Это я про систе...   Nov 2 2009, 04:56
|- - _Pasha   Цитата(oll @ Nov 2 2009, 08:56) С ОС прио...   Nov 2 2009, 06:28
|- - oll   Цитата(_Pasha @ Nov 2 2009, 11:28) Это же...   Nov 2 2009, 07:20
|- - MrYuran   Цитата(oll @ Nov 2 2009, 10:20) для 1-WIR...   Nov 2 2009, 07:25
|- - _Pasha   Цитата(oll @ Nov 2 2009, 10:20) как Вы ре...   Nov 2 2009, 07:28
- - MrYuran   По теме: Подробно не смотрел, времени особо не был...   Nov 2 2009, 07:32
|- - _Pasha   Цитата(LVII @ Nov 2 2009, 14:34) Даже син...   Nov 2 2009, 11:50
||- - LVII   Цитата(ReAl @ Nov 2 2009, 14:24) Таким об...   Nov 2 2009, 22:48
|- - Огурцов   Цитата(LVII @ Nov 2 2009, 12:34) ОС была ...   Nov 2 2009, 18:01
|- - LVII   Цитата(Огурцов @ Nov 2 2009, 20:01) Я бы ...   Nov 3 2009, 11:38
||- - Огурцов   Цитата(LVII @ Nov 3 2009, 12:38) На прост...   Nov 3 2009, 14:00
|||- - _Pasha   Цитата(Огурцов @ Nov 3 2009, 17:00) место...   Nov 3 2009, 15:34
||- - rembas   [quote name='LVII' date='Nov 3 2009, 1...   Nov 7 2013, 13:14
|- - ReAl   Цитата(Огурцов @ Nov 2 2009, 20:01) Я бы ...   Nov 3 2009, 17:08
|- - Огурцов   Так и не надо в мелкий. Надо мало секса с этими ка...   Nov 3 2009, 21:20
|- - ReAl   Цитата(Огурцов @ Nov 3 2009, 23:20) Так и...   Nov 3 2009, 22:46
|- - _Pasha   Цитата(ReAl @ Nov 4 2009, 01:46) если уж ...   Nov 3 2009, 23:19
|- - defunct   Цитата(ReAl @ Nov 4 2009, 00:46) если уж ...   Nov 3 2009, 23:27
- - oleg_lwd   Посмотрел mRTOS, решил до кучи написать свою пере...   Dec 18 2009, 09:34
- - oleg_lwd   В процессе отладки реального проекта, пришлось не...   Dec 21 2009, 08:22
- - oleg_lwd   Сделал вариант для мелких AVR. Прерывания теперь ...   Jan 11 2010, 09:22
|- - oll   Цитата(oleg_lwd @ Jan 11 2010, 14:22) Сде...   Jan 12 2010, 13:10
- - oleg_lwd   Даже не и знаю что тут объяснять void OS_yeld(voi...   Jan 13 2010, 12:24
|- - gabd   Цитата(oleg_lwd @ Jan 13 2010, 17:24) Даж...   Mar 4 2016, 10:22
- - rembas   HELP Уважаемый LVII проверил Ваш вариант mRTOS на ...   Nov 12 2013, 07:35
- - arhiv6   В образовательных целях решил попробовать разобрат...   Mar 9 2016, 19:09
|- - gabd   Если об ОС от oleg_lwd, имхо (я сам учусь ) Цитата...   Mar 10 2016, 11:28
- - arhiv6   gabd, нет, вопросы были о mRTOS.   Mar 10 2016, 12:03
- - gabd   Наконец-то, скачал этот mRTOS (на работе narod бло...   Mar 15 2016, 07:48


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:45
Рейтинг@Mail.ru


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