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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> 4.0
_Артём_
сообщение Mar 8 2012, 21:19
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(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 типов.


Спасибо, посмотрю.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2012, 12:44
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Зашёл по ссылке:
main.cpp

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


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

Что не так?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 14 2012, 13:29
Сообщение #48


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

Что не так?

Файл по ссылке из четвёртой версии. Номер версии в комментариях забыли поменять.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2012, 13:39
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



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

?
Простите, не понял...
А из какой версии он должен быть?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 14 2012, 14:13
Сообщение #50


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

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

Если мои предположения не верны, то уточните свой вопрос.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2012, 14:25
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(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). Но они не определены...
Вот мне и непонятно - это неточности/ошибки/недоделки или что.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 14 2012, 14:56
Сообщение #52


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Да, я не обратил внимания на предысторию вопроса.
Цитата(_Артём_ @ Mar 14 2012, 16:25) *
Вот мне и непонятно - это неточности/ошибки/недоделки или что.

Скорее всего - всё вместе.
Когда у меня встала задача переносить проект на четвёртую версию, то я просто сделал рефакторинг имён по всему проекту (благо в Eclipse это просто, заняло несколько минут) и не заморачивался с OBSOLETE_NAMES.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2012, 15:05
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(IgorKossak @ Mar 14 2012, 16:56) *
Скорее всего - всё вместе.

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

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

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

Спасибо.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 14 2012, 15:53
Сообщение #54


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



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


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 14 2012, 16:59
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Сергей Борщ @ Mar 14 2012, 17:53) *
Это так и задумано. Там, где возможно - старые места определены. К сожалению, определение имен Exec потребовало бы щедро усыпать код различными #ifdef.


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

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


А об этом где-то написано?
Может есть кaкой-то Migration tutorial?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Mar 15 2012, 09:29
Сообщение #56


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

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



Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто:
Режим совместимости включает генерацию 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


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ReAl
сообщение Mar 15 2012, 11:10
Сообщение #57


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

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



p.s. примеры AVR переехали каталогом ниже
http://scmrtos.svn.sourceforge.net/viewvc/...s/AVR/GCC/MEGA/


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Mar 15 2012, 13:00
Сообщение #58


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(ReAl @ Mar 15 2012, 11:29) *
Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто:
Режим совместимости включает генерацию inline-функций-переходников в две стороны:
Со старых имён функций классов ОС на новые — чтобы пользовательский код мог продолжать вызывать, например, .Wait()
С новых имён задаваемых пользователем функций (хуки, тот же raise_context_switch()) на старые — чтобы ОС увидела эти функции в старых текстах.

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

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

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


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

Go to the top of the page
 
+Quote Post
demitar
сообщение Apr 3 2012, 10:33
Сообщение #59


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 3-09-09
Пользователь №: 52 170



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

или тут была какая-то задумка изначально?
Go to the top of the page
 
+Quote Post
dxp
сообщение Apr 3 2012, 12:05
Сообщение #60


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



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

Хороший вопрос. sm.gif Наверное потому, что он сам по себе несёт самостоятельную нагрузку, не "завязываясь" на потроха ОС. Такую штуку можно (и полезно) использовать и без всяких вытесняющих осей в случаях, когда возможен асинхронный доступ к глобальным объектам (например, из основной программы и из прерывания).


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 19:56
Рейтинг@Mail.ru


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