Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 4.0
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > scmRTOS
Страницы: 1, 2
_Артём_
Цитата(IgorKossak @ Mar 14 2012, 16:13) *
Тогда мне не понятна одна из Ваших мыслей.
1. Мы находимся в теме, посвящённой четвёртой версии ОС и Вы дали ссылку на файл из этой версии.
2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?"
3. Далее:"Exec есть, а exec - нету."


Мой вопрос: ссылка
Переношу приложение написанное для v310 в 400. В ходе процесса возникают вопросы и тп.

Цитата(IgorKossak @ Mar 14 2012, 16:13) *
2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?"
3. Далее:"Exec есть, а exec - нету."
Я предположил, что Вы обратили внимание на номер версии в шапке файла, на что и дал свой ответ.

Я думал, что если использовать режим совместимости с 310 (scmRTOS_OBSOLETE_NAMES 1), то в 4-й версии также должен быть определёны TBaseProcess::Exec, RaiseContextSwitch и тп (появляющиеся если scmRTOS_OBSOLETE_NAMES=1). Но они не определены...
Вот мне и непонятно - это неточности/ошибки/недоделки или что.
IgorKossak
Да, я не обратил внимания на предысторию вопроса.
Цитата(_Артём_ @ Mar 14 2012, 16:25) *
Вот мне и непонятно - это неточности/ошибки/недоделки или что.

Скорее всего - всё вместе.
Когда у меня встала задача переносить проект на четвёртую версию, то я просто сделал рефакторинг имён по всему проекту (благо в Eclipse это просто, заняло несколько минут) и не заморачивался с OBSOLETE_NAMES.
_Артём_
Цитата(IgorKossak @ Mar 14 2012, 16:56) *
Скорее всего - всё вместе.

+ещё мое слабое знание scmrtos.

Цитата(IgorKossak @ Mar 14 2012, 16:56) *
Когда у меня встала задача переносить проект на четвёртую версию, то я просто сделал рефакторинг имён по всему проекту (благо в Eclipse это просто, заняло несколько минут) и не заморачивался с OBSOLETE_NAMES.

Рефакторинг - тоже вариант. Но я лучше с OBSOLETE_NAMES помучаюсь.

Спасибо.
Сергей Борщ
QUOTE (_Артём_ @ Mar 14 2012, 16:25) *
Вот мне и непонятно - это неточности/ошибки/недоделки или что.
Это так и задумано. Там, где возможно - старые места определены. К сожалению, определение имен Exec потребовало бы щедро усыпать код различными #ifdef. Поэтому было принято решение возложить на пользователя обязанность переименовать в своем коде Exec в exec.
_Артём_
Цитата(Сергей Борщ @ Mar 14 2012, 17:53) *
Это так и задумано. Там, где возможно - старые места определены. К сожалению, определение имен Exec потребовало бы щедро усыпать код различными #ifdef.


Ясно. Спасибо.
Буду менять E на е.

Цитата(Сергей Борщ @ Mar 14 2012, 17:53) *
Поэтому было принято решение возложить на пользователя обязанность переименовать в своем коде Exec в exec.


А об этом где-то написано?
Может есть кaкой-то Migration tutorial?
ReAl
Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто:
Режим совместимости включает генерацию inline-функций-переходников в две стороны:
Со старых имён функций классов ОС на новые — чтобы пользовательский код мог продолжать вызывать, например, .Wait()
С новых имён задаваемых пользователем функций (хуки, тот же raise_context_switch()) на старые — чтобы ОС увидела эти функции в старых текстах.

Благодаря переходникам работают и старые, и новые имена, можно потихоньку редактироввть текст и после каждого изменения все будет собираться.

В случае с exec() добавлением inline-переходника не обойтись, нужно «честное имя» (адрес).
В итоге два варианта - ifdef-ить эти места в ОС либо пользователю отредактировать эти имена.
Решили остановиться на втором — этих Exec() немного в каждом проекте и автору точно известно где их искать.

Где почитать — ну можно там же, в main.cpp, ссылку Вы тут сами дали:
Цитата
55 //---------------------------------------------------------------------------
56 // Sample target
57 // The sample is intended for following AVR microcontrollers:
58 // atmega48..atmega328
59 // atmega64, atmega128
60 // atmega640..atmega2561
61 // Some changes in register names may be needed for other AVRs.
62 //
63 // The sample is also intended to show how to use scmRTOS v3.xx oriented
64 // sources with scmRTOS v4.00

65 // 1. Add
66 // #include "scmRTOS_310_compat.h"
67 // into scmRTOS_CONFIG.h
68 // 2. Rename process functions from Exec() to exec()
69 //

Конечно, какой-нибуть мигратинг-гад.pdf не помешал бы...
Ну вот если бы к проекту присоединился кто-то, кто сам ничего в оси и не берется менять, но разбирается в ней (в том числе отслеживает обсуждения в рассылке) и выполняет функции «технического писателя» по таким вот пунктам... rolleyes.gif
ReAl
p.s. примеры AVR переехали каталогом ниже
http://scmrtos.svn.sourceforge.net/viewvc/...s/AVR/GCC/MEGA/
_Артём_
Цитата(ReAl @ Mar 15 2012, 11:29) *
Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто:
Режим совместимости включает генерацию inline-функций-переходников в две стороны:
Со старых имён функций классов ОС на новые — чтобы пользовательский код мог продолжать вызывать, например, .Wait()
С новых имён задаваемых пользователем функций (хуки, тот же raise_context_switch()) на старые — чтобы ОС увидела эти функции в старых текстах.

Благодаря переходникам работают и старые, и новые имена, можно потихоньку редактироввть текст и после каждого изменения все будет собираться.

В случае с exec() добавлением inline-переходника не обойтись, нужно «честное имя» (адрес).
В итоге два варианта - ifdef-ить эти места в ОС либо пользователю отредактировать эти имена.
Решили остановиться на втором — этих Exec() немного в каждом проекте и автору точно известно где их искать.

Понятно. Спасибо.


P.S. Примеры для Мега АВР переехали в папку ../MEGA и в описании примеров появился комментарий: "samples for all non-xmega". К чему бы это? Скоро появится папка /xmega. Или нет?

demitar
Добрый день!
Осваиваю потихоньку scmRTOS порт для М3, одолевает праздное любопытство: почему класс TCritSect вынесен из пространства имен OS?
Вроде бы как единообразие нарушается при его использовании, всегда хочется по аналогии с
OS::TEventFlag ef;
написать
OS::TCritSect cs;

или тут была какая-то задумка изначально?
dxp
QUOTE (demitar @ Apr 3 2012, 17:33) *
или тут была какая-то задумка изначально?

Хороший вопрос. sm.gif Наверное потому, что он сам по себе несёт самостоятельную нагрузку, не "завязываясь" на потроха ОС. Такую штуку можно (и полезно) использовать и без всяких вытесняющих осей в случаях, когда возможен асинхронный доступ к глобальным объектам (например, из основной программы и из прерывания).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.