|
C++ и ООП для микроконтроллеров AVR |
|
|
|
 |
Ответов
|
May 11 2009, 14:46
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Цитата Объектно-ориентированные программы можно писать и без классов - даже на ассемблере. И так и делали, пока не появился более удобный для этого инструментарий. Конечно. Но для этого необходимо сделать какой-то унифицированный способ описания объектов. Аля класс. Т.е. "тип, описывающий устройство объектов". Не путайте класс-ключевое_слово_плюсов и класс-понятие_ООП(тип, описывающий устройство объектов). Цитата Поверьте, даже без ООП все эти перечисленные возможности Что-то разговор не о том. Топикстартер про использование ООП. А мы? И вообще, чего Вы на меня напали?  Прочтите топик, разве я где-то утверждал про накладные расходы? Разве я отговаривал топикстартера от ООП?
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
May 12 2009, 04:03
|

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

|
Цитата(Rst7 @ May 11 2009, 21:46)  И вообще, чего Вы на меня напали?  Прочтите топик, разве я где-то утверждал про накладные расходы? Разве я отговаривал топикстартера от ООП? Да, что вы, я совсем не напал.  И не на вас - т.е. посты-то ко всем адресованы. Просто мне показалось, что народ считает, что ООП - это любые С++'ные фишки. Вот и постарался внести ясность. За ООП, кстати, не агитирую - эта вещь хороша к месту, и пихать куда попало ее - наживать геморрой. А вот классы сами по себе штука универсальная, и их можно использовать практически без ограничений, в том числе и на AVR. (это тоже ко всем, не только к вам  ).
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 12 2009, 06:54
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(dxp @ May 12 2009, 08:03)  За ООП, кстати, не агитирую - эта вещь хороша к месту, и пихать куда попало ее - наживать геморрой. А вот классы сами по себе штука универсальная, и их можно использовать практически без ограничений, в том числе и на AVR. (это тоже ко всем, не только к вам  ). А я бы агитировал за ООП, в условиях корпоративной разработки проектов и их дальнейшего сопровождения альтернативы ООП ИМХО не вижу.
|
|
|
|
|
May 12 2009, 11:45
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(dxp @ May 12 2009, 15:31)  Возможно, вы имели в виду объектное программирование? Т.е. использование классов/объектов? Или именно ООП? Я именно имел в виду объектно-ориентированный подход к проетированию пограммы, конечно с использованием классов. Но классоы это лишь инструмент. Для меня в свое время это была настоящая ломка перейти к идеологии ООП (с С на С++), но это сугубо личные впечатления. У нас в конторе было чуть ли не табу на использование ++ и ООП для программирования МК, пока мы с напарником за почти два года на собственных примерах (проектах) не сломали этот стереотип.
|
|
|
|
|
May 12 2009, 13:40
|

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

|
Цитата(VladimirYU @ May 12 2009, 18:45)  Я именно имел в виду объектно-ориентированный подход к проетированию пограммы, конечно с использованием классов. Хм, интересно... Ну, а вот на примере, скажем. Вот пусть есть дивайс, который выполняет какие-то функции: измеряет температуру на объекте, управляет нагревательным элементом, опрашивает органы управления (кнопки, энкодер и т.п.), выводит соответствующую индикацию, общается с терминалом и т.д. Вот где тут применить ООП? Не, я понимаю, конечно, что "за уши" можно все притянуть - например, создать самый базовый класс TSomething, от него родить класс TInput, от которого родить классы TTempGauge, TButton, TEncoder, от TSomthing родить TOutput, от которого TIndicator и т.п. Но это как-то не выглядит адекватным и логичным, потому что нативной связи между всеми этими классами просто нет. И нет необходимости (да и возможности) рулить поведением объектов производных классов через интерфейс базового. Вот просто создать классы, описывающие составные функциональные части проекта, - это да, правильно и логично. Тут есть смысл, и это даст эффект. Только это не ООП, а объектный подход.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 12 2009, 18:53
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(dxp @ May 12 2009, 17:40)  Хм, интересно... Ну, а вот на примере, скажем. Вот пусть есть дивайс, который выполняет какие-то функции: измеряет температуру на объекте, управляет нагревательным элементом, опрашивает органы управления (кнопки, энкодер и т.п.), выводит соответствующую индикацию, общается с терминалом и т.д. Вот где тут применить ООП? Не, я понимаю, конечно, что "за уши" можно все притянуть - например, создать самый базовый класс TSomething, от него родить класс Ну на AVR конечно не просто, хотя... Но вот на Sam7 OOП легко... Допустим "главный" обмен данными ведется через протокол Modbus. Ну и есть 1,2,3 Uart 1 USB(CDC, типа виртуальный USB-485 переходник прямо в девайсе) 1,2 CAN(мост Modbus <-> CAN) У меня есть структура ModbusInterface и есть наследуемуе от нее структуры UsbInterface, Rs485Interface, итд... В ModbusInterfect определена общая для всех интерфейсов функциональность, все остальное делается через общие процедуры SendMessage(), ReceiveMessage(), итд Так же каждый объект может быть мастером или слейвом. Для всех интерфейсов общая функция таймаута на интерфейсах... Это ООП ? Но оно фсе написанно на чистом С...
|
|
|
|
|
May 13 2009, 03:24
|

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

|
Цитата(singlskv @ May 13 2009, 01:53)  У меня есть структура ModbusInterface и есть наследуемуе от нее структуры UsbInterface, Rs485Interface, итд... В ModbusInterfect определена общая для всех интерфейсов функциональность, все остальное делается через общие процедуры SendMessage(), ReceiveMessage(), итд Так же каждый объект может быть мастером или слейвом. Для всех интерфейсов общая функция таймаута на интерфейсах... Это ООП ? Но оно фсе написанно на чистом С...  SendMessage(), ReceiveMessage() где определены? И если в ModbusInterface, то как реализовна подмена? И как выполняется наследование на чистом С?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 13 2009, 04:32
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(dxp @ May 13 2009, 07:24)  SendMessage(), ReceiveMessage() где определены? И если в ModbusInterface, то как реализовна подмена? Определены в ModbusInterface как указатели на функции. Подмена в момент инициализации объекта. Цитата И как выполняется наследование на чистом С? Первое поле в структуре потомка ModbusInterface, дальше свои оригинальные поля ну и приведение типа в функциях ModbusTimeot, ModbusAutomat, итд...
|
|
|
|
|
May 13 2009, 05:11
|

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

|
Цитата(singlskv @ May 13 2009, 10:32)  Определены в ModbusInterface как указатели на функции. Подмена в момент инициализации объекта.
Первое поле в структуре потомка ModbusInterface, дальше свои оригинальные поля ну и приведение типа в функциях ModbusTimeot, ModbusAutomat, итд... Ну да, в таком виде похоже на ООП.  Только это "закат Солнца вручную".  Почему бы не использовать для этого более адекватные средства - писанины меньше, места для ошибок меньше, наглядности и элегантности больше. Тем более, что эти средства имеются под рукой в полном объеме.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
May 13 2009, 05:39
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(dxp @ May 13 2009, 09:11)  Ну да, в таком виде похоже на ООП.  Только это "закат Солнца вручную".  Почему бы не использовать для этого более адекватные средства - писанины меньше, места для ошибок меньше, наглядности и элегантности больше. Тем более, что эти средства имеются под рукой в полном объеме. Просто довольно большой проект в котором ООП имеет смысл всего лишь в 2-3 местах, часть кода моя часть других программистов, все написано на С, мешать С с плюсами не хотелось. Да и писанины не многим больше чем в плюсах, на самом OO подходе уже большая экономия для этой части. А что касаемо ошибок, дык приведение типов всего один раз на функцию, а в остальном от плюсов мало в чем отличие.
|
|
|
|
Сообщений в этой теме
n_bogoyavlensky C++ и ООП для микроконтроллеров AVR May 10 2009, 06:21 Tcom Нравиться пишите на С++ для AVR. May 10 2009, 07:06 tAmega Смотря какой AVR, если 8 битные модели, то ООП это... May 10 2009, 07:11 Rst7 Цитатаи программировать на нем конечно можно, но п... May 10 2009, 07:44 tAmega Видел код на C++ для AVR, нашел единственное объя... May 10 2009, 09:01 Rst7 Цитатанашел единственное объяснение, для чего там ... May 10 2009, 09:10 DpInRock Программирование в ООП обычно требует динамическог... May 10 2009, 10:56 SasaVitebsk Цитата(DpInRock @ May 10 2009, 13:56) Про... May 11 2009, 21:38 Rst7 ЦитатаПрограммирование в ООП обычно требует динами... May 10 2009, 11:13 kurtis ЦитатаНикакого отношения динамическое выделение па... May 10 2009, 11:29 _Pasha Цитата(kurtis @ May 10 2009, 14:29) С++ ... May 10 2009, 12:29 Rst7 ЦитатаДык если взять STL
STL - это всего лишь удо... May 10 2009, 11:46 researcher Об ООП хорошо думаю , но в AVR ООП тесно.
Какая не... May 10 2009, 12:45 DpInRock ОП имеет смысл когда есть что наследовать и есть к... May 10 2009, 13:07 haker_fox Цитата(DpInRock @ May 10 2009, 22:07) ОП ... May 11 2009, 00:04 demiurg_spb Цитата(DpInRock @ May 10 2009, 17:07) А т... May 11 2009, 11:13 Rst7 ЦитатаВообще, как Вы можете говорить после этого о... May 11 2009, 07:23 dxp Мущщины! Вы бы сначала определились в терминах... May 11 2009, 09:29 Herz Цитата(dxp @ May 11 2009, 11:29) Мущщины... May 11 2009, 10:47 n_bogoyavlensky Цитата(dxp @ May 11 2009, 13:29) Мущщины... May 12 2009, 18:24  _Pasha Цитата(n_bogoyavlensky @ May 12 2009, 21... May 12 2009, 18:34   777777 Цитата(_Pasha @ May 12 2009, 22:34) Приех... May 13 2009, 04:00 Rst7 Цитатаклассы С++ как таковые - не ООП;
Как это? К... May 11 2009, 09:35 Непомнящий Евгений Цитата(Rst7 @ May 11 2009, 13:35) Как это... May 11 2009, 10:35 dxp Цитата(Rst7 @ May 11 2009, 16:35) Как это... May 11 2009, 11:12  megajohn Цитата(dxp @ May 11 2009, 19:22) ... кото... May 19 2014, 05:02   msalov Цитата(megajohn @ May 19 2014, 12:12) и п... May 19 2014, 05:12   Сергей Борщ Цитата(megajohn @ May 19 2014, 12:12) и п... May 19 2014, 05:14 Rst7 ЦитатаООП - это программирование, когда программа ... May 11 2009, 10:57 Rst7 ЦитатаКласс - это тип, определяемый пользователем.... May 11 2009, 11:52 dxp Цитата(Rst7 @ May 11 2009, 18:52) Я утвер... May 11 2009, 13:58           dxp Цитата(singlskv @ May 13 2009, 12:39) А ч... May 13 2009, 06:26            singlskv Цитата(dxp @ May 13 2009, 10:26) Еще забы... May 13 2009, 15:41 Rst7 Цитатав условиях корпоративной разработки проектов... May 12 2009, 07:00 yanvasiij Люди, поднял тему в связи с глубокой заинтересован... May 19 2014, 00:34 andrewlekar Во-первых, ООП вы напрасно определяете через терми... May 19 2014, 01:22 yanvasiij Цитата(andrewlekar @ May 19 2014, 11:32) ... May 19 2014, 02:23 doom13 Цитата(yanvasiij @ May 19 2014, 09:33) А ... May 19 2014, 03:12 kolobok0 Цитата(yanvasiij @ May 19 2014, 10:33) Сп... May 19 2014, 14:23 andrewlekar В scmRTOS посмотрите как обработчики сделаны. У ме... May 19 2014, 02:50 yanvasiij Цитата(andrewlekar @ May 19 2014, 13:00) ... May 19 2014, 04:05 doom13 Цитата(yanvasiij @ May 19 2014, 11:15) Не... May 19 2014, 04:58  Сергей Борщ Цитата(doom13 @ May 19 2014, 12:08) Ваши ... May 19 2014, 05:09   doom13 Цитата(Сергей Борщ @ May 19 2014, 12:19) ... May 19 2014, 06:03    Сергей Борщ Цитата(doom13 @ May 19 2014, 13:13) В так... May 19 2014, 07:48     doom13 Цитата(Сергей Борщ @ May 19 2014, 14:58) ... May 19 2014, 08:36      Сергей Борщ Цитата(doom13 @ May 19 2014, 15:46) Допус... May 19 2014, 09:01       doom13 Цитата(Сергей Борщ @ May 19 2014, 16:11) ... May 19 2014, 09:17        megajohn Цитата(doom13 @ May 19 2014, 17:27) Все п... May 19 2014, 09:25        Сергей Борщ Цитата(doom13 @ May 19 2014, 16:27) Все п... May 19 2014, 11:08 andrewlekar Цитатаможно ли объявлять объект - не создавать его... May 19 2014, 04:25 A. Fig Lee На маленьких задачах преимущества C++ не очевидны.... May 19 2014, 17:19 yanvasiij megajohn doom13 andrewlekar Сергей Борщ msalov Спа... May 20 2014, 00:22 yanvasiij - May 20 2014, 00:22 juvf смешали всё.
Ну во первых в avr-gcc от winavr не... May 21 2014, 23:22 andrewlekar В C99 тоже можно переменную непосредственно перед ... May 21 2014, 23:45 juvf ЦитатаСсылки полностью перекрываются указателямине... May 21 2014, 23:52
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|