|
Альтернативный вариант задания функции процесса |
|
|
|
Nov 10 2012, 13:36
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318

|
Приветствую. Начал смотреть scmRTOS. Сразу начал резать глаз способ реализации функции процесса: Код typedef OS::process<OS::pr0, 300> TProc1;
namespace OS { template <> OS_PROCESS void TProc1::exec() { for(;;) { ef.wait(); PB0.Off(); } } } Необходимость реализовывать функцию процесса внутри поля имён OS, а добавление template <> вызывает некоторое удивление Подумалось, почему-бы не сделать ф-цию exec просто ф-цией своего собственного класса? На скорую руку сделал несколько изменений в исходниках scmRTOS и весь код декларации и реализации процесса превратился в: Код class TProc1 : public OS::process<TProc1, OS::pr0, 300> { public: static void exec() { for(;;) { ef.wait(); PB0.Off(); } } }; Что мы в итоге имеем? 1) Класс, в котором можно инкапсулировать данные и методы процесса. Закрытые и используемые только в TProc1 данные можно объявить в секции private класса и никто к ним не получит доступ. 2) Более привычный способ реализации ф-ции. Кто что думает на этот счёт?
--------------------
|
|
|
|
|
 |
Ответов
|
Nov 14 2012, 11:57
|

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

|
QUOTE (Сергей Борщ @ Nov 14 2012, 15:46)  А если сделать дополнительную статическую функцию, скажем, start(), с параметром типа "тип процесса", в init_stack_frame() использовать ее вместо exec, в стековый фрейм на место регистра, в котором передается параметр, класть this, А функция уже будет делать param->exec(). Т.е. мы не вдаемся в дебри реализации указателя на функцию-член, этим занимается компилятор в start(), exec может быть нестатическим. Как-то так... Еще неплохо бы объявить exec как noreturn, чтобы компилятор догалася заменить вызов exec() на переход в нее. В принципе, такое изменение достойно релиза 4.1. И продумать совместимость с текущими исходниками. Нормальный ход. Вопрос остаётся с совместимостью. Как вариант - реализовать в расширениях, пользователь сам выбирает, что ему больше нравится. Я до сих пор не ощущаю необходимости объединять код реализации процесса с кодом прикладной программы, но если народ хочет (а его уже большинство по сравнению со мной), то возражать не могу. P.S. Сам пока этим заниматься не могу, завален по уши текучкой, т.ч. инициативные товарищи - ваша инициатива - ваша реализация.  Делайте расширение (думаю, сразу в trunk). Кстати, интересный вопрос, можно ли будет использовать гибридную схему - часть процессов по традиционному варианту, часть по новому? Навскидку вижу препятствие - разный способ вызова (напрямую и через указатель). Вот если б можно было совместить этих ужа с ежом, это было бы действительно клёво. Хотя бы тем, что совместимость точно никуда не денется.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
ArtDenis Альтернативный вариант задания функции процесса Nov 10 2012, 13:36 AHTOXA Цитата(ArtDenis @ Nov 10 2012, 19:36) Что... Nov 10 2012, 15:59 ArtDenis AHTOXA, по идее вообще никак не должно влиять на б... Nov 10 2012, 16:10 AHTOXA Ну что я могу сказать... Мне очень понравилось. Эт... Nov 10 2012, 16:31 dxp QUOTE (ArtDenis @ Nov 10 2012, 20:36) Нео... Nov 11 2012, 03:21 ArtDenis Цитата(dxp @ Nov 11 2012, 09:21) Откуда в... Nov 11 2012, 05:00 AHTOXA Цитата(dxp @ Nov 11 2012, 09:21) Уже обсу... Nov 11 2012, 06:07 dxp QUOTE (ArtDenis @ Nov 11 2012, 12:00) А к... Nov 11 2012, 12:02 ArtDenis Цитата(dxp @ Nov 11 2012, 18:02) Я не зна... Nov 11 2012, 12:43  dxp QUOTE (ArtDenis @ Nov 11 2012, 19:43) Я с... Nov 11 2012, 13:00 AHTOXA Цитата(dxp @ Nov 11 2012, 19:00) Помещать... Nov 11 2012, 16:00 AHTOXA Йоу! Я придумал, как совместить эти два вариан... Nov 11 2012, 19:15  ArtDenis Цитата(AHTOXA @ Nov 12 2012, 01:15) Йоу... Nov 12 2012, 02:41  Сергей Борщ QUOTE (AHTOXA @ Nov 11 2012, 21:15) Я при... Nov 12 2012, 07:13   AHTOXA Цитата(Сергей Борщ @ Nov 12 2012, 13:13) ... Nov 12 2012, 07:48    Сергей Борщ QUOTE (AHTOXA @ Nov 12 2012, 09:48) Не по... Nov 12 2012, 07:56     AHTOXA А может мои пламенные речи уже переубедили его? Nov 12 2012, 10:25   ArtDenis Цитата(Сергей Борщ @ Nov 12 2012, 13:13) ... Nov 12 2012, 15:08 ReAl Цитата(ArtDenis @ Nov 11 2012, 07:00) Лич... Nov 11 2012, 20:07 dxp QUOTE (AHTOXA @ Nov 11 2012, 23:00) Вообщ... Nov 13 2012, 06:20 AHTOXA Цитата(dxp @ Nov 13 2012, 12:20) В общем,... Nov 13 2012, 14:06 ArtDenis Цитата(dxp @ Nov 13 2012, 12:20) Ни разу ... Nov 13 2012, 15:59 ReAl Цитата(Сергей Борщ @ Nov 12 2012, 09:13) ... Nov 13 2012, 15:31 Сергей Борщ QUOTE (ReAl @ Nov 13 2012, 17:31) А как и... Nov 13 2012, 16:34 dxp QUOTE (AHTOXA @ Nov 13 2012, 21:06) Прове... Nov 13 2012, 16:52 AHTOXA Ладно, раз уж у Гарри такая идиосинкразия к этому ... Nov 13 2012, 17:04 ReAl Цитата(dxp @ Nov 13 2012, 18:52) Отождест... Nov 13 2012, 18:44 ArtDenis Цитата(dxp @ Nov 13 2012, 22:52) Вы путае... Nov 14 2012, 03:33  ReAl Цитата(ArtDenis @ Nov 14 2012, 05:33) В о... Nov 14 2012, 13:45   ArtDenis Цитата(ReAl @ Nov 14 2012, 19:45) Ну да.
... Nov 14 2012, 14:00    ReAl Цитата(ArtDenis @ Nov 14 2012, 16:00) voi... Nov 14 2012, 15:01     ArtDenis Цитата(ReAl @ Nov 14 2012, 21:01) -Wredun... Nov 14 2012, 15:21 dxp QUOTE (AHTOXA @ Nov 14 2012, 00:04) Ладно... Nov 14 2012, 01:17 Сергей Борщ QUOTE (dxp @ Nov 14 2012, 03:17) Почему т... Nov 14 2012, 07:29  Сергей Борщ QUOTE (Сергей Борщ @ Nov 14 2012, 09:29) ... Nov 14 2012, 08:46   AHTOXA Давайте я сюда добавлю ссылки на уже придуманные в... Nov 14 2012, 09:17    Сергей Борщ QUOTE (AHTOXA @ Nov 14 2012, 11:17) вот в... Nov 14 2012, 11:25     AHTOXA Я вот что подумал. В момент вызова TBaseProcess::i... Nov 15 2012, 19:49 AHTOXA Цитата(dxp @ Nov 14 2012, 07:17) Э-э, мы,... Nov 14 2012, 07:47 ReAl Цитата(dxp @ Nov 14 2012, 13:57) Кстати, ... Nov 14 2012, 12:51 ArtDenis Всё-таки расставлю точки над i по поводу текущего ... Nov 14 2012, 13:43 ReAl Не надо адрес функции-члена... Слова C++ extension... Nov 15 2012, 20:19 ArtDenis AHTOXA, Указатель на нестатическую функцию член кл... Nov 16 2012, 03:41 AHTOXA Цитата(ArtDenis @ Nov 16 2012, 09:41) AHT... Nov 16 2012, 19:41 AHTOXA Я так понимаю, никто не впечатлился?
Да, это оч... Nov 17 2012, 20:10 Vasya777 Предлагаю другой вариант
Пользовательские классы
... Mar 20 2013, 16:59
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|