|
Альтернативный вариант задания функции процесса |
|
|
|
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 11 2012, 16:00
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Цитата(dxp @ Nov 11 2012, 19:00)  Помещать функцию в пространство имён или не помещать - это личное предпочтение автора примера, ни язык, ни ОС этого не требуют. В других примерах - тот же AVR/IAR, в частности, этого нет. Вообще-то она изначально туда помещена, в объявлении. То, что некоторые компиляторы до сих пор позволяют не указывать это в реализации, не выносит exec() из пространства имён OS. Цитата(dxp @ Nov 11 2012, 18:02)  Приводимыми агрументами и не удастся.  Контрагументы, имхо, сильнее. Или же кто-то просто упёрся  Цитата(dxp @ Nov 11 2012, 18:02)  Не более лишняя, чем определение класса в предлагаемом варианте. Скажи, чем отношение наследования лучше отношения включения? В данном конкретном случае. А где ты видишь здесь включение? Никакого включения нет. Есть вызов некой функции некоего стороннего объекта из функции exec() другого класса. Какое же это включение? Цитата(dxp @ Nov 11 2012, 18:02)  предлагаемый вариант предоставляет только один способ - безальтернативно включить весь код процесса в один класс. Опять не так. Что мешает включить какой-то другой объект в класс процесса? Или же, по-нынешнему, вызвать из exec() функции любого другого объекта? Короче, сплошные профиты от нынешнего варианта. А недостатков я по-прежнему не вижу  Цитата(dxp @ Nov 11 2012, 18:02)  Что мешает тебе наследовать от process<>? Хотя я бы так не делал - лучше написать отдельный класс и вызывать его функцию (или функции) из exec. Не помню, но что-то вроде мешает. Не получается, емнимс. Хотя надо попробовать...
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 11 2012, 19:15
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Йоу! Я придумал, как совместить эти два варианта Короче, переименовываем в новом варианте process в customProcess, а process объявляем вот так: Код template<TPriority pr, size_t stack_size> class process : public customProcess<process<pr, stack_size>, pr, stack_size> { public: OS_PROCESS static void exec(); }; И всё! Старый вариант работает, и новый (наследование от customProcess) - тоже. Получается вообще замечательно: старые проекты все подхватятся без изменений, а в новых пользователь имеет возможность выбрать для себя более удобный вариант.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Nov 12 2012, 02:41
|
Частый гость
 
Группа: Участник
Сообщений: 142
Регистрация: 10-11-12
Пользователь №: 74 318

|
Цитата(AHTOXA @ Nov 12 2012, 01:15)  Йоу! Я придумал, как совместить эти два варианта  Да, удачное решение  Мне оно в голову не пришло
--------------------
|
|
|
|
Сообщений в этой теме
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  Сергей Борщ 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 dxp QUOTE (Сергей Борщ @ Nov 14 2012, 15:46) ... Nov 14 2012, 11:57 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
|
|
|