реклама на сайте
подробности

 
 
> Как писать на С++ при создание приложений под ARM, Примеры
Hellper
сообщение Jun 18 2011, 20:15
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 13-08-07
Из: Санкт-Петербург
Пользователь №: 29 745



Посоветуйте примеры использование С++ при создание программ под архитектуру ARM микроконтроллеров. Такие примеры, чтобы показывали удобство и силу использование ООП, и тянуло сразу садится, вникать и кодить.
спасибо
пс желательно под компилятор от keil-а или gcc

ПС извините за дублирование. неполадки связи.


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gladov
сообщение Jun 20 2011, 04:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(Hellper @ Jun 19 2011, 00:15) *
Посоветуйте примеры использование С++ при создание программ под архитектуру ARM микроконтроллеров. Такие примеры, чтобы показывали удобство и силу использование ООП, и тянуло сразу садится, вникать и кодить.
спасибо
пс желательно под компилятор от keil-а или gcc

ПС извините за дублирование. неполадки связи.


С++ плохо подходит для ARM. Серьезно! Появляются накладняки на требуемую память, ООП пытается тянуть за собой в проект использование динамической памяти и еще много всяких неудобств. Зачем это Вам?

А если серьезно, то я сам пишу под АРМ на С++, но чтобы к этому прийти, надо сначала понять что такое ООП вообще, зачем оно нужно, почему иногда оно удобнее, и лишь потом, если придет просветление (для ускорения процесса можно почитать, например, про шаблоны ООП) можно пытаться прикрутить объекты к АРМам.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 20 2011, 07:32
Сообщение #3


Adept
******

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



Цитата(gladov @ Jun 20 2011, 11:34) *
С++ плохо подходит для ARM. Серьезно! Появляются накладняки на требуемую память, ООП пытается тянуть за собой в проект использование динамической памяти и еще много всяких неудобств. Зачем это Вам?

А если серьезно, то я сам пишу под АРМ на С++, но чтобы к этому прийти, надо сначала понять что такое ООП вообще, зачем оно нужно, почему иногда оно удобнее, и лишь потом, если придет просветление (для ускорения процесса можно почитать, например, про шаблоны ООП) можно пытаться прикрутить объекты к АРМам.

Два, нет - три вопроса:
  1. Какое отношение имеет ООП к динамической памяти?
  2. Почему вы ставите знак равенства между С++ и ООП?
  3. Причём тут вообще паттерны проектирования? Какое они имеют отношение к ЯП С++?


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
gladov
сообщение Jun 21 2011, 06:40
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 169
Регистрация: 10-11-05
Из: Воронеж
Пользователь №: 10 687



Цитата(dxp @ Jun 20 2011, 11:32) *
Два, нет - три вопроса:
  1. Какое отношение имеет ООП к динамической памяти?
  2. Почему вы ставите знак равенства между С++ и ООП?
  3. Причём тут вообще паттерны проектирования? Какое они имеют отношение к ЯП С++?


Начну со второго: да, возможно я излишне строго приравнял C++ и ООП. Это конечно не так, я немного не то имел ввиду. Конечно, C++ дает нам много вкусностей помимо "классического" ООП. Но, согласитесь, основные достоинства языка С++ заключаются в его возможности писать ОО-код. Именно поэтому я не приравнял С++ и ООП, но поставил их совсем рядом и позволил себе в первом посте сместить акцент в сторону ООП.
Отношение ООП к динамике? Да никакого! Но во многих учебниках, а также в ВУЗах, преподается ООП (позвольте я все же буду тут писать про ООП, коль уж мой первый пост был де-факто про него) в тесной свзяке с динамической памятью, ибо так легче показать виртуализацию и полиморфизм. Поэтому и написал, что "ООП пытается тянуть за собой ....". Согласитесь, многие вещи удобнее реализовываются если использовать динамику? Однако этого лучше не делать, либо делать с умом, понимая механизмы и возможные последствия.
Паттерны? А разве плохо знать о них? А к С++ они имеют прямое отношение: их можно реализовать используя С++, а вот на С сделать то же самое гораздо сложнее.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 21 2011, 08:47
Сообщение #5


Adept
******

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



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

Цитата(gladov @ Jun 21 2011, 13:40) *
Начну со второго: да, возможно я излишне строго приравнял C++ и ООП. Это конечно не так, я немного не то имел ввиду. Конечно, C++ дает нам много вкусностей помимо "классического" ООП. Но, согласитесь, основные достоинства языка С++ заключаются в его возможности писать ОО-код. Именно поэтому я не приравнял С++ и ООП, но поставил их совсем рядом и позволил себе в первом посте сместить акцент в сторону ООП.

Давайте наведём ясность с терминами, в частности с ООП. ООП - объектно-ориентированное программирование, в основе которого лежит описание программы в виде иерархий наследуемых объектов с виртуальными функциями (кои являются методами), с возможностью переопределять поведение методов на любом уровне иерархии. Т.е. если я просто определяю некий класс со своим представлением (данными) и интерфейсом (открытыми функциями-членами), объявляю объект[ы] этого класса и использую его[их] в программе - то это получается не ООП. Тут нет ни иерархий, ни наследования, ни методов (виртуальных функций). И даже если было бы и наследование, но без виртуальных функций, то и это было бы не ООП - т.к. ключевым свойством ООП является динамический полиморфизм - т.е. подмена поведения метода в наследнике на рантайме, а само по себе наследование этого не даёт.

Если вы посчитали, что уже использование классов - это ООП, то это ошибочное суждение. С++ - гибридный язык программирования. Он в явном виде поддерживает три парадигмы:
  1. Процедурую, когда программист разбивает код на функции (процедуры) и строит программу как совокупность вызовов процедур (точно как в традиционном С).
  2. Объектную, когда программист размещает код в компактных объектах, скрывая детали реализации с помощью инкапсуляции и абстракции и определяя интерфейс для взаимодействия объектов с внешним (для объекта) миром, а программу, строит определяя взаимодействия объектов между собой и с другими программными сущностями.
  3. Объектно-ориентированную, когда код строится в виде иерархий полиморфных классов (см выше).

Каждая парадигма имеет свои сильные и слабые стороны, и применять их все три надо к месту. С++ все эти три парадигмы поддерживает одинаково хорошо. И ни одна из них не порождает сколько-нибудь заметных накладных расходов в программе, чтобы их нельзя было использовать даже на 8-битных малышах, не говоря уже об АРМах. Где уместен С, там уместен и С++.

Цитата(gladov @ Jun 21 2011, 13:40) *
Отношение ООП к динамике? Да никакого! Но во многих учебниках, а также в ВУЗах, преподается ООП (позвольте я все же буду тут писать про ООП, коль уж мой первый пост был де-факто про него) в тесной свзяке с динамической памятью, ибо так легче показать виртуализацию и полиморфизм.

Совершенно нет. Никакого абсолютно отношения виртуальные функции и полиморфизм не имеют к работе со свободной памятью. Это полностью ортогональные вещи. Механизм виртуальных функций в С++ строится на таблицах указателей на функции - это вполне обычный механизм, хорошо известный ещё из языка С. Разница в том, что в С эти таблицы создавать, инициализировать адресами функций приходится вручную, в С++ этим занимается компилятор. Когда вы пишете код с таблицами указателей на функции на С, вам же не приходит в голову их размещать, в обязательном порядке вызывая malloc() - эти таблицы вполне нормально живут в статической памяти (да хоть в стеке, если время жизни таблицы достаточно для обслуживания кода, её использующего).

И если я описываю иерархию классов и создаю объекты статически, то и никакой динамической памяти и близко не возникает, а полиморфизм присутствует в полный рост. И ситуация тут наглядная и простая - уж во всяком случае попроще (не сложнее точно), чем в случае размещения объектов в свободной памяти

Цитата(gladov @ Jun 21 2011, 13:40) *
Поэтому и написал, что "ООП пытается тянуть за собой ....". Согласитесь, многие вещи удобнее реализовываются если использовать динамику?

Не соглашусь. Использование динамической (свободной) памяти обусловлено только одним обстоятельством - когда на этапе написания программы неизвестно, сколько потребуется тех или иных объектов, когда достоверная информация об этом появляется только на этапе выполнения. Сама по себе работа со свободной памятью - это более сложный и ответственный процесс, ошибки в котором почти всегда приводят к катастрофическому падению программы (удаление несуществующего указателя, например) или в лучшем случае к утечке памяти. И накладные расходы на создание/удаление объектов в свободной памяти ни в какое сравнение не идут с аналогичным процессом в статической памяти или стеке. В любом случае работа с динамическими объектами требует повышенной внимательности, аккуратности и ответственности, а накладные заметно выше. Поэтому применять это надо только там, где это действительно необходимо, и не более того.

В программах для РС, где присутствует GUI, это обычная практика - создавать объекты с помощью оператора new, т.к. GUI сам по себе динамичен - окна появляются и закрываются, действия пользователя на этапе написания программы не известны. Учитывая, что операция создания объекта в свободной памяти на РС не очень дорогая, этот подход широко применяется там и для других потребностей. Но и там злоупотреблять этим ни к чему. И недаром тов. Александреску даже разработал специальный быстрый менеджер памяти для использования его с небольшими объектами (он подробно описан в его книжке "Modern C++ design").

Цитата(gladov @ Jun 21 2011, 13:40) *
Паттерны? А разве плохо знать о них? А к С++ они имеют прямое отношение: их можно реализовать используя С++, а вот на С сделать то же самое гораздо сложнее.

Знать о них не плохо. Только это, вообще-то, приёмы проектирования, и реализовываться они могут на многих языках, а не только на С++. И уж нет никаких особы предпосылок к тому, чтобы считать их непригодными для реализации в embedded системах, в частности на ARM. Например, паттерн Singleton очень хорошо реализуется не то, что на ARM, но даже на AVR, и мы давно и широко его применяем.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Hellper   Как писать на С++ при создание приложений под ARM   Jun 18 2011, 20:15
- - Danis   Цитата(Hellper @ Jun 19 2011, 00:15) Посо...   Jun 18 2011, 20:21
|- - scifi   Цитата(Danis @ Jun 19 2011, 00:21) Доволь...   Jun 18 2011, 20:53
- - zltigo   QUOTE (Hellper @ Jun 18 2011, 23:15) тяну...   Jun 18 2011, 20:36
- - haker_fox   QUOTE (Hellper @ Jun 19 2011, 05:15) и тя...   Jun 19 2011, 03:03
|||- - scifi   Цитата(dxp @ Jun 21 2011, 12:47) Если вы ...   Jun 21 2011, 09:21
||- - 777777   Цитата(dxp @ Jun 20 2011, 11:32) Почему в...   Sep 22 2011, 04:49
||- - andrewlekar   Цитата(777777 @ Sep 22 2011, 10:49) О как...   Sep 23 2011, 04:49
||- - 777777   Цитата(andrewlekar @ Sep 23 2011, 08:49) ...   Sep 23 2011, 05:52
||- - dxp   Цитата(777777 @ Sep 23 2011, 12:52) Во-вт...   Sep 23 2011, 07:02
|- - haker_fox   QUOTE (gladov @ Jun 20 2011, 13:34) и еще...   Jun 20 2011, 08:07
||- - MrYuran   Цитата(haker_fox @ Jun 20 2011, 12:07) 3....   Jun 20 2011, 09:54
|- - klen   Цитата(gladov @ Jun 20 2011, 08:34) С++ п...   Jun 20 2011, 10:45
|- - Axel   Цитата(gladov @ Jun 20 2011, 07:34) ...пр...   Jun 20 2011, 11:22
- - demiurg_spb   Цитата(Hellper @ Jun 19 2011, 00:15) Посо...   Jun 20 2011, 11:35
- - Danis   ТС, позвольте не большой, скромный вопрос к Вам. З...   Jun 20 2011, 12:15
- - GDI   ringbuffer-dlya-embedded - пример кода, и даже не ...   Jun 20 2011, 13:11
|- - Hellper   Цитата(GDI @ Jun 20 2011, 17:11) ringbuff...   Jun 20 2011, 16:05
- - brag   Да, стоит сделать new, как c++ тянет библиотечный ...   Jun 21 2011, 08:09
- - brag   согласен, обзор полностью верный. и применять тот ...   Jun 21 2011, 09:33
|- - scifi   Цитата(brag @ Jun 21 2011, 13:33) пример ...   Jun 21 2011, 09:39
|- - Axel   Цитата(scifi @ Jun 21 2011, 12:39) ...где...   Jun 21 2011, 10:14
|- - dxp   Цитата(scifi @ Jun 21 2011, 16:39) При вс...   Jun 21 2011, 11:58
|- - scifi   Цитата(dxp @ Jun 21 2011, 15:58) В общем,...   Jun 21 2011, 14:37
|- - Danis   Цитата(scifi @ Jun 21 2011, 17:37) Другим...   Jun 21 2011, 15:55
- - brag   ЦитатаПри всём уважении, это голословное утвержден...   Jun 21 2011, 10:30
- - Danis   dxp, как у вас терпения хватает писать такие длинн...   Jun 21 2011, 13:27
- - brag   dxp, спасибо большое за обзорчик, вроде все и так ...   Jun 21 2011, 22:18
- - haker_fox   dxp, спасибо за шикарные ответы!!! Н...   Jun 22 2011, 01:05
- - andrewlekar   Расказ про ООП конечно увлекательный, но стоит учи...   Jun 22 2011, 04:57
|- - MrYuran   Цитата(andrewlekar @ Jun 22 2011, 08:57) ...   Jun 22 2011, 06:38
|- - dxp   Цитата(andrewlekar @ Jun 22 2011, 11:57) ...   Jun 22 2011, 06:40
||- - andrewlekar   ЦитатаПоясните? И причём тут множественное наследо...   Jun 22 2011, 07:38
||- - Danis   Цитата(andrewlekar @ Jun 22 2011, 11:38) ...   Jun 22 2011, 08:28
||- - haker_fox   По сравнению с уважаемым dxp, я вообще не программ...   Jun 22 2011, 08:32
|||- - andrewlekar   Цитата(haker_fox @ Jun 22 2011, 14:32) А ...   Jun 22 2011, 09:00
|||- - MrYuran   Цитата(andrewlekar @ Jun 22 2011, 13:00) ...   Jun 22 2011, 09:32
|||- - shreck   Цитата(andrewlekar @ Jun 22 2011, 16:00) ...   Jun 22 2011, 10:34
|||- - SergeyDDD   Цитата(andrewlekar @ Jun 22 2011, 12:00) ...   Jun 22 2011, 11:22
|||- - haker_fox   QUOTE (andrewlekar @ Jun 22 2011, 18:00) ...   Jun 22 2011, 11:30
|||- - zltigo   QUOTE (haker_fox @ Jun 22 2011, 14:30) Я ...   Jun 22 2011, 12:33
||- - Danis   Цитата(andrewlekar @ Jun 22 2011, 11:38) ...   Jun 22 2011, 08:37
||- - sergeeff   Цитата(andrewlekar @ Jun 22 2011, 10:38) ...   Jun 22 2011, 08:44
|- - Danis   Цитата(andrewlekar @ Jun 22 2011, 08:57) ...   Jun 22 2011, 06:53
|- - haker_fox   QUOTE (andrewlekar @ Jun 22 2011, 13:57) ...   Jun 22 2011, 08:13
- - dxp   .   Jun 22 2011, 06:29
- - dxp   Цитата(haker_fox @ Jun 22 2011, 08:05) Не...   Jun 22 2011, 07:37
- - Dima_G   Цитата(Hellper @ Jun 19 2011, 03:15) Таки...   Jun 22 2011, 08:35
- - zltigo   История моей жизни. Когда-то очень давно, когда ко...   Jun 22 2011, 11:14
- - Danis   Кстати, прорабатывается новая версия стандарта С++...   Jun 22 2011, 11:31
|- - MrYuran   Цитата(Danis @ Jun 22 2011, 15:31) Кстати...   Jun 22 2011, 11:45
- - brag   Пописал немного кода на С++ использованием динамич...   Sep 21 2011, 22:05
- - dxp   Цитата(brag @ Sep 22 2011, 05:05) Про кон...   Sep 22 2011, 07:25
|- - 777777   Цитата(dxp @ Sep 22 2011, 11:25) Правда? ...   Sep 22 2011, 15:40
- - sergeeff   КодПро конструкторы и деструкторы правда пришлось ...   Sep 22 2011, 09:51
- - brag   ЦитатаЧем же так конструкторы не угодили? Это прос...   Sep 22 2011, 12:11
|- - dxp   Цитата(brag @ Sep 22 2011, 19:11) НО. Нек...   Sep 22 2011, 13:03
- - ReAl   Насколько я понимаю, вот тут конструктор object бу...   Sep 22 2011, 12:32
- - brag   ЦитатаНасколько я понимаю, вот тут конструктор obj...   Sep 22 2011, 12:47
- - brag   ЦитатаObject& GetObject() { static Object ...   Sep 22 2011, 13:13
|- - dxp   Цитата(brag @ Sep 22 2011, 20:13) Хе, еще...   Sep 22 2011, 13:19
- - brag   ЦитатаБольшинство объектов в программе, как правил...   Sep 22 2011, 13:32
|- - sergeeff   Цитата(brag @ Sep 22 2011, 16:32) init ни...   Sep 22 2011, 13:37
- - brag   ЦитатаЕстественно, это стандартная реализация иниц...   Sep 22 2011, 13:41
|- - Dima_G   Компилятор ничего не знает о потоках, процессах и ...   Sep 22 2011, 14:38
- - brag   ЦитатаКомпилятор ничего не знает о потоках, процес...   Sep 22 2011, 15:05
|- - Dima_G   Цитата(brag @ Sep 22 2011, 22:05) Qt+gcc ...   Sep 22 2011, 15:16
|- - sergeeff   Цитата(brag @ Sep 22 2011, 18:05) Qt+gcc ...   Sep 22 2011, 15:21
- - brag   ЦитатаЛично налетал на гонки в синглтоне. Компилят...   Sep 22 2011, 16:09
|- - Dima_G   Цитата(brag @ Sep 22 2011, 23:09) а реали...   Sep 23 2011, 04:30
- - brag   еще вопрос по поводу реюза кода. Как, на пример, в...   Sep 22 2011, 17:45
|- - AHTOXA   Цитата(brag @ Sep 22 2011, 23:45) Нужно, ...   Sep 22 2011, 18:32
- - brag   а код? -ffunction-sections , а потом это все вручн...   Sep 22 2011, 18:44
- - brag   Реализовал через манипуляцию ld -r, линкер-скрипты...   Sep 22 2011, 22:54
- - dxp   Цитата(777777 @ Sep 22 2011, 22:40) Что з...   Sep 23 2011, 04:50
- - brag   Цитатаочитайте про "Placement new". Это ...   Sep 23 2011, 10:15
- - MALLOY2   Ссылка в тему С++ & Cortex   Sep 23 2011, 11:35
- - brag   Хe, и множественному наследованию (по крайней мере...   Sep 23 2011, 16:25
- - andrewlekar   Множественное наследование от интерфейсов разумеет...   Sep 23 2011, 17:22
- - BlackHead   Вот набрёл на библиотеку С++ http://xpcc.sourcefor...   Oct 5 2011, 10:21
- - kikos   Лет 20 назад один из заказчиков (пожилой американс...   Oct 31 2011, 13:32
|- - Сергей Борщ   QUOTE (kikos @ Oct 31 2011, 16:32) На воп...   Oct 31 2011, 13:49
||- - Forger   Цитата(Сергей Борщ @ Oct 31 2011, 17:49) ...   Oct 31 2011, 18:14
|- - ReAl   Цитата(kikos @ Oct 31 2011, 15:32) Более ...   Nov 1 2011, 06:27
- - IgorKossak   Господа критикующие, напоминаю, тема звучит Как пи...   Nov 1 2011, 08:32
- - brag   Как можно реализовать такую вещ без кривоты, rtti,...   Dec 10 2011, 02:55
|- - Forger   Цитата(brag @ Dec 10 2011, 06:55) Как мож...   Dec 10 2011, 07:09
|- - alx2   Цитата(brag @ Dec 10 2011, 07:55) Как мож...   Dec 11 2011, 10:37
- - neiver   Массив указателей на объекты базового класса - это...   Dec 10 2011, 07:29
- - brag   ЦитатаДля полноты картины, расскажите, для чего ва...   Dec 10 2011, 15:37
|- - dxp   Цитата(brag @ Dec 10 2011, 22:37) массив ...   Dec 10 2011, 17:39
- - brag   ЦитатаЕсли я правильно понял, что требуется работа...   Dec 10 2011, 18:11
|- - dxp   Цитата(brag @ Dec 11 2011, 01:11) stl не ...   Dec 10 2011, 21:44
- - brag   да просто проект такой, что проще свое написать, ч...   Dec 10 2011, 22:59
- - kan35   Писать на С++ под ARM точно так же как на любую др...   Dec 11 2011, 09:52
- - brag   Спасибо. но это тоже не то, массив указателей все ...   Dec 11 2011, 13:32
2 страниц V   1 2 >


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 23:13
Рейтинг@Mail.ru


Страница сгенерированна за 0.05865 секунд с 7
ELECTRONIX ©2004-2016