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

 
 
> Как писать на С++ при создание приложений под 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
Ответов
brag
сообщение Jun 21 2011, 09:33
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



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

Цитата
В связи с этим вопрос: не могли бы Вы привести примеры микроконтроллерных задач, в которых "объектно-ориентированный" подход даёт ощутимые преимущества?

пример - графический юзверь-интерфейс. я какраз щас задачку ставить буду, где сложный gui, все на том же cortex-m3, QT там не пойдет, прийдется писать свой, тут и применю с++, посему и залез в эти темку sm.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Jun 21 2011, 09:39
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(brag @ Jun 21 2011, 13:33) *
пример - графический юзверь-интерфейс. я какраз щас задачку ставить буду, где сложный gui, все на том же cortex-m3, QT там не пойдет, прийдется писать свой, тут и применю с++, посему и залез в эти темку sm.gif

При всём уважении, это голословное утверждение. Делал GUI (насколько сложный - тут мнения в любом случае разойдутся) именно "объектным" способом, никакой тяги к "полиморфизму" не ощутил.
Отсюда и вопрос. Хотелось бы с обоснованием, где именно полиморфизм реально помогает.
Go to the top of the page
 
+Quote Post
dxp
сообщение Jun 21 2011, 11:58
Сообщение #4


Adept
******

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



Цитата(scifi @ Jun 21 2011, 16:39) *
При всём уважении, это голословное утверждение. Делал GUI (насколько сложный - тут мнения в любом случае разойдутся) именно "объектным" способом, никакой тяги к "полиморфизму" не ощутил.
Отсюда и вопрос. Хотелось бы с обоснованием, где именно полиморфизм реально помогает.

Это вы зря - GUI, как раз, то место, где ООП рулит в полный рост. Не знаю, как у вас было организовано, но типовая схема такая: все объекты GUI являются членами иерархии классов, где в базовых классах объявляются методы (т.е. виртуальные функции), назначение которых выполнять действия, сходные по назначению, но разные по реализации. Например, у нас есть объекты: главное меню, выпадающее/всплывающее меню, пункт меню, графическая кнопка, строка состояния и т.п., а так же есть органы управления прибором - несколько кнопок или небольшая [плёночная] клавиатура. Нам нужно организовать управление всем ворохом графических объектов, но сделать это как-то единообразно. К примеру, нужно обрабатывать кнопку Right (перемещение вправо). Для этого мы в базовом классе иерархии объявляем виртуальную (если в самом базовом, то кошерно её объявлять чисто виртуальной - pure virtual) функцю void right(). И во всех производных классах, где это необходимо, эта функция переопределяется, чтобы получить для каждого класса своё поведение.

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

Так вот, код для реализации этого будет до безобразия прост:
Код
    TWidget *focus; // указатель на активный графический элемент (виджет)

   ...

    focus = ...;   //  focus присваивается адрес графического элемента - как правило это присваивание происходит
                      // внутри методов самих виджетов

   ...

    if( is_key_clicked(GUI::KEY_RIGHT)
    {
        focus->right();
    }

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

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

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

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

В общем, в любом приложении, где есть общие по назначению, но разные по исполнению действия, уместно применять ООП - динамический полиморфизм отлично ложится на реализацию такой задачи.


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


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(dxp @ Jun 21 2011, 15:58) *
В общем, в любом приложении, где есть общие по назначению, но разные по исполнению действия, уместно применять ООП - динамический полиморфизм отлично ложится на реализацию такой задачи.

Другими словами, средства полиморфизма из Си++ могут быть оправданы там, где на Си нужно было бы вводить "поле типа" или массив указателей на функции.
Неудивительно, что у меня нет к этому тяги: в моих задачах это редко встречается :-)
Ещё раз, спасибо за развёрнутое объяснение.
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
- - gladov   Цитата(Hellper @ Jun 19 2011, 00:15) Посо...   Jun 20 2011, 04:34
|- - dxp   Цитата(gladov @ Jun 20 2011, 11:34) С++ п...   Jun 20 2011, 07:32
||- - gladov   Цитата(dxp @ Jun 20 2011, 11:32) Два, нет...   Jun 21 2011, 06:40
|||- - dxp   Вынужден категорически не согласиться по всем пунк...   Jun 21 2011, 08:47
|||- - 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
|- - Axel   Цитата(scifi @ Jun 21 2011, 12:39) ...где...   Jun 21 2011, 10:14
|- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 07:06
Рейтинг@Mail.ru


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