Например TDA7294

Форум РадиоКот • Просмотр темы - AVR на Си++
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 22:15:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 92 ]    , 2, , ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Пт ноя 10, 2017 07:23:27 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 8
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Еще ни разу не сталкивался с публичными проектами, где применение С++ было бы действительно необходимым, если исключать какие-то внутренние предпосылки программистов личностного характера. Си более чем достаточно.
По-моему, вы маетесь ерундой, стараясь решать простые задачи сложными методами.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Пт ноя 10, 2017 08:16:21 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
Дело в том что задач создания библиотек с нужным мне в работе функционалом далось решить давно, хотелось бы улучшить. Не так давно сделал вариант с вложенными объектами не через внешний define а через вариативный макрос в самом теле класса. Типа objcts( A a, B b) и тд сколько надо, а он находит всё нужное для включения в цепочку вызова этих объектов. И так не тратиться озу на таблицы и списки между прочим и можно в одной цепочке вызова например вызвать у всех зарегистрированных в ней объектов разных классов методы с одинаковым названием и параметрами.

Про наследование то же не говорить, пробовал, тоже есть траты озу.

Попробую попозже с другого пк скинуть пример, код который что то выдаёт и размер оперативки с полученными командами асма, увидите о чём речь.

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 11:39:57 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
есть вопрос по объектам как их вызывать одного типа как бдто бы они в цепочке но что бы не в цепочке тоесть может их стоит как то хитро разместить на памяти в озу но тогда подскажжите пожлйста как это сделать

Зашел тут в вашу веточку. У меня есть решение - я в обьекте размещаю указатель на обьект того же типа. Во время начальной инициализации я по всех своих обьектах создаю связи через эти указатели. Можно строить деревья, можно кольца. Например есть у нас обьект - страница меню. И есть кнопки вверх, вниз, вправо, влево... я в обьекте имею 4 указателя на другие страницы. В конструкторе пишем такое: nextPagePtr = this; Если нужен переход то при начальной инициализации в указатели прописываем другие страницы.
Если создать кольцо, то можно в простой процедурке допустим опрашивать разные spi слейвы не заморачиваясь с массивами и проверками на конец массива типа if(i > x) i = 0;


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 12:09:00 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ярослав555 писал(а):
У меня есть решение - ...
Это решение давно уже всем известно и используется в односвязных (и не только) списках. Без них списки, в принципе, не возможны.
Достаточно просто погуглить.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 12:26:24 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
Это решение давно уже всем известно и используется в односвязных (и не только) списках. Без них списки, в принципе, не возможны.
Достаточно просто погуглить.

Да я и не претендую на открытие Америки. Но как я понял, у топик стартера и объекты не одинаковые. Надо описывать преобразование типов... фигня всё это. Я вот своих при любом удобном случае пилю слезать с АВРок на СТМки. Я как программист готов. Только платы переделать. Как только будем новый прибор делать так ультиматум поставлю))) Меня уже достало 2-4к оперативки за неадекватные деньги.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 12:27:12 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
есть вопрос по объектам как их вызывать одного типа как бдто бы они в цепочке но что бы не в цепочке тоесть может их стоит как то хитро разместить на памяти в озу но тогда подскажжите пожлйста как это сделать

Зашел тут в вашу веточку. У меня есть решение - я в обьекте размещаю указатель на обьект того же типа. Во время начальной инициализации я по всех своих обьектах создаю связи через эти указатели. Можно строить деревья, можно кольца. Например есть у нас обьект - страница меню. И есть кнопки вверх, вниз, вправо, влево... я в обьекте имею 4 указателя на другие страницы. В конструкторе пишем такое: nextPagePtr = this; Если нужен переход то при начальной инициализации в указатели прописываем другие страницы.
Если создать кольцо, то можно в простой процедурке допустим опрашивать разные spi слейвы не заморачиваясь с массивами и проверками на конец массива типа if(i > x) i = 0;


спасибо за совет, я так делал, сделал как вложенный объект и ставил в любые классы но памяти тратиться больше чем если через макросы делать, так что от этого варианта я отказался

и делал в двх вариантах, один для объектов одного класса и там только указатель, и вариант для цепей объектов разных классов, там ещё хранился адрес функции которая была для каждого класса своя, статическая, принимала адрес объекта, преобразовывала в адрес объекта своего класса и в нём вызывала интерфейсный метод, работает хорохо но память тратит ещё больше

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 12:37:20 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 20
Рейтинг сообщений: 648
Зарегистрирован: Пт май 31, 2013 17:14:38
Сообщений: 2081
Откуда: Украина, Винница
Рейтинг сообщения: 0
сделал как вложенный объект

ну вложенные объекты это не совсем то что я делал. Вы создавали в классе 1 переменные типа класс 2. Я в классе 1 создавал указатель на объект класса 1. У меня оперативка расходовалась на указатель - 1 указатель = +2 байта оперативки. Ну в общем ситуация такова, что если хотим упростить себе работу, то теряем оперативку. Если оперативки мало, то тогда приходится ручками больше писать - тогда уже флеш расходуется. Обычно оперативки у меня 2-4кб, а флеша 32-64кб. Вот и ищу золотую середину.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 15:15:38 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
спасибо за совет, я так делал, сделал как вложенный объект и ставил в любые классы но памяти тратиться больше чем если через макросы

Если занудствовать, то буквально следуя общепринятой терминологии, "вложенный" объект целиком помещается в объекте, который его включает. Что, согласитесь, слабо напоминает подразумеваемые выше связные списки. Как-то у нас не получается даже сформулировать задачу под которую вы хотите свой код плюсами отрефакторить. :-( Тёмный лес и только волки по кустам с непонятными намерениями шебуршатъ ... :-) Озвучьте "ТЗ" хотя-бы.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 17:41:29 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
а никто не говорит что у этого дела есть какая-то конкретная цель. Необходимость цели это миф, художественная выдумка если хотите, главное делать, делать много и по крупному, на плюсах.

Добавлено after 19 minutes 54 seconds:
Еще ни разу не сталкивался с публичными проектами, где применение С++ было бы действительно ... ерундой, стараясь решать простые задачи сложными методами.
Лучше и не скажешь.

У меня промышленная техника с прошивками на си++ на аврках, с военной приёмкой, тоесть по вашей логике, даже если я неправильно выбрал язык кто нибудь потом посмотрит и скажет "я видел какие то там аппараты с прошивками на си++, с военной приёмкой и чем то ещё значит так нужно", но это же не так.

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Вт ноя 14, 2017 20:42:28 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
художественная выдумка если хотите, главное делать, делать много и по крупному, на плюсах.

не, выдумку не хотим, знаний хотим, мето́ду хотим с "маркосами" по "вложенным" "объектам" посмотреть-пообсуждать, что рвёт связаные списки как ворона попугая. А по-крупному мы и сами умеем, на 4 гигах-то много ума не надоть.
[заманушливо так] На шаблоны, кстати, не смотрели со своим AVR-ом? ;-)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 08:32:36 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
шаблоны макросами и создаю, на днях постараюсь показать

Добавлено after 3 minutes 37 seconds:
... на 4 гигах-то много ума не надоть...


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

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 18:12:48 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
шаблоны макросами и создаю, на днях постараюсь показать

Я имел ввиду шаблоны не те, которые #define, а те, что template<typename ... >. Последние, кроме как размягчать и клинить [в частности мои] мозги при попытке их осмысления иногда "таки, да" могут приходиться весьма кстати.

зачем же вы так передёргиваете и искажаете смысл сказанного мной выше, для разных задач разное железо

Прошу простить великодушно, сентенция самоиронизировала над моими замечаниями про взгляд на мир человека с навесным SDRAM-ом, кой существенно отличается от взгляда располагающего штатными сиротскими килобайтами на всё про всё. И никак не с целью "победить" вас любой ценой.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 18:45:58 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
Я имел ввиду шаблоны не те, которые #define, а те, что template<typename ... >. Последние, кроме как размягчать и клинить [в частности мои] мозги при попытке их осмысления иногда "таки, да" могут приходиться весьма кстати.


#define - макрос
template - шаблон
именно это я и имел ввиду

Прошу простить великодушно, сентенция самоиронизировала над моими замечаниями про взгляд на мир человека с навесным SDRAM-ом, кой существенно отличается от взгляда располагающего штатными сиротскими килобайтами на всё про всё. И никак не с целью "победить" вас любой ценой.


"человек с навесным SDRAM-ом", где он нависает у него? )

Не понял про "победить", я и под ПК с виндой пишу. Как правило в моих проектах есть "верх" и "низ", тоесть ПК и куча мк

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 21:50:52 
Встал на лапы
Аватар пользователя

Карма: 4
Рейтинг сообщений: 41
Зарегистрирован: Сб дек 24, 2011 12:39:03
Сообщений: 134
Рейтинг сообщения: 0
Лучше объясните - на кой чёрт этот замороч с плюсами: классы, наследники, инкапсуляция методов, полиморфизм и прочий бред? Почему нельзя написать просто на си?

_________________
Вышел из себя.
Пришел в себя.
Ушел в себя.
И решил больше сегодня никуда не ходить


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 22:11:49 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
сейчас попробую намутить пример

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 22:12:49 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 0
Лучше объясните - на кой чёрт этот замороч с плюсами: классы, наследники, инкапсуляция методов, полиморфизм и прочий бред? Почему нельзя написать просто на си?

Очевидно же, плюсы просто лучше. Даже если на них писать практически как на С, все равно добавляется множество мелких улучшений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 22:23:16 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
Очевидно же, плюсы просто лучше. Даже если на них писать практически как на С, все равно добавляется множество мелких улучшений.




createpad(HC595_CLK, C,0);
createpad(HC595_DATA, C,1);
createpad(HC595_LOAD, C,2);

volatile void HC595(unsigned char output_data)
{
unsigned char i = 0;

for( i = 0 ; i<8 ; i++ )
{
HC595_DATA( _write , tst_ram_flag( output_data , i ) );
HC595_CLK( _write , _L );
HC595_CLK( _write , _H );
};

HC595_LOAD( _write , _L );
HC595_LOAD( _write , _H );

return;
}

unsigned char count = 0;

thread
(
HC595_thread,
1,
,
{
HC595( ++count == 255 ? ({ count = 0; 255; }) : count );
PORTA = count;
};
);

int main(void)
{
cli();
adc_calibration_state=2;
inition;
sei();

while(1)
{
system;
}
}



////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

bool sin_vH;
bool pwm_abel_request;
bool pwm_abel_status;
bool pwm_request;
bool pwm_status;

_param(param_access::no,pwm_en,on,_p_var(off););
_param(param_access::no,pwm_state,on,_p_var(off););

#define LCD_RS 1


long temp_voltage = 0;
_expresion(float,voltage,0.0);
_expresion(float,F_voltage,0.0);

long temp_current = 0;
_expresion(float,F_current,0.0);

float F_voltage_medin_buffer=0.0;
_expresion(float,F_voltage_medin,0.0);

float F_current_medin_buffer=0.0;
_expresion(float,F_current_medin,0.0);

unsigned char f_vcm_counter=0;

_expresion(float,power,0.0);

_expresion(unsigned char,f_source,0);
_flash_text_array(f_source_txt,f_source,{ fta(0,"USER"); fta(1,"CALC"); });

const unsigned int user_min_f = 2000;
const unsigned int user_max_f = 20000;

_volume(unsigned int,start_f,user_max_f);

_volume(unsigned int,frequnce_tune_step,20);

_expresion(unsigned int,user_f,0);
_expresion(unsigned int,calc_f,0);
_expresion(unsigned int,work_f,0);

unsigned int last_work_f=0;

inline void f_init()
{
user_f = start_f.eep();
calc_f = start_f.eep();
work_f = start_f.eep();
return;
};

_volume( float,power_hysteresis_level, 10.0);
_expresion( float,power_handler, 0.0);

_volume(float, user_q,50);
_volume(unsigned int, t_work,50);
_volume(unsigned int, t_pause,50);
inline void t_pause_q_calc(){t_pause=(unsigned int)(((float)t_work.ram())/10.0+((float)t_work.ram())*(100.0/user_q.ram()-1.0));return;}
inline void t_pause_q_init(){t_pause_q_calc();call_line(save);global_data_change=0;return;}

_volume(unsigned long,t1,1000);
_volume(unsigned long,t2,1000);
_volume(unsigned long,t3,1000);
_volume(unsigned long,t4,1000);
_volume(unsigned long,t5,1000);

create_adc(sens_v,0,aaa,1);
create_adc(sens_c,1,aaa,1);
createpad( v_cap_reset_extern_call,A,2);
createpad(shutdown_out,A,3);
create_adc(sens_w,5,aaa,20);
createpad(pl1,A,6);
createpad(pl2,A,7);
createpad( v_cap_reset,B,7);

createpad(d4p,B,0);
createpad(d5p,B,1);
createpad(d6p,B,2);
createpad(d7p,B,3);
createpad(enp,B,4);
createpad(rwp,B,5);
createpad(rsp,B,6);

createpad( Q6,C,4);
createpad( Q5,C,3);
createpad( Q4,C,2);
createpad( Q3,C,1);
createpad( Q2,C,0);
createpad( Q1,D,7);
createpad(relay_led,D,4);
createpad(pwm_led,D,6);

#define main_interface_draw_thread_input_block \
input(shutdown_external_request, A,4,true,0);\
input(_external_calibration_mode, D,0,true,0);\
input(_up, D,1,true,0);\
input(_right, D,2,true,0);\
input(_pwm_switcher, D,3,true,0);\
input(_relay_switcher,D,5,true,0);\
input(_centr, C,5,true,0);\
input(_down, C,6,true,0);\
input(_left, C,7,true,0);\

create_flag(qprog_request);
create_flag(qprog_abel_request);
create_flag(qprog_abel_status);
create_flag(qshutdown_request);
create_flag(qshutdown_ready);
unsigned char qvar=0;
unsigned char qsvar=0;
inline void qprogcall(){_set_flag(qprog_request);return;}
create_timer(qtimer,qprogcall,0);
inline void qtimer_init(){qtimer.time=10;return;}

inline void q_disable_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_L);Q6(_write,_L);return;}

inline void work_t1_prog(){ /*Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_H);Q5(_write,_H);Q6(_write,_H);*/return;}
inline void work_t2_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_H);Q6(_write,_H);return;}
inline void work_t3_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_H);Q4(_write,_L);Q5(_write,_H);Q6(_write,_H);return;}
inline void work_t4_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_H);Q4(_write,_L);Q5(_write,_H);Q6(_write,_L);return;}

inline void shutdown_t1_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_H);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t2_prog(){ Q1(_write,_H);Q2(_write,_L);Q3(_write,_L);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t3_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_H);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t4_prog(){ Q1(_write,_L);Q2(_write,_L);Q3(_write,_H);Q4(_write,_L);Q5(_write,_L);Q6(_write,_H);return;}
inline void shutdown_t5_prog(){ Q1(_write,_L);Q2(_write,_H);Q3(_write,_L);Q4(_write,_H);Q5(_write,_L);Q6(_write,_L);return;}

inline void qprog_process()
{
if(_tst_flag(qprog_request))
{
_clr_flag(qprog_request);
if(_tst_flag(qprog_abel_request))
{
_set_flag(qprog_abel_status);
}
else
{
_clr_flag(qprog_abel_status);
}

if(_tst_flag(qprog_abel_status))
{
relay_led(_write,_H);
if(_tst_flag(qshutdown_request))
{
switch(qsvar)
{
case 0:{qtimer.time=t1.eep();shutdown_t1_prog();qsvar=1;break;}
case 1:{qtimer.time=t2.eep();shutdown_t2_prog();qsvar=2;break;}
case 2:{qtimer.time=t3.eep();shutdown_t3_prog();qsvar=3;break;}
case 3:{qtimer.time=t4.eep();shutdown_t4_prog();qsvar=4;break;}
case 4:{qtimer.time=t5.eep();shutdown_t5_prog();qsvar=5;break;}
case 5:{_set_flag(qshutdown_ready);break;}
}
}
else
{
switch(qvar)
{
case 0:{qtimer.time=t1.eep();work_t1_prog();qvar=1;break;}
case 1:{qtimer.time=t2.eep();work_t2_prog();qvar=2;break;}
case 2:{qtimer.time=t3.eep();work_t3_prog();qvar=3;break;}
case 3:{qtimer.time=t4.eep();work_t4_prog();qvar=4;break;}
case 4:{qtimer.time=t1.eep();work_t1_prog();qvar=1;break;}
}
}
}
else
{
qtimer.time=5; relay_led(_write,_L); q_disable_prog(); if(_tst_flag(qshutdown_request))_set_flag(qshutdown_ready);
}
}
return;
};
unsigned char v_cap_charging_pause=0;

void lcd_port_output2(unsigned char data)
{
rsp(_write,getbit(data,0));
rwp(_write,getbit(data,1));
d4p(_write,getbit(data,4));
d5p(_write,getbit(data,5));
d6p(_write,getbit(data,6));
d7p(_write,getbit(data,7));
enp(_write,1);_delay_us(200);
enp(_write,0);_delay_us(200);
return;
}

void lcd_reset(void) { lcd_port_output2(0xFF); lcd_port_output2(0x30); lcd_port_output2(0x30); lcd_port_output2(0x30); lcd_port_output2(0x20); return; }
void lcd_cmd(char cmd) { lcd_port_output2(cmd & 0xF0); lcd_port_output2((cmd << 4) & 0xF0); return; }
void lcd_init (void) { lcd_reset(); lcd_cmd(0x28); lcd_cmd(0x0C); lcd_cmd(0x06); lcd_cmd(0x80); return; }
void lcd_data(unsigned char dat) { lcd_port_output2((dat & 0xF0)|LCD_RS); lcd_port_output2(((dat << 4) & 0xF0)|LCD_RS); return;}

unsigned char lcd16x2( char*buffer,char*canvas,unsigned char x_size,unsigned char n )
{
char s=0;
if( (s=buffer[n]) != canvas[n] ) {canvas[n]=s; lcd_cmd(0x80+n);lcd_data(s);};
if( (s=buffer[n+16]) != canvas[n+16] ) {canvas[n+16]=s; lcd_cmd(0xc0+n);lcd_data(s);};
if(n<x_size-1)n++; else n=0;
return n;
}

template<unsigned char x_size,unsigned char y_size>class lcd_display
{
public:
const static unsigned int canvas_size=x_size*y_size;
char*buffer;
char canvas[canvas_size];
unsigned char n;
const unsigned int format=x_size*100+y_size;

lcd_display(char*set_buffer)
{
buffer = set_buffer;
n = 0;
for(unsigned char i = 0;i<canvas_size;i++)canvas[i]=0;
}
void layout()
{
switch(format)
{
case 1602:{n=lcd16x2(buffer,canvas,x_size,n);break;}
};
return;
};
};
inline void pwm_timer_callback();

create_timer(pwm_work_timer,pwm_timer_callback,0);

inline void pwm_timer_callback()
{
if(pwm_en.on())
{
pwm_en.set_off();
pwm_work_timer.time = t_pause.eep();
}
else
{
pwm_en.set_on();
pwm_work_timer.time = t_work.eep();
}
return;
}

inline volatile void PWM_release()
{
static unsigned char pwm_var = 0;

if( pwm_en.on() ) switch(pwm_var)
{
case 1:{ pwm_var=0; pl2(_write,_L);pl1(_write,_H); break;}
case 0:{ pwm_var=1; pl1(_write,_L);pl2(_write,_H); break;}
}
else
{
pl2(_write,_L);pl1(_write,_L);
}
return;
}

create_line_point(second_fst,_pwm_release,PWM_release(););

inline void relay_process_init(){if(v_cap_reset_extern_call(_read,_H)!=0)sin_vH=true;else sin_vH=false;return;}

inline void relay_process()
{

if( sin_vH )
{
if(v_cap_reset_extern_call(_read,_H)==0) { sin_vH = false; qprog_process(); }
}
else
{
if(v_cap_reset_extern_call(_read,_H)!=0) { sin_vH = true; qprog_process(); }
}

return;
}


unsigned char ps=0;
thread(tick_thread,1,,{v_cap_charging_pause++; ps++;});
thread(scan_thread,2,,{call_line(scan);});

enum
{
list_win,
control_win,
work_programm_win,
relay_win
};

void main_save_interface();

unsigned char main_menu(unsigned char page);
unsigned char work(unsigned char);
window(main_window,main_menu,control_win,16,2,10,main_save_interface,work);

lcd_display<16,2> main_lcd_display(main_window.local_buffer);

thread(main_interface_layout_thread,3,, { main_lcd_display.layout(); } );

thread(main_interface_draw_thread,40,
main_interface_draw_thread_input_block
,
{
adc_status_request = adc_work;
call_line(display_use);
if( adc_status_request == adc_calibration ) adc_status=adc_calibration; else adc_status=adc_work;
}
);

void main_save_interface()
{
emsg( main_window, save_interfacing, 1,
if(_left.click()) window_core::left_cursor();
if(_right.click()) window_core::right_cursor();
tf("YES", 0, 2,0,0,1,left)
{
if(_centr.click())
{
call_line(save);
ems_esc=true;
};
};
tf("SAVE?", 6,10,0,0,0,left);
tf("NO", 14,15,0,0,1,right)
{
if(_centr.click())
{
call_line(init);
ems_esc=true;
}
};
);
return;
}
bool shutdown_request=false;
inline void shutdown_process()
{
_set_flag(qshutdown_request);
if(_tst_flag(qshutdown_ready)) { shutdown_out(_write,_H); while(1); }
return;
}

inline unsigned char work(unsigned char page)
{
if(_pwm_switcher.click())
{
if(pwm_en.off())
{
pwm_en.set_on();
pwm_work_timer.time = t_work.eep();
pwm_work_timer.wake();
pwm_led(_write,_H);
}
else
{
pwm_en.set_off();
pwm_work_timer.slep();
pwm_led(_write,_L);
};
};

if(_relay_switcher.click()) _inv_flag(qprog_abel_request);

if(shutdown_external_request.click()){relay_led(_write,_H); shutdown_request=true;}

if(shutdown_request)shutdown_process();

return page;
}

unsigned char main_menu(unsigned char page)
{
switch(page)
{
case list_win:
{
window_core::set_zdepth(1);
window_core::storing_page_position(memory<list_win,4>());
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);

window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);

tf(" Control", 0,15,0,0,1,left){if( _centr.click() ) page = control_win; };
tf(" Config", 0,15,1,0,1,left){if( _centr.click() ) page = work_programm_win; };
tf(" Relay", 0,15,2,0,1,left){if( _centr.click() ) page = relay_win; };

break;
};
case control_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::set_field_absolute_style();
window_core::cursor_set_flash_state( 0 );

if( _centr.click() ) page = list_win;

if(_up.click())f_source=0;
if(_down.click())f_source=1;
if(f_source.ram()==0)user_f=conf<unsigned int>(user_f.ram(), (unsigned int)1560, (unsigned int)2000, (unsigned int)20000, _right.click(), _left.click());
tf(power_handler, 0, 3,0,0,0,left);
tf(power, 0, 3,1,0,0,left);
tf(f_source_txt, 5,10,0,0,0,left);
tf(work_f, 5,10,1,0,0,left);
tf(F_voltage_medin, 11,15,0,0,0,left);
tf(F_current_medin, 11,15,1,2,0,left);

break;
};
case work_programm_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);
if( _centr.click() ) page = list_win;

tf(" Quality", 0, 9,0,0,1,left){ user_q=conf<float>(user_q.ram(), 5, 5, 100,_right.click(),_left.click()); t_pause_q_calc(); };
tf(user_q, 11,15,0,0,0,right);
tf(" Pause Time ms", 0, 9,1,0,1,left);{ t_pause=conf<unsigned int>(t_pause.ram(), 7, 5, 60,_right.click(),_left.click()); if(global_data_change==0)global_data_change=1; };
tf(t_pause, 11,15,1,0,0,right);
tf(" Work Time ms", 0, 9,2,0,1,left){ t_work=conf<unsigned int>(t_work.ram(), 7, 5, 60,_right.click(),_left.click()); t_pause_q_calc(); };
tf(t_work, 11,15,2,0,0,right);
tf(" P hysteresis", 0, 9,3,0,1,left){ power_hysteresis_level=conf<float>(power_hysteresis_level.ram(), 5.0, 5.0, 200.0,_right.click(),_left.click()); };
tf(power_hysteresis_level, 11,15,3,0,0,right);
tf(" F step", 0, 9,4,0,1,left){ frequnce_tune_step=conf<unsigned int>(frequnce_tune_step.ram(), 50, 0, 2000,_right.click(),_left.click()); };
tf(frequnce_tune_step, 11,15,4,0,0,right);
tf(" F start", 0, 9,5,0,1,left){ start_f=conf<unsigned int>(start_f.ram(), 50, user_min_f, user_max_f,_right.click(),_left.click()); };
tf(start_f, 11,15,5,0,0,right);
break;
};
case relay_win:
{
window_core::set_zdepth(0);
window_core::set_content_dimentions(0,0,window_core::x_win_size,window_core::y_win_size);
window_core::window_list_style();
if( _up.click() ) window_core::up_window(1);
if( _down.click() ) window_core::down_window(1);
if( _centr.click() ) page = list_win;

tf(" Time 1", 0, 9,0,0,1,left){ t1=conf<unsigned long>(t1.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t1, 11,15,0,0,0,right);
tf(" Time 2", 0, 9,1,0,1,left){ t2=conf<unsigned long>(t2.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t2, 11,15,1,0,0,right);
tf(" Time 3", 0, 9,2,0,1,left){ t3=conf<unsigned long>(t3.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t3, 11,15,2,0,0,right);
tf(" Time 4", 0, 9,3,0,1,left){ t4=conf<unsigned long>(t4.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t4, 11,15,3,0,0,right);
tf(" Time 5", 0, 9,4,0,1,left){ t5=conf<unsigned long>(t5.ram(), 1000, 1000, 100000,_right.click(),_left.click()); };
tf(t5, 11,15,4,0,0,right);
break;
};
};
return page;
};

bool ready_cv =false;
unsigned char var2=0;
const float vcc = 5.0;
const float adc_lim = 1024.0;
const float adc_smoos_level = 1.0;
const float diod_drop_v = 0.42;
const float c_schem_base = 2.28;
const float c_orig_max = 20.0;
const float c_schem_equal_max = 2.0;
const float c_schem_calib_base = 0.0;
const float c_schem_calib_angle = 1.0;
const float v_schem_base = 2.5;
const float v_orig_max = 311.12;
const float v_schem_equal_max = 1.92;
const float v_schem_calib_base = 0.0;
const float v_schem_calib_angle = 0.972;
bool access_w=false;
void calc()
{
bool ready_v = sens_v.ready(),ready_c = sens_c.ready(),ready_w = sens_w.ready();
if(ready_w){access_w=true; power_handler = sens_w.readbyte()*2000.0*5.0/1024.0/20.0/5.0;}

if(ready_c && ready_v) ready_cv=true;

if( ( ready_c || ready_v ) && ready_cv)
{
switch(var2)
{
case 10:
{
if(ready_v && ready_c)
{
temp_voltage = sens_v.readbyte(); temp_current = sens_c.readbyte();
float tv = (float)temp_voltage*vcc/(adc_lim*adc_smoos_level) + diod_drop_v - v_schem_base; if(tv<0.0)tv=0.0;
float tc = (float)temp_current*vcc/(adc_lim*adc_smoos_level)-2.2; if(tc<0.0)tc=0.0;

F_voltage = (((tv*v_orig_max/v_schem_equal_max))*v_schem_calib_angle)*0.707106+v_schem_calib_base;
F_current = ((6.0*tc/(3.575-2.2))+0.08)*0.94;

power = F_voltage.ram()*F_current.ram();

if(access_w)
{
float delta=power.ram()-power_handler.ram();
if( delta > power_hysteresis_level.eep() )
{
if(calc_f.ram()<user_max_f) calc_f=calc_f.ram()+frequnce_tune_step.eep();
}
else
{
if( (delta*(-1.0)) > power_hysteresis_level.eep() )
{
if(calc_f.ram()>user_min_f) calc_f = calc_f.ram()-frequnce_tune_step.eep();
if(calc_f.ram()<user_min_f) calc_f = user_min_f;
}
}
}
if(f_source.ram()==0)work_f = user_f.ram(); if(f_source.ram()==1)work_f = calc_f.ram();

if(work_f.ram()!=last_work_f){last_work_f=work_f.ram();timer1_steps_to_do_exesys_from_frequence(work_f.ram());}

var2 = 0;
}
break;
}
case 0: { if(v_cap_reset_extern_call(_read,_H)==0){var2=2;v_cap_reset(_write,_H);ps=0;} break; }
case 2: { if(ps>0){var2=4;v_cap_reset(_write,_L);}break;}
case 4: { if(v_cap_reset_extern_call(_read,_H)!=0){var2=5;v_cap_charging_pause=0;}break;}
case 5: { if(v_cap_charging_pause>24){ sens_v.readbyte();sens_c.readbyte(); var2=10;}break;}
}
}
f_vcm_counter++;
F_voltage_medin_buffer=F_voltage.ram()+F_voltage_medin_buffer;
F_current_medin_buffer=F_current.ram()+F_current_medin_buffer;
if(f_vcm_counter>250)
{
f_vcm_counter=0;
F_voltage_medin=F_voltage_medin_buffer*0.004;F_voltage_medin_buffer=0.0;
F_current_medin=F_current_medin_buffer*0.004;F_current_medin_buffer=0.0;
}

return;
}
thread(calc_thread,2,,{ calc(); });

int main(void)
{
cli();
setbit(sh_cp,sh_cp_pin,1);
setbit(st_cp,st_cp_pin,0);
setbit(ddr_sh_cp,sh_cp_pin,1);
setbit(ddr_st_cp,st_cp_pin,1);
setbit(ddr_ds, ds_pin, 1);
DDRA=0b00000000;
PORTA=0b00000000;
DDRB=0b11111111;
DDRD=0b11111110;
adc_calibration_state=2;
//call_line(init);
t_pause_q_init();
f_init();
relay_process_init();
qtimer_init();
lcd_init();
pwm_en.set_off();
pwm_work_timer.slep();
//timer0_init();
//timer1_init();
//call_line(system_init);
//call_line(init);
//call_line(system_interrupt_init_fast_access);
timer1_steps_to_do_exesys_from_frequence(1000);
inition;
sei();

sens_c.enable();
sens_v.enable();
sens_w.enable();
while(1)
{
system;
adc_entering_point;
relay_process();
}
}

Добавлено after 7 minutes 50 seconds:
сишники не прочтут


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

const unsigned int adc_pos_in_smooth = 50;
create_adc(adc_pos_in,2,aaa,adc_pos_in_smooth);

createpad(ap,B,5);
createpad(am,A,3);
createpad(bp,B,7);
createpad(bm,A,4);
createpad(h_pwm,B,6);

#ifdef __y_axis
#define DCmotor_template DCmotor3
#else
#define DCmotor_template DCmotor2
#endif

DCmotor_template<ap,am,bp,bm,h_pwm,
_external_pwm,
_external_pos,
_stopebal,
_power_limited_by_pos,
_auto_fix_en,
_forw_fix_at_stop,
_back_fix_at_stop,
_fix_by_dir_acc,
_tune_stay_velocity,
_ir_hesteresis,
_tune_ir_offset,
_tune_power_min,
_tune_power_max,
_tune_power_stb_min,
_tune_power_stb_max,
_tune_power_stb_back_min,
_tune_power_stb_back_max,
_tune_power_fix_at_stop,
_ready_feet,
_tune_top_settle_level,
_tune_bot_settle_level,
caret_stoper,
caret_stoper_power,
caret_reterner_pos,
forw_caret_reterner_power,
back_caret_reterner_power,
caret_reterner_velocity,
tune_power_slice,
tune_power_down,
_measuring_velocity_step_uM,
_power_by_velocity,
_tune_power_forw,
_tune_power_back,
_reversed,
_steped_targeting,
_stop_at_vibrating,
_vibrating_level,
_spetial_dir_acc_at_fix,
_vibrtion_power_limiter_en,
_returner_power_limiter_en,
_target_power_stab_append_en,

_fh_en,
_tune_fh,
_bh_en,
_tune_bh,

_vbr_acc,
_vbr_offtime_acc,
_tune_vbr_offtime_pwr_plus_acc,
_step_en,
_step_dis,
_st_pw_acc,
_unvbr_acc,
_vel_access,
_dir_access,
_fix_dir_access,
_timer_to_fix_dir_access,
_pow_access,
_stay_access,
_feel_stay_acc,

_end_switch_en,
_forw_switch_en,
_back_switch_en,
_forw_calibrate_standart,
_back_calibrate_standart,
_forw_end_switch_active_level,
_forw_end_switch_pull,
_forw_end_switch_pad,
_back_end_switch_active_level,
_back_end_switch_pull,
_back_end_switch_pad
>motor(true);

signed long int __temp = 0;

___B8B( bus,
a0, atmega32_dip40_pin26,
a1, atmega32_dip40_pin27,
a2, atmega32_dip40_pin28,
a3, atmega32_dip40_pin28,
d0, atmega32_dip40_pin20,
d1, atmega32_dip40_pin19,
d2, atmega32_dip40_pin18,
d3, atmega32_dip40_pin21,
d4, atmega32_dip40_pin22,
d5, atmega32_dip40_pin23,
d6, atmega32_dip40_pin24,
d7, atmega32_dip40_pin25,
mosi, atmega32_dip40_pin33,
miso, atmega32_dip40_pin34,
type, atmega32_dip40_pin35,
_address,
B8B_DEVICE_TYPE::slave,
_slave ( DCM_B8B_PORT::target , __temp is_signed_long_from_master; motor.new_target = __temp; motor.target_updated=true; motor.target_busy=true; PORTB|=1; )
_slave ( DCM_B8B_PORT::calibr , motor.standart_calibrate(); PORTB&=~1; )
,
_slave ( DCM_B8B_OUT::flags , B8B_slave_say ( motor.flags() ); motor.target_updated=false; )
//_slave ( DCM_B8B_OUT::flags , B8B_slave_say ( motor.flags()&~1 ); motor.target_updated=true; )
);

signed long int adc_byteresult_k = 2;//102 / adc_pos_in_smooth;

float adc_voltge_k = 2222.2222;

inline void ext_adc_pos()
{
if( adc_pos_in.ready() )
{
float temp = adc_pos_in.read();//напряжение
signed long int pos = (signed long int)( temp*adc_voltge_k );
motor.ir( pos );
}
return;
}


#ifndef __z_axis
createpad(encoder_a,D,2);createpad(encoder_b,D,3);encoder<encoder_a,encoder_b>pos_encoder(true);
//create_line_point(int0call,int0_le_,if( !_adc_pos ){ pos_encoder.int0f(); }; );
//create_line_point(int1call,int1_le_,if( !_adc_pos ){ pos_encoder.int1f(); }; );
create_line_point(int0call,int0_le_,if( !_adc_pos ){ pos_encoder.scan(); }; );
create_line_point(int1call,int1_le_,if( !_adc_pos ){ pos_encoder.scan(); }; );
#endif

create_line_point(system_loop, motor_run, motor.r2(); );
create_line_point(system_loop, adc_run, if( _adc_pos ){ ext_adc_pos(); });
create_line_point( main_fst, _pwm, motor.tick=true; motor.exesys_frequence = main_fst_frequence; );
create_line_point(second_fst, _pwm, motor.PWM(); );


thread(standart_system_thread_bus8_entering_point,2,, bus8_entering_point; );

void ir(signed long int pos){motor.ir(pos);return;}
void ir_(signed long int pos){return;}
int main(void)
{
cli();
//interrupt0disable();//не использовать с pos_encoder.scan();
//interrupt1disable();//не использовать с pos_encoder.scan();
#ifndef __z_axis
if( !_adc_pos )pos_encoder.ir=ir; else pos_encoder.ir=ir_;
#endif
DDRB|=2;
adc_calibration_state=1;
if( _adc_pos ) adc_pos_in.enable();
inition;
bus.set_address(_address);
sei();
while(1)
{
system;
}
}

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 22:33:46 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 253
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2090
Рейтинг сообщения: 1
сишники не прочтут

Если рекламируешь язык, нужно было подобрать маленький, но емкий пример, чтобы сишники прочли и подумали, что тоже так хотят, даже если не до конца понимают что там происходит :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 23:13:36 
Потрогал лапой паяльник
Аватар пользователя

Карма: -2
Рейтинг сообщений: 1
Зарегистрирован: Сб фев 18, 2012 14:50:22
Сообщений: 382
Рейтинг сообщения: 0
Если рекламируешь язык

Не рекламирую.

нужно было подобрать маленький, но емкий пример

Первый пример, другие скинуть не могу ввиду их актуальности в работе, аписать специально пример нет времени, но постараюсь.


чтобы сишники прочли и подумали, что тоже так хотят

Не захотят, кто захотел давно изучили и используют.


Про "сишники не поймут", это же просто подколка такая, хотя вы всё равно не поймёте.

Думаю читать никто и не станет, сделают как всегда, не прочтут не разберутся а просто напишут "всё нет, под мк правильно писать на си и всё тут", это уже дело пройденное.

Добавлено after 35 minutes 39 seconds:
Ivanoff-iv не поймёт пятую строку в третьем примере

_________________
я его в гугл на дрц прогнал, вы знаете, пи-када нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR на Си++
СообщениеДобавлено: Ср ноя 15, 2017 23:18:34 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
Код:
#ifdef __y_axis
   #define DCmotor_template DCmotor3
#else
   #define DCmotor_template DCmotor2
#endif

DCmotor_template<
   ap,
   am,
   bp,
   bm,
   h_pwm,
   _external_pwm,
   _external_pos,
[...]
   _back_end_switch_pull,
   _back_end_switch_pad>
motor(true);


[Надеясь, что ДЦМотор2 и ДЦМотор3 реальные шаблоны а не выхлоп препроцессора] Шаблоны ДЦМотор2 и ДЦМотор3 настолько абсолютно разные, что 2 и 3 не могли стать 78-ым параметром, позволив частично специализировать реально отличающийся функционал? Хотя, конечно, при списочном составе параметров количеством в пол-роты о специализации страшно и помышлять. Каждый из 77-и реально настолько вариативен, что заслужил честь быть в этом списке?
Шаблоны С++ они ведь как дети - как маленькие так классные и прикольные, но имеют тенденцию быстро расти, а уж как подрастают - превращаются в несносных, неуправляемых негодяев.

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 92 ]    , 2, , ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y