scmRTOS

scmRTOS – це компактна проста ОСРЧ для мікроконтроллерів, створена Гарі Журовим (Harry Zhurov). Поточна версія — 4.00.
Існують порти scmRTOS для наступних серій мікроконтролерів:

  • ARM7 — GCC;
  • AVR (Atmel) — GCC, IAR;
  • Blackfin (Analog Devices) — VDSP;
  • Cortex-M3 — GCC, IAR;
  • Cortex-M0 — GCC (на даний момент розміщено в гілці pre-v400);
  • MSP430 (Texas Instruments) — GCC, IAR;
  • STM8 (ST Microelectronics) — IAR.

Використовуйте лінк Download GNU tarball в нижній частині сторінки для вибраного мікроконтролера або завантажуйте архів зі сторінки scmRTOS на sourceforge
Використовуйте сторінку trunk для отримання найсвіжіших версій.

З мікроконтролерів AVR підтримуютьcя «звичайні» megaAVR включно з ATmega256x.

Опис scmRTOS v4.00 російською та англійською мовами.
Сторінка проекту на sourceforge.net.
scmRTOS Wiki (англійською)
Група google для обговорння проекту (російською, краще підписатися на розсилку поштою, бо через web-інтерфейс половина листів не читається).
Розділ, присвячений scmRTOS, на форумі electronix.

scmRTOS може бути використано з Arduino, дивіться тему на форумі Arduino, сховище git та статтю про це російською мовою.

Тут я пропоную увазі детальне пояснення одного з поширюваних з системою прикладів 1-EventFlag.

Пояснення призначене для тих, хто ще не надто знайомий з роботою ОС з витісненням і «на ніжках» показує, що відбувається в системі. Для демонстрації процесів в приклад було внесено деякі зміни, в основному, додано індикацію стану системи на виводах мікроконтроллера для спостереження осцилографом/логічним аналізатором. Команди для індикації стану було додано також в процедуру перемикання контекстів (встановлення виводу першою командою макросу save_context та скидання останньою командою макросу restore_context в файлі OS_Target_asm.S). З розміщеного в репозиторії коду ці команди видалено.

13 Responses to “scmRTOS”

  1. VsPupKing коментує:

    Если вам нужно стремительно похудеть, реально похудеть, а не только водицу из тела попробовать вывести различными лекарствами, чаями, будьте готовы к тому, что провести подобное мероприятие будет крайне непросто. Каждый из нас стремится быстро и качественно похудеть, правда очень мало кому это удается очень легко, как могло бы. Вот почему довольно важно изучить этот процесс чуть более серьезно, чем обычно.
    Что необходимо знать, лишь бы максимально быстро убрать полноту?
    Вначале многие из нас должны постараться разобраться, как мы планируем худеть. Создано в основном именно два вида избавления от лишнего веса. Первый тип – обычно считается наиболее распространенным, чаще всего тип похудения используют все. Когда девушка стремиться сбросить вес в цифрах. Метод этого худения – не обновление внещнего вида, распространенных показателей красоты внешней, а как раз стремительное уменьшение показателей веса на весах. Второй способ сбрасывания веса – это внешнее похудение. Учитывая что каждый из вас реалистично понимаете проблему и осознаете, что можете похудеть и ваша особоя цель – это именно внешнее похудение. В этом варианте мы понимающе осознаем проблему, реально понимаем, что вес на весах будут изменяться достаточно медленно, однако внешне сбрасывать вес можно довольно хорошо.
    Что желательно провести, дабы похудеть на электронных весах?
    Распространенный тип – это чаи для похудения. Так эти чаи из аптек являются именно мочегонными средствами, или средства для удаления воды. Именно из-за того, что у большинства мужчин и девушек довольно страдающих лишним весом имеются отеки, то как раз специфические лекарственные чаи вполне реально помогают убрать из организма лишнюю воду, что дает возможность помочь сбросить от 3 до 6 кг массы тела даже за неделю. Замечательный обретенный результат для похудения на весах. Но наружные изменения организма оказываются очень маленькие. Потому что накопленный жир продолжает находится в теле а из организма уходит только водные отложения. Если вы закончите потреблять лекарственный чай, вода получат вновь и начнет накопляться крайне еще значительнее. Так каждый из вас поднаберете еще парочку кг сверху именно воды.
    Что желательно провести, лишь бы реально похудеть именно во внешнем виде?
    Для этого необходимо нужно начать реально пахать над собой. Главное потребление еды, реальное употребление чистой воды, минералов, чтобы максимально избежать отечных отложений, правильные занятия. Этот вариант реально будет как минимум способствовать такому развитию внешне. Именно так реально похудеть внешне. Почему мы говорим, что таким способом можно скинуть вес лишь только внешне? Все потому что жир и мышечные накопления имеют почти одинаковый вес если опираться на размеры. Довольно часто именно то, что каждая девушка нередко считаете жировыми отложениями – это отеки. Жировое отложение содержит очень крепкую структуру, как сало в животных. У человека он подобный. Именно по таким причинам когда вы начинаете занятия, жировое накопление начнет уходить вполне медленно, а новые мышцы могут получаться очень даже быстрее. Очень часто из-за этого на электронных весах ваш вес даже увеличивается. Очень многие из-за такого перестают ходить в тренажерку.
    Как быстро снизить вес на весах и внешне?
    Для подобного варианта желательно использовать кроме занятий с тренером еще натуральным медицинским препаратом Ван ту слим. Препарат просто проверен временем. Более подробно получить информацию можете по этому анкору – http://agar2015.com/showthread.php?p=1852815925#post1852815925. Мы говорим так, потому что такой вполне серьезный современный препарат не только поможет убрать водные отложения, но и помогает восстанавливать действенность кишечника, дает возможность восстановить полноценно работу большинства внутренних органов, очищает от шлаков и токсинов. Из-за эдакого походы в фитнес центр не помешают тому, дабы весь вес тела стал уходить из организма стремительно, организм стал значительно более худым, а ощущения лучше. Большинство могли сбрасывать вес вполне даже без зала, тренажерка помогал находится вашему телу более здоровым, сильным, а лично вам – реально здоровым. Вот по такому критерию многие девушки часто выбирают как раз One two slim

  2. basil коментує:

    Большое Вам спасибо за такой подробный ответ, но все-таки интересно с чем это связано, случайно не с тем ли, что использование системы предполагается с основном в тактируемом режиме?

    • ReAl коментує:

      Вопрос терминологический, но я бы не сказал, что на данный момент у scmRTOS есть тактируемый режим. Я это слово воспринимаю как насильное переключение процессов по таймеру, round robin для процессов с одинаковым приоритетом. Такая возможность в пожеланиях к scmRTOS озвучивалась, но пока активных действий не предпринято.

      Просто в scmRTOS считается, что необходима постоянно работающая «служба времени». Без постоянно работающего таймера, например, не будут работать таймауты. Хотя в системе с управлением только по событиям с ожиданием «до упора» (упором для конкретной периферии может быть отдельный канал COMPARE таймера, настраиваемый на защитный интервал) можно обойтись без системного тика.
      Иногда постоянно работающий таймер даже вреден, например, когда нужно спать.

      При необходимости можно останавливать и опять запускать таймер вызовами lock_system_timer() / lock_system_timer() (OS_Kernel.h), для этого в scmRTOS_TARGET_CFG.h помимо вектора должны быть определены соответствующие макросы, например:

      #define LOCK_SYSTEM_TIMER()    (TIMER0_IE_REG &= ~(1 << TOIE0))
      #define UNLOCK_SYSTEM_TIMER()  (TIMER0_IE_REG |=  (1 << TOIE0))

      Для Cortex-M3 можно заменить по умолчанию используемый NVIC SysTick timer, подменив функцию __init_system_timer (она в OS_Targte_asm.S помечена как .weak, поэтому достаточно просто завести в проекте свою с таким именем). Возможность появилась, насколько я помню, именно в ответ на пожелание замены таймера для более гибкого управления в режимах пониженного потребления.

      Ксть обсуждения упомятутого на electronix.ru, но что-то форум сейчас не отвечает, я не могу найти темы, чтобы дать линки.

  3. basil коментує:

    Да, варнинги дает авр студия 4.18 и 4.19 прошу прощения не уточнил сразу.

  4. basil коментує:

    Начинаю осваивать SCM RTOS под AVR, пользуясь случаем хочу выразить благодарность всей команде разработчиков за Ваш труд по развитию и поддержанию проекта. Я не большой знаток плюсов ) но система интересная и хотелось бы если можно спросить – почему-то в порте под меги при компилляции вылазит warning – Common/OS_Services.h:261: warning: ignoring packed attribute because of unpacked non-POD field ‘OS::TMutex& OS::TMutexLocker::Mutex’ хотя все работает даже с мьютексами, и еще, нельзя ли привести примеры с terminate() и start() функциями а то что-то никак ))

    • ReAl коментує:

      Странно.
      Откуда там вообще атрибут packed? Его же вроде нигде в исходниках нет.
      В любом случае для AVR это несущественно, ядро 8-битное и всё и так упакованно выходит. Независимо от наличия атрибута и его игнорирования.

      С terminate() и start() пока помочь не могу, сам ещё не использовал.

      • basil коментує:

        Больое спасибо что нашли время для ответа, сидел ждал емейла пока дошло посмотреть здесь ))) Вы не в курсе может быть кто-нибудь на электрониксе тестировал эти функции? Спасибо.

        • ReAl коментує:

          Ну раз они попали в релиз системы, то кто-то как-то их тестировал :-)
          Я в портах AVR их не проверял, но они должны бы заработать сразу.
          На электрониксе, думаю, самое представительное собрание разработчиков scmRTOS, так что спросить действительно лучше там.

          По поводу предупреждений с атрибутом packed смотреть буду позже, я сейчас в отпуске с плохим интернетом и хорошей природой :-)

          • basil коментує:

            Да, большое спасибо все заработало -))) я просто жостко тупил))) и слабо плюсы знаю , ээ собственно только начал их изучать )), и в мануале для начинающего про них немного непонятно(про функции), но разработчики были столь любезны и доброжелательны, что все с этм растолковали )), за что им и Вам большое спасибо.

            • basil коментує:

              Извините, я правильно понимаю что в scm rtos прерывание системного (младшего) таймера исходно всегда включено, и для того чтобы он начал работать и
              и уходить по вектору прерывания надо самому только включить делитель,причем тики и хуки при этом включать необязательно?

              • ReAl коментує:

                Зависит от порта.
                Для Cortex-M3 можно вообще ничего не надо делать, по умолчанию подключится таймер, специально выделенный в кортексах под системный тик. Но можно его переопределить.

                Обработчик прерывания системного таймера находится в файле порта OS_Target_cpp.cpp
                Для большинства портов в проекте нужно сделать следующее:

                1. Определить макрос SYSTEM_TIMER_VECTOR, дам ему имя вектора выбранного вектора (файл scmRTOS_TARGET_CFG.h)

                2. До вызова OS::run(), т.е. где-то в начале функции main(), настроить аппаратуру таймера и разрешить его прерывания (глобально прерывания будут разрешены при старте первого процесса).

                В примерах AVR используется TIMER0, так как он есть у всех :-)
                Но никто не мешает, к примеру, в ATmega128 использовать компаратор C третьего таймера, при этом таймер будет свободно бежать, а два других компаратора использоваться для других целей.
                В таком случае в scmRTOS_TARGET_CFG.h нужно будет написать

                #define SYSTEM_TIMER_VECTOR TIMER3_COMPC_vect

                а в main() разрешить работу TIMER3, записать нужное значение в OCR3C и поднять бит OCIE3C в ETIMSK.

                Пользовательский хук system_timer_user_hook(), естественно, нужно определять (и включать его использование установкой scmRTOS_SYSTIMER_HOOK_ENABLE в 1 в файле scmRTOS_CONFIG.h) только при его использовании. Вот в приведенном выше примере он как раз нужен — чтобы в нём передвигать точку прерывания, добавляя к OCR3C число, соответствующее периоду системного тика.

Leave a Reply

[flagcounter image]