Артём__ 0 8 марта, 2012 Опубликовано 8 марта, 2012 · Жалоба Значит, Вы не задали функцию RaiseContextSwitch() в пространстве OS у себя в проекте, в файле scmRTOS_TARGET_CFG.h Да, не задал. И если исходники были для 3.10, то в них не могло быть функции system_timer_user_hook(), должна была быть SystemTimerUserHook() Я взял за основу пример для версии 4, но main.cpp ещё не заменил. Пример 3-Channel для порта AVR/GCC специально оставлен в режиме совместимости, т.е. там все исходники примера от 3.10 Только в scmRTOS_CONFIG.h добавлена строка Код #include "scmRTOS_310_compat.h" и всё. Этого достаточно — компилируется в режиме совместимости. В том include-файле кроме Код #define scmRTOS_OBSOLETE_NAMES 1 ещё определено несколько нужных для 3.10 типов. Спасибо, посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Зашёл по ссылке: main.cpp И вижу: template<> void TProc3::exec() Откуда в версии 3.10 у OS::process метод exec? Exec есть, а exec - нету. Что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Exec есть, а exec - нету. Что не так? Файл по ссылке из четвёртой версии. Номер версии в комментариях забыли поменять. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Файл по ссылке из четвёртой версии. Номер версии в комментариях забыли поменять. ? Простите, не понял... А из какой версии он должен быть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Тогда мне не понятна одна из Ваших мыслей. 1. Мы находимся в теме, посвящённой четвёртой версии ОС и Вы дали ссылку на файл из этой версии. 2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?" 3. Далее:"Exec есть, а exec - нету." Я предположил, что Вы обратили внимание на номер версии в шапке файла, на что и дал свой ответ. Добавлю, что при переходе с третьей версии на четвёртую, авторами было принято решение о переименовании методов (это я опять же предполагаю, что Вас именно это интересует). Если мои предположения не верны, то уточните свой вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Тогда мне не понятна одна из Ваших мыслей. 1. Мы находимся в теме, посвящённой четвёртой версии ОС и Вы дали ссылку на файл из этой версии. 2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?" 3. Далее:"Exec есть, а exec - нету." Мой вопрос: ссылка Переношу приложение написанное для v310 в 400. В ходе процесса возникают вопросы и тп. 2. Вы задали вопрос:"Откуда в версии 3.10 у OS::process метод exec?" 3. Далее:"Exec есть, а exec - нету." Я предположил, что Вы обратили внимание на номер версии в шапке файла, на что и дал свой ответ. Я думал, что если использовать режим совместимости с 310 (scmRTOS_OBSOLETE_NAMES 1), то в 4-й версии также должен быть определёны TBaseProcess::Exec, RaiseContextSwitch и тп (появляющиеся если scmRTOS_OBSOLETE_NAMES=1). Но они не определены... Вот мне и непонятно - это неточности/ошибки/недоделки или что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Да, я не обратил внимания на предысторию вопроса. Вот мне и непонятно - это неточности/ошибки/недоделки или что. Скорее всего - всё вместе. Когда у меня встала задача переносить проект на четвёртую версию, то я просто сделал рефакторинг имён по всему проекту (благо в Eclipse это просто, заняло несколько минут) и не заморачивался с OBSOLETE_NAMES. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Скорее всего - всё вместе. +ещё мое слабое знание scmrtos. Когда у меня встала задача переносить проект на четвёртую версию, то я просто сделал рефакторинг имён по всему проекту (благо в Eclipse это просто, заняло несколько минут) и не заморачивался с OBSOLETE_NAMES. Рефакторинг - тоже вариант. Но я лучше с OBSOLETE_NAMES помучаюсь. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Вот мне и непонятно - это неточности/ошибки/недоделки или что.Это так и задумано. Там, где возможно - старые места определены. К сожалению, определение имен Exec потребовало бы щедро усыпать код различными #ifdef. Поэтому было принято решение возложить на пользователя обязанность переименовать в своем коде Exec в exec. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Это так и задумано. Там, где возможно - старые места определены. К сожалению, определение имен Exec потребовало бы щедро усыпать код различными #ifdef. Ясно. Спасибо. Буду менять E на е. Поэтому было принято решение возложить на пользователя обязанность переименовать в своем коде Exec в exec. А об этом где-то написано? Может есть кaкой-то Migration tutorial? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 15 марта, 2012 Опубликовано 15 марта, 2012 · Жалоба Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто: Режим совместимости включает генерацию 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 15 марта, 2012 Опубликовано 15 марта, 2012 · Жалоба p.s. примеры AVR переехали каталогом ниже http://scmrtos.svn.sourceforge.net/viewvc/...s/AVR/GCC/MEGA/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 15 марта, 2012 Опубликовано 15 марта, 2012 · Жалоба Пока полз до компьютера, объяснение уже дал Сергей. Более развёрнуто: Режим совместимости включает генерацию inline-функций-переходников в две стороны: Со старых имён функций классов ОС на новые — чтобы пользовательский код мог продолжать вызывать, например, .Wait() С новых имён задаваемых пользователем функций (хуки, тот же raise_context_switch()) на старые — чтобы ОС увидела эти функции в старых текстах. Благодаря переходникам работают и старые, и новые имена, можно потихоньку редактироввть текст и после каждого изменения все будет собираться. В случае с exec() добавлением inline-переходника не обойтись, нужно «честное имя» (адрес). В итоге два варианта - ifdef-ить эти места в ОС либо пользователю отредактировать эти имена. Решили остановиться на втором — этих Exec() немного в каждом проекте и автору точно известно где их искать. Понятно. Спасибо. P.S. Примеры для Мега АВР переехали в папку ../MEGA и в описании примеров появился комментарий: "samples for all non-xmega". К чему бы это? Скоро появится папка /xmega. Или нет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demitar 0 3 апреля, 2012 Опубликовано 3 апреля, 2012 · Жалоба Добрый день! Осваиваю потихоньку scmRTOS порт для М3, одолевает праздное любопытство: почему класс TCritSect вынесен из пространства имен OS? Вроде бы как единообразие нарушается при его использовании, всегда хочется по аналогии с OS::TEventFlag ef; написать OS::TCritSect cs; или тут была какая-то задумка изначально? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 32 3 апреля, 2012 Опубликовано 3 апреля, 2012 · Жалоба или тут была какая-то задумка изначально? Хороший вопрос. :) Наверное потому, что он сам по себе несёт самостоятельную нагрузку, не "завязываясь" на потроха ОС. Такую штуку можно (и полезно) использовать и без всяких вытесняющих осей в случаях, когда возможен асинхронный доступ к глобальным объектам (например, из основной программы и из прерывания). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться