|
|
  |
4.0 |
|
|
|
Mar 8 2012, 21:19
|
Гуру
     
Группа: Свой
Сообщений: 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 типов. Спасибо, посмотрю.
|
|
|
|
|
Mar 14 2012, 12:44
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Зашёл по ссылке: main.cppИ вижу: Код template<> void TProc3::exec() Откуда в версии 3.10 у OS::process метод exec? Exec есть, а exec - нету. Что не так?
|
|
|
|
|
Mar 14 2012, 14:13
|

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

|
Тогда мне не понятна одна из Ваших мыслей. 1. Мы находимся в теме, посвящённой четвёртой версии ОС и Вы дали ссылку на файл из этой версии. 2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?" 3. Далее:"Exec есть, а exec - нету." Я предположил, что Вы обратили внимание на номер версии в шапке файла, на что и дал свой ответ.
Добавлю, что при переходе с третьей версии на четвёртую, авторами было принято решение о переименовании методов (это я опять же предполагаю, что Вас именно это интересует).
Если мои предположения не верны, то уточните свой вопрос.
|
|
|
|
|
Mar 14 2012, 14:25
|
Гуру
     
Группа: Свой
Сообщений: 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). Но они не определены... Вот мне и непонятно - это неточности/ошибки/недоделки или что.
|
|
|
|
|
Mar 14 2012, 15:05
|
Гуру
     
Группа: Свой
Сообщений: 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 помучаюсь. Спасибо.
|
|
|
|
|
Mar 14 2012, 16:59
|
Гуру
     
Группа: Свой
Сообщений: 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?
|
|
|
|
|
Mar 15 2012, 09:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 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 не помешал бы... Ну вот если бы к проекту присоединился кто-то, кто сам ничего в оси и не берется менять, но разбирается в ней (в том числе отслеживает обсуждения в рассылке) и выполняет функции «технического писателя» по таким вот пунктам...
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Apr 3 2012, 10:33
|
Участник

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

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