Полная версия этой страницы:
4.0
Fat Robot
Dec 29 2010, 05:44
Коллеги,
Расскажите, пожалуйста, про 4.0:
- какие существенные изменения/дополнения планируются по сравнению с 3.10?
- когда, ориентировочно, версия стабилизируется?
Спасибо!
Сергей Борщ
Jan 3 2011, 09:34
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)

- когда, ориентировочно, версия стабилизируется?
Пока сложно предсказать.
На сайте
http://scmrtos.sourceforge.net появилась документация по 4й версии, однако неясно где можно скачать сами исходники. Их нет ни в разделе download ни в SVN. Подскажите откуда брать??
В svn они есть, вот
тут. Ещё не все порты готовы, потому официально ещё не выпустили.
Цитата(AHTOXA @ Jun 8 2011, 12:51)

В svn они есть, вот
тут. Ещё не все порты готовы, потому официально ещё не выпустили.
Спасибо большое! Бум пробовать.
Это так задуманно что примеры не работают с уровнем оптимизации ниже Medium? Пробовалось на MSP430F149, IAR V5.10?
Конкретно про IAR не подскажу, но общая идея такая: без оптимизации может не работать.
IgorKossak
Jun 8 2011, 14:39
Цитата(aliko @ Jun 8 2011, 13:46)

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

Конкретно про IAR не подскажу, но общая идея такая: без оптимизации может не работать.
Вообще-то, эти нюансы, которые зависели от уровня оптимизации - это завязки на всякие нестандартные фишки вроде переключения на отдельный стек прерываний, когда сам проц этого аппаратно не поддерживает, этого там оставлено уже по минимуму и есть рекомендация не использовать это (см доку, там подробно описано что к чему и почему). Поэтому работать должно при любых уровнях оптимизации.
Цитата(aliko @ Jun 8 2011, 17:46)

Это так задуманно что примеры не работают с уровнем оптимизации ниже Medium? Пробовалось на MSP430F149, IAR V5.10?
Посмотрите, включено ли переключение на стек прерываний в этом примере. Если да, то выключите и попробуйте.
jorikdima
Jun 9 2011, 06:24
Потираю руки в предвкушении релиза. Очень рад, что доку не забросили.
Цитата(jorikdima @ Jun 9 2011, 13:24)

Потираю руки в предвкушении релиза. Очень рад, что доку не забросили.
В принципе, в релизе, который будет выложен на sf.net, нового по сравнению с тем, что есть сейчас, не будет. Сейчас есть всё кроме портов под ARM7 (их и ждём чтобы закончить этап). Дока тоже вся (кроме описания портов на ARM7) лежит в финальном виде. Т.ч. желающие могут взять из репозитория (Антон ссылку выше дал) и пользоваться.
Дока реогранизована: она состоит из основного общего мануала и относительно небольших описаний портов, которые вынесены в отдельные документы.
Примеры для CortexM3 не совсем рабочие - для LPC отсутствуют файлы device.h. Приходится домысливать по аналогии с примерами для STM32. Мелочь, но неприятно.
К сожалению, примеры для LPC некому поддерживать. Автор куда-то делся. Может, выложите исправленный вариант?
sonycman
Jun 28 2011, 04:23
У меня вопрос по поводу отладочных функций по измерению стека для порта под кортекс-м3 - эти функции необходимо вызывать только из соответствующего процесса, или можно из, к примеру, idle процесса?
Можно ли измерить стек прерываний?
AHTOXA
Jun 28 2011, 12:37
Цитата(sonycman @ Jun 28 2011, 10:23)

У меня вопрос по поводу отладочных функций по измерению стека для порта под кортекс-м3 - эти функции необходимо вызывать только из соответствующего процесса, или можно из, к примеру, idle процесса?
Из какого-такого "соответствующего"?

Конечно из любого, они же только читают стек.
Цитата(sonycman @ Jun 28 2011, 10:23)

Можно ли измерить стек прерываний?
Нет, этого нет.
sonycman
Jun 28 2011, 13:41
Цитата(AHTOXA @ Jun 28 2011, 16:37)

Из какого-такого "соответствующего"?

Конечно из любого, они же только читают стек.
То есть из процесса idle можно определить свободное место на стёке любого процесса?
А как будет выглядеть вызов, можно пример?
Неужели так: Proc1.init_stack_frame() и Proc1.stack_slack()?
AHTOXA
Jun 28 2011, 13:54
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
Jun 28 2011, 14:02
Цитата(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 (посмотрите разные порты)
Спасибо!
Будем юзать четвёрку
Вопрос больше Александру (как поддерживающему AVR) - при попытке определения макро scmRTOS_PROCESS_RESTART_ENABLE = 1 у процесса отсутствует метод terminate().
Ковыряния установили что из-за особенности архитектуры AVR и компилятора IAR и соответственно нового особенного шаблона процесса (с доп. параметром глубины стека возвратов) метод terminate() у нового шаблона не описан.
Это связано с чем-то серьезным или просто забыли описать?
Я только-только стал под перископную глубину всплывать (много всяких событий -- в общем и целом хороших, но отнявших кучу времени), а тут вопросов навалили...
IAR-ветку я подхватил недавно и в самом иаре не во всём разобрался.
Скорее всего -- "просто забыли" в двухстековой ветке добавить всё. Посмотрю в ближайшее время.
Acvarif
Jul 18 2011, 20:05
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 такого нет...
Цитата(Nixon @ Jun 29 2011, 01:15)

Это связано с чем-то серьезным или просто забыли описать?
Ага, просто забылось. Как и size_t для размера стека.
Поправил, зафиксировал.
jorikdima
Sep 6 2011, 08:04
Я смотрю в классах сервисов по-прежнему поля объявлены как private a не protected, что не позволяет наследоваться от них и изменять под свои нужды

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

Я смотрю в классах сервисов по-прежнему поля объявлены как private a не protected, что не позволяет наследоваться от них и изменять под свои нужды

Это потому, что эти классы не предназначены для расширения их функционала - как-то до сих пор не возникало пожеланий на этот счёт.
Цитата(jorikdima @ Sep 6 2011, 15:04)

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

Это потому, что эти классы не предназначены для расширения их функционала - как-то до сих пор не возникало пожеланий на этот счёт.
Это я понял уже, у нас с вами возникал диалог на этот счет в одной из веток
http://electronix.ru/forum/index.php?showt...st&p=735769 (кстати, можно сказать, что я пожелание сгенерировал

) Я в принципе не настаиваю конечно, авторам решать. Просто непонятно, что плохого в этом наследовании было бы.
Цитата(jorikdima @ Sep 10 2011, 01:35)

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

Подозреваю, что раз он всё же так встал, то скорее всего будет решён положительно.

Вопрос решён положительно, все private члены классов-сервисов теперь являются protected.
Сергей Борщ
Sep 23 2011, 13:09
Для ускорения выхода релиза я принял решение прекратить поддержку следующих портов 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
Sep 23 2011, 13:19
Цитата(dxp @ Sep 21 2011, 15:43)

Вопрос решён положительно, все private члены классов-сервисов теперь являются protected.
Спасибо!
AHTOXA
Sep 23 2011, 15:27
Цитата(Сергей Борщ @ Sep 23 2011, 19:09)

GCC/ADuC70xx - ибо ADuC тоже не применяю
А я применяю (706x). Давай тогда мне его?
Сергей Борщ
Sep 23 2011, 18:13
QUOTE (AHTOXA @ Sep 23 2011, 18:27)

А я применяю (706x). Давай тогда мне его?
А забирай. Я сегодня зафиксировал последние (надеюсь) правки порта, осталось добить примеры и документацию. Добавил возможность компилить любые файлы (включая файлы ОС) в thumb - для ADuC, с его 16-битной флешью, будет полезно. Проверил - первый пример на SAM7, полностью в thumb за исключением трех необходимых файлов, запустился.
AHTOXA
Sep 24 2011, 20:00
Забрал

Все примеры компилятся, thumb ещё не пробовал. Примеры LPC2xxx - тоже обновил, арбайтен. (И то и то - GCC.)
Пример №4 делать не буду ни там ни там, нет времени. Может потом...
_Артём_
Oct 26 2011, 12:28
Вопрос к разработчикам ОС.
Будет ли поддержка новых AVR в последующих версиях?
Интересует семейство xMega.
Спасибо.
Будет. STM8 я так-сяк запустил, теперь время на Xmega выделю. Потом на доводку STM8.
В версии для 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 )
QUOTE (a9d @ Jan 29 2012, 03:51)

В версии для GCC есть небольшой косяк. При сборки версии, для ATmega168pa , с программным прерывание вылетает ошибка "SPM ready interrupt vector not defined". Это происходит из-за того, что вектор SPM_READY_vect называется SPM_Ready_vect.
Вообще-то, выбор и конфигурирование источника программного прерывания специально вынесен на уровень пользовательского проекта для: 1) предоставления пользователю полной свободы в этом вопросе; 2) обхода косяков в заголовках тулчейнов, когда для разных МК аналогичные макросы имеют чуть разные имена, как в примере выше.
Поэтому, как я понимаю, ошибки тут нет - для МК, который используется в примере всё указанно верно, а при смене МК просто нужно откорректировать этот код
проекта.
Цитата(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.
AVR Studio 5.1 хеадер для ATmega168pa.
Там еще имена других прерываний отличаются от нормальных тем, что добавлено одно нижнее подчеркивание.
Т.е. в «тулчейне», который со студией? Тьху, заразы. И зачем они так? В предшественнике WinAVR было только с большими буквами.
Кому-то захотелось красоту навести... Но когда в прошлый раз наводили, то XXX_YYY_vect поставили параллельно с SIG_XXX_YYY, старое всё собиралось.
Хм. так это ж в avr-libc изменение. Это что, как у меня в убунте свежая версия avr-gcc появится, так тоже поменяется?
_Артём_
Mar 8 2012, 13:03
Как в версии 4 использовать исходники написанные для 3.10?
Нужно где-то определить
Код
#define scmRTOS_OBSOLETE_NAMES 1
?
В каком файле это должно быть определено?
_Артём_
Mar 8 2012, 17:01
Задал в файле 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(); }
Что неправильно делаю?
Значит, Вы не задали функцию
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 типов.
_Артём_
Mar 8 2012, 21:19
Цитата(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 типов.
Спасибо, посмотрю.
_Артём_
Mar 14 2012, 12:44
Зашёл по ссылке:
main.cppИ вижу:
Код
template<> void TProc3::exec()
Откуда в версии 3.10 у OS::process метод exec?
Exec есть, а exec - нету.
Что не так?
IgorKossak
Mar 14 2012, 13:29
Цитата(_Артём_ @ Mar 14 2012, 14:44)

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

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