Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 4.0
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Страницы: 1, 2
Fat Robot
Коллеги,

Расскажите, пожалуйста, про 4.0:

- какие существенные изменения/дополнения планируются по сравнению с 3.10?

- когда, ориентировочно, версия стабилизируется?

Спасибо!
Сергей Борщ
QUOTE (Fat Robot @ Dec 29 2010, 10:44) *
- какие существенные изменения/дополнения планируются по сравнению с 3.10?
Ключевые изменения:
- вместо byte, word, dword будут использоваться типы из stdint.h, включая (u)int_fastXX_t
- добавляется возможность создавать собственные сервисы наследуя их от одного из двух базовых классов. Штатные сервисы переписаны по тому же принципу.
- данные TKernel будут статическими
- будут добавлены некоторые отладочные функции - получение данных об использовании стеков, о распределении процессорного времени между процессами.
остальное пока в стадии обсуждения.
QUOTE (Fat Robot @ Dec 29 2010, 10:44) *
- когда, ориентировочно, версия стабилизируется?
Пока сложно предсказать.
aliko
На сайте http://scmrtos.sourceforge.net появилась документация по 4й версии, однако неясно где можно скачать сами исходники. Их нет ни в разделе download ни в SVN. Подскажите откуда брать??
AHTOXA
В svn они есть, вот тут. Ещё не все порты готовы, потому официально ещё не выпустили.
aliko
Цитата(AHTOXA @ Jun 8 2011, 12:51) *
В svn они есть, вот тут. Ещё не все порты готовы, потому официально ещё не выпустили.

Спасибо большое! Бум пробовать.

Это так задуманно что примеры не работают с уровнем оптимизации ниже Medium? Пробовалось на MSP430F149, IAR V5.10?
AHTOXA
Конкретно про IAR не подскажу, но общая идея такая: без оптимизации может не работать.
IgorKossak
Цитата(aliko @ Jun 8 2011, 13:46) *
Это так задуманно что примеры не работают с уровнем оптимизации ниже Medium? Пробовалось на MSP430F149, IAR V5.10?

Дело не в примерах. В данной ОС во многих местах используется inline и другие особенности, которые не предусмотрены для уровней оптимизации (настройки по умолчанию) ниже среднего. Но установив у себя низший уровень оптимизации и галочками отмечая некоторые частные опции оптимизации Вы сможете добиться работоспособности и наилучшей отлаживаемости.
dxp
Цитата(AHTOXA @ Jun 8 2011, 19:23) *
Конкретно про IAR не подскажу, но общая идея такая: без оптимизации может не работать.

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

Цитата(aliko @ Jun 8 2011, 17:46) *
Это так задуманно что примеры не работают с уровнем оптимизации ниже Medium? Пробовалось на MSP430F149, IAR V5.10?

Посмотрите, включено ли переключение на стек прерываний в этом примере. Если да, то выключите и попробуйте.

jorikdima
Потираю руки в предвкушении релиза. Очень рад, что доку не забросили.
dxp
Цитата(jorikdima @ Jun 9 2011, 13:24) *
Потираю руки в предвкушении релиза. Очень рад, что доку не забросили.

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

Дока реогранизована: она состоит из основного общего мануала и относительно небольших описаний портов, которые вынесены в отдельные документы.
Nixon
Примеры для CortexM3 не совсем рабочие - для LPC отсутствуют файлы device.h. Приходится домысливать по аналогии с примерами для STM32. Мелочь, но неприятно.
AHTOXA
К сожалению, примеры для LPC некому поддерживать. Автор куда-то делся. Может, выложите исправленный вариант?
sonycman
У меня вопрос по поводу отладочных функций по измерению стека для порта под кортекс-м3 - эти функции необходимо вызывать только из соответствующего процесса, или можно из, к примеру, idle процесса?

Можно ли измерить стек прерываний?
AHTOXA
Цитата(sonycman @ Jun 28 2011, 10:23) *
У меня вопрос по поводу отладочных функций по измерению стека для порта под кортекс-м3 - эти функции необходимо вызывать только из соответствующего процесса, или можно из, к примеру, idle процесса?

Из какого-такого "соответствующего"? sm.gif Конечно из любого, они же только читают стек.

Цитата(sonycman @ Jun 28 2011, 10:23) *
Можно ли измерить стек прерываний?

Нет, этого нет.
sonycman
Цитата(AHTOXA @ Jun 28 2011, 16:37) *
Из какого-такого "соответствующего"? sm.gif Конечно из любого, они же только читают стек.

То есть из процесса idle можно определить свободное место на стёке любого процесса?
А как будет выглядеть вызов, можно пример?

Неужели так: Proc1.init_stack_frame() и Proc1.stack_slack()?
AHTOXA
init_stack_frame() вызывать не надо (да и не выйдет, она protected), она вызывается в конструкторе процесса.

А вызов может выглядеть так:
Код
    for(uint_fast8_t i = 0; i < OS::PROCESS_COUNT; i++)
    {
        uart << priorities[i] << '\t'
            << OS::get_proc(i)->stack_slack() * sizeof(stack_item_t)  << "\r\n";
    }


ЗЫ. Всё это есть в примере 4-Debug (посмотрите разные порты)
sonycman
Цитата(AHTOXA @ Jun 28 2011, 17:54) *
А вызов может выглядеть так:
Код
    for(uint_fast8_t i = 0; i < OS::PROCESS_COUNT; i++)
    {
        uart << priorities[i] << '\t'
            << OS::get_proc(i)->stack_slack() * sizeof(stack_item_t)  << "\r\n";
    }


ЗЫ. Всё это есть в примере 4-Debug (посмотрите разные порты)

Спасибо! a14.gif
Будем юзать четвёрку biggrin.gif
Nixon
Вопрос больше Александру (как поддерживающему AVR) - при попытке определения макро scmRTOS_PROCESS_RESTART_ENABLE = 1 у процесса отсутствует метод terminate().
Ковыряния установили что из-за особенности архитектуры AVR и компилятора IAR и соответственно нового особенного шаблона процесса (с доп. параметром глубины стека возвратов) метод terminate() у нового шаблона не описан.
Это связано с чем-то серьезным или просто забыли описать?
ReAl
Я только-только стал под перископную глубину всплывать (много всяких событий -- в общем и целом хороших, но отнявших кучу времени), а тут вопросов навалили...
IAR-ветку я подхватил недавно и в самом иаре не во всём разобрался.
Скорее всего -- "просто забыли" в двухстековой ветке добавить всё. Посмотрю в ближайшее время.
Acvarif
pre400 - подскажите пожалуйста на что можно заменить в ARM порте inarm.h

Код
Fatal Error[Pe005]: could not open source file "inarm.h" D:\Temp\pre-v400\Samples\ARM7\AT91SAM7\IAR_v4.30\scmRTOS\ARM7\OS_Target.h 50
            searched: "D:\Temp\pre-v400\Samples\ARM7\AT91SAM7\IAR_v4.30\2-Message\Src\"
            searched: "D:\Temp\pre-v400\Samples\ARM7\AT91SAM7\IAR_v4.30\2-Message\..\scmRTOS\Common\"
            searched: "D:\Temp\pre-v400\Samples\ARM7\AT91SAM7\IAR_v4.30\2-Message\..\scmRTOS\ARM7\"
            searched: "D:\Program Files\IAR Systems\Embedded Workbench 5.4\arm\INC\"

Очевидно в версии 4.30 файл существовоал.
В IAR ARM v5 такого нет...
ReAl
Цитата(Nixon @ Jun 29 2011, 01:15) *
Это связано с чем-то серьезным или просто забыли описать?
Ага, просто забылось. Как и size_t для размера стека.
Поправил, зафиксировал.
Nixon
Ок. Спасибо.
jorikdima
Я смотрю в классах сервисов по-прежнему поля объявлены как private a не protected, что не позволяет наследоваться от них и изменять под свои нужды sad.gif
Жаль, а шаг в этом направлении уже сделан в виде TService.
dxp
Цитата(jorikdima @ Sep 6 2011, 15:04) *
Я смотрю в классах сервисов по-прежнему поля объявлены как private a не protected, что не позволяет наследоваться от них и изменять под свои нужды sad.gif

Это потому, что эти классы не предназначены для расширения их функционала - как-то до сих пор не возникало пожеланий на этот счёт.

Цитата(jorikdima @ Sep 6 2011, 15:04) *
Жаль, а шаг в этом направлении уже сделан в виде TService.

Именно TService для этих целей и предназначен - кто хочет, тот может слепить себе любой сервис.
dxp
.
jorikdima
Цитата(dxp @ Sep 7 2011, 07:53) *
Это потому, что эти классы не предназначены для расширения их функционала - как-то до сих пор не возникало пожеланий на этот счёт.

Это я понял уже, у нас с вами возникал диалог на этот счет в одной из веток http://electronix.ru/forum/index.php?showt...st&p=735769
(кстати, можно сказать, что я пожелание сгенерировал sm.gif ) Я в принципе не настаиваю конечно, авторам решать. Просто непонятно, что плохого в этом наследовании было бы.
dxp
Цитата(jorikdima @ Sep 10 2011, 01:35) *
Просто непонятно, что плохого в этом наследовании было бы.

Наверное, ничего плохого. Просто до сих пор как-то не возникал этот вопрос ребром. Подозреваю, что раз он всё же так встал, то скорее всего будет решён положительно. sm.gif
devfom
Добрый день. Не подскажите как начать работать с 4 версией для MSP430F5438. Среда IAR 4.2. Просто по пунктам какой бранч нужно checkout( т.к есть pre-V400 и TService, в которой вроде бы тоже исходники самой ОС) и что понадобится в проекте. И также как настроить работу самих тиков, если в исходниках этого нет.
Спасибо.
devfom
Upd: разобрался, не без помощи, скоро опубликую линк на пошаговое руководство.
dxp
Цитата(dxp @ Sep 12 2011, 01:25) *
Подозреваю, что раз он всё же так встал, то скорее всего будет решён положительно. sm.gif

Вопрос решён положительно, все private члены классов-сервисов теперь являются protected.
Сергей Борщ
Для ускорения выхода релиза я принял решение прекратить поддержку следующих портов ARM7:
IAR/STR71x - ибо порт был написан по просьбе местного представителя ST в обмен на обещание упомянуть scmRTOS на сайте ST. Обещание не выполнено, кит я отдал после выхода порта, отлаживаться не на чем.
GCC/ADuC70xx - ибо ADuC тоже не применяю, а для полноценного порта надо добавлять еще и поддержку ADuC71xx, которых у меня нет.
По статистике загрузок с sourceforge.net оба эти порта были скачаны в сумме 17 раз за последний год, что показывает их неактуальность.

всю ветку IAR4.xx, ибо не актуально.

По поводу IAR версии 6.xx - я с версии 4.хх перескочил на GCC, с пятой и более поздними не разбирался и разбираться желания нет - во-первых, GCC меня устраивает полностью, во-вторых - принято решение переползать на кортексы. Если несмотря на засилие кортексов кому-то еще интересены порты ARM7/IAR6.xx - добро пожаловать в команду разработчиков. Вышлю присланый мне когда-то очень давно порт scmRTOS v3.10 под IAR5.xx для допиливания под 6.xx и дальнейшей поддержки.
jorikdima
Цитата(dxp @ Sep 21 2011, 15:43) *
Вопрос решён положительно, все private члены классов-сервисов теперь являются protected.

Спасибо!
AHTOXA
Цитата(Сергей Борщ @ Sep 23 2011, 19:09) *
GCC/ADuC70xx - ибо ADuC тоже не применяю

А я применяю (706x). Давай тогда мне его?
Сергей Борщ
QUOTE (AHTOXA @ Sep 23 2011, 18:27) *
А я применяю (706x). Давай тогда мне его?
А забирай. Я сегодня зафиксировал последние (надеюсь) правки порта, осталось добить примеры и документацию. Добавил возможность компилить любые файлы (включая файлы ОС) в thumb - для ADuC, с его 16-битной флешью, будет полезно. Проверил - первый пример на SAM7, полностью в thumb за исключением трех необходимых файлов, запустился.
AHTOXA
Забралsm.gif
Все примеры компилятся, thumb ещё не пробовал. Примеры LPC2xxx - тоже обновил, арбайтен. (И то и то - GCC.)
Пример №4 делать не буду ни там ни там, нет времени. Может потом...
_Артём_
Вопрос к разработчикам ОС.

Будет ли поддержка новых AVR в последующих версиях?
Интересует семейство xMega.

Спасибо.
ReAl
Будет. STM8 я так-сяк запустил, теперь время на Xmega выделю. Потом на доводку STM8.
a9d
В версии для GCC есть небольшой косяк. При сборки версии, для ATmega168pa , с программным прерывание вылетает ошибка "SPM ready interrupt vector not defined". Это происходит из-за того, что вектор SPM_READY_vect называется SPM_Ready_vect.

А так-же есть еще эта ошибка
Код
#  if scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE != 1
#    error scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE must be 1\
          for SPM_READY interrupt context switcher
#  endif


Это опечатка? (Этот вопрос уже прояснил, при программном прерывании scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE =1 )
dxp
QUOTE (a9d @ Jan 29 2012, 03:51) *
В версии для GCC есть небольшой косяк. При сборки версии, для ATmega168pa , с программным прерывание вылетает ошибка "SPM ready interrupt vector not defined". Это происходит из-за того, что вектор SPM_READY_vect называется SPM_Ready_vect.

Вообще-то, выбор и конфигурирование источника программного прерывания специально вынесен на уровень пользовательского проекта для: 1) предоставления пользователю полной свободы в этом вопросе; 2) обхода косяков в заголовках тулчейнов, когда для разных МК аналогичные макросы имеют чуть разные имена, как в примере выше.

Поэтому, как я понимаю, ошибки тут нет - для МК, который используется в примере всё указанно верно, а при смене МК просто нужно откорректировать этот код проекта.
ReAl
Цитата(a9d @ Jan 28 2012, 22:51) *
Это происходит из-за того, что вектор SPM_READY_vect называется SPM_Ready_vect.
Ой, а где это он так (SPM_Ready_vect) называется? В h-файлах от avr-libc есть только SPM_READY_vect и SPM_RDY_vect, эти имена и используются в примерах scmRTOS.
a9d
AVR Studio 5.1 хеадер для ATmega168pa.
Там еще имена других прерываний отличаются от нормальных тем, что добавлено одно нижнее подчеркивание.
ReAl
Т.е. в «тулчейне», который со студией? Тьху, заразы. И зачем они так? В предшественнике WinAVR было только с большими буквами.
Кому-то захотелось красоту навести... Но когда в прошлый раз наводили, то XXX_YYY_vect поставили параллельно с SIG_XXX_YYY, старое всё собиралось.
Хм. так это ж в avr-libc изменение. Это что, как у меня в убунте свежая версия avr-gcc появится, так тоже поменяется?
_Артём_
Как в версии 4 использовать исходники написанные для 3.10?
Нужно где-то определить
Код
#define scmRTOS_OBSOLETE_NAMES 1

?
В каком файле это должно быть определено?
_Артём_
Задал в файле scmRTOS_CONFIG.h scmRTOS_OBSOLETE_NAMES 1
Получил:
Код
../scmRTOS/Common/OS_Kernel.h: In member function 'void OS::TKernel::raise_context_switch()':
../scmRTOS/Common/OS_Kernel.h:182:46: error: 'RaiseContextSwitch' is not a member of 'OS'
./src/main.cpp: In function 'void OS::system_timer_user_hook()':
./src/main.cpp:116:6: error: redefinition of 'void OS::system_timer_user_hook()'
../scmRTOS/Common/OS_Kernel.h:496:17: error: 'void OS::system_timer_user_hook()' previously defined here
make: *** [obj/main.o] Ошибка 1


Ошибка на строке:
Код
INLINE void raise_context_switch() { OS::RaiseContextSwitch(); }

Что неправильно делаю?
ReAl
Значит, Вы не задали функцию RaiseContextSwitch() в пространстве OS у себя в проекте, в файле scmRTOS_TARGET_CFG.h
И если исходники были для 3.10, то в них не могло быть функции system_timer_user_hook(), должна была быть SystemTimerUserHook()

Пример 3-Channel для порта AVR/GCC
специально оставлен в режиме совместимости, т.е. там все исходники примера от 3.10
Только в scmRTOS_CONFIG.h добавлена строка
Код
#include "scmRTOS_310_compat.h"

и всё. Этого достаточно — компилируется в режиме совместимости.
В том include-файле кроме
Код
#define scmRTOS_OBSOLETE_NAMES 1
ещё определено несколько нужных для 3.10 типов.
_Артём_
Цитата(ReAl @ Mar 8 2012, 21:52) *
Значит, Вы не задали функцию RaiseContextSwitch() в пространстве OS у себя в проекте, в файле scmRTOS_TARGET_CFG.h

Да, не задал.

Цитата(ReAl @ Mar 8 2012, 21:52) *
И если исходники были для 3.10, то в них не могло быть функции system_timer_user_hook(), должна была быть SystemTimerUserHook()

Я взял за основу пример для версии 4, но main.cpp ещё не заменил.

Цитата(ReAl @ Mar 8 2012, 21:52) *
Пример 3-Channel для порта AVR/GCC специально оставлен в режиме совместимости, т.е. там все исходники примера от 3.10
Только в scmRTOS_CONFIG.h добавлена строка
Код
#include "scmRTOS_310_compat.h"

и всё. Этого достаточно — компилируется в режиме совместимости.
В том include-файле кроме
Код
#define scmRTOS_OBSOLETE_NAMES 1
ещё определено несколько нужных для 3.10 типов.


Спасибо, посмотрю.
_Артём_
Зашёл по ссылке:
main.cpp

И вижу:
Код
template<> void TProc3::exec()


Откуда в версии 3.10 у OS::process метод exec?
Exec есть, а exec - нету.

Что не так?
IgorKossak
Цитата(_Артём_ @ Mar 14 2012, 14:44) *
Exec есть, а exec - нету.

Что не так?

Файл по ссылке из четвёртой версии. Номер версии в комментариях забыли поменять.
_Артём_
Цитата(IgorKossak @ Mar 14 2012, 15:29) *
Файл по ссылке из четвёртой версии. Номер версии в комментариях забыли поменять.

?
Простите, не понял...
А из какой версии он должен быть?
IgorKossak
Тогда мне не понятна одна из Ваших мыслей.
1. Мы находимся в теме, посвящённой четвёртой версии ОС и Вы дали ссылку на файл из этой версии.
2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?"
3. Далее:"Exec есть, а exec - нету."
Я предположил, что Вы обратили внимание на номер версии в шапке файла, на что и дал свой ответ.

Добавлю, что при переходе с третьей версии на четвёртую, авторами было принято решение о переименовании методов (это я опять же предполагаю, что Вас именно это интересует).

Если мои предположения не верны, то уточните свой вопрос.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.