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

 
 
12 страниц V  « < 2 3 4 5 6 > »   
Reply to this topicStart new topic
> Как ПРАВИЛЬНО программировать на С++, Вопросы по программированию на С++ для микроконтроллеров.
Serega Doc
сообщение Aug 5 2010, 08:37
Сообщение #46


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Спасибо за рекомендации.
inline я активно использую в header файле.
И для данной функции это бессмысленно из-за дублирования кода.

Я в принципе тоже так думал что нет такой возможности. Но надеялся что я чего-то не ведаю.
Еще раз спасибо.
Go to the top of the page
 
+Quote Post
XVR
сообщение Aug 11 2010, 09:20
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Mahagam @ Aug 4 2010, 11:49) *
ReAl
зайдите на любой форум программеров - война с языком идёт вечно. причём чуть ли не с базовыми конструкциями.
Заходил. Видел борьбу начинающих со своей безграмотностью, борьбы ПРОГРАММИСТОВ с С++ не видел rolleyes.gif
Go to the top of the page
 
+Quote Post
alexvok
сообщение Aug 19 2010, 10:32
Сообщение #48





Группа: Участник
Сообщений: 11
Регистрация: 23-02-08
Пользователь №: 35 326



Посоветуйте пажалуйста книгу
С++ с примерами для AVR
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Aug 19 2010, 14:11
Сообщение #49


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(alexvok @ Aug 19 2010, 14:32) *
Посоветуйте пажалуйста книгу
С++ с примерами для AVR
Боюсь, что таковых не имеется...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
neiver
сообщение Aug 19 2010, 14:40
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Примеры есть у меня, есть и свой подход к программированию для систем с сильно ограниченными ресурсами на С++(на примере AVR).
Будет свободное время - напишу статейку по этой теме (если будут желающие её читать smile.gif ).
А так вкратце могу сказать, что программы на С++ получаются компактнее, быстрее и легче читаются аналогичных программ на Си.
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 20 2010, 08:32
Сообщение #51


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

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



Цитата(neiver @ Aug 19 2010, 18:40) *
А так вкратце могу сказать, что программы на С++ получаются компактнее, быстрее и легче читаются аналогичных программ на Си.

Я, в принципе, охотно верю, но тем не менее не могу придумать, какие понятия в микроконтроллерных системах можно сделать классами. Слишком уж они отличаются от обычных программ.
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 20 2010, 08:37
Сообщение #52


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Aug 20 2010, 12:32) *
Я, в принципе, охотно верю, но тем не менее не могу придумать, какие понятия в микроконтроллерных системах можно сделать классами.

Да хоть какие угодно.
Порт, например, чем вам не класс?
УАРТ?
АЦП?
Таймеры?
Есть физические данные, есть объекты в адресном пространстве, есть методы, работающие с этими данными и объектами.
Почему бы не соединить вместе?

Adc->Init();
Adc->StartConversion();
...
Uadc = Adc->GetResult();


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 20 2010, 11:15
Сообщение #53


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

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



Цитата(MrYuran @ Aug 20 2010, 12:37) *
Да хоть какие угодно.
Порт, например, чем вам не класс?
УАРТ?
АЦП?
Таймеры?

Нет, это не классы. Это объекты, существующие в одном экземпляре. (Правда, в программировании есть понятие синглтона, но это все-таки экзотика). А класс - это в некий тип данных, как int или char. Можно создавать объекты таких типов в любом колчестве, они обладают некими свойствами. Примером класса может быть окно - можно создавать множество объектов такого класаа - окон с разными свойствами - размером, типом, - вызывать их методы с целью поменять их, выполнить какое-то действие - нарисовать на нем что-то и т.п. Можно например, как я писал в соседнем посте, создать класс кнопки и использовать его для обработки нажатий на кнопки, отличать длительное и короткое нажатие, выполнять полиморфно их обработку.
Цитата(MrYuran @ Aug 20 2010, 12:37) *
Есть физические данные, есть объекты в адресном пространстве, есть методы, работающие с этими данными и объектами.
Почему бы не соединить вместе?

Adc->Init();
Adc->StartConversion();
...
Uadc = Adc->GetResult();

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

Сообщение отредактировал 777777 - Aug 20 2010, 11:18
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 20 2010, 11:39
Сообщение #54


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(777777 @ Aug 20 2010, 15:15) *
Это лишь видимость С++, в реальности это ничем не лучше вызова обычных функций. А от объектно-ориентированного программирования польза будет только если пользоваться всеми его особенностями - инкапсуляцией, наследованием, полиморфизмом. А для этого нужно весь проект рассматривать как поле для взаимодействия объектов, а не просто переделать проект на С++ потому что это модная фича.

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

Цитата(777777 @ Aug 20 2010, 15:15) *
Нет, это не классы. Это объекты, существующие в одном экземпляре.

Ни разу не видел контроллер с одним портом smile.gif
Вот немного выше был пример, как можно очень удобно представить разрозненные пины разных портов как один обычный порт.
Лучшего примера, я думаю, не найти.
Ну и в конце концов, чуть приподнявшись и отвязавшись от железа, имеем обычную абстрактную программу, в которой можно применять все тонкости и возможности с++.
Я для пробы делал класс цифровых фильтров - очень удобно.
В одном объекте сосредоточен буфер с дискретными отсчётами, методы и выходное значение.
Опять же, можно сделать несколько разных фильтров с разными параметрами и характеристиками.

А уж если есть экранчик (хотя бы 128х64) и менюшки-поля-окошки, то тут уж вообще разговор молчит.
Однозначно, плюсы рулят.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
dxp
сообщение Aug 20 2010, 12:43
Сообщение #55


Adept
******

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



Цитата(777777 @ Aug 20 2010, 18:15) *
Нет, это не классы. Это объекты, существующие в одном экземпляре.

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

Кстати, на том же С очень удобно заводить в структуру объекты, относящиеся к одному и тому же (по смыслу) месту программы, даже если таких структур нужна всего одна.


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


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(dxp @ Aug 20 2010, 16:43) *
Кстати, на том же С очень удобно заводить в структуру объекты, относящиеся к одному и тому же (по смыслу) месту программы, даже если таких структур нужна всего одна.

Да, структура - частный случай класса.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
ReAl
сообщение Aug 21 2010, 18:24
Сообщение #57


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Ну вот как раз сегодняшний пример.
ATmega48. Программа сравнительно древняя на С (и нет желания её переписывать начисто, но что-то новое даже такого объёма будет сразу писаться на С++).
Дописывается кусочек функционала, понадобилось при входе в некоторый режим сохранить состояние некоторых выходов, выключаемых в этом режиме, а при выходе из режима восстановить. Ну всё понятно, заводится флаг нахождения в этом режиме (в режим может быть повторный вход, который теперь отличается тем, что сохраняь уже отключенные ножки не нужно) и буферная переменная для сохранения состояния выходов. Т.е. появляются две глобальных переменных файловой области видимости и связь между функциями через них.
На С++ все эти функции изначально объединяются в класс-«драйвер режима» и потом хоть обдобавляйся в этом классе приватных полей.
Казалось бы, между
Код
SomeModeOn();
SomeModeOff();

Код
someMode.On();
someMode.Off();

разницы не видно, «а она есть»©

Кстати, классы, изначально предназначенные для того, чтобы иметь только один экземпляр - вполне нормальное явление.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 23 2010, 07:33
Сообщение #58


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(alexvok @ Aug 19 2010, 14:32) *
С++ с примерами для AVR

Может, напишем сообща?
rolleyes.gif
Я уже название придумал.
"С++ в микроконтроллерах. Почему бы и нет?"
Экспортный вариант:
"С++ for microcontrollers. Why no?"

У "плюсов" есть ещё один несомненный плюс. Прежде чем сломя голову что-то писать, надо сначала продумать структуру.
То есть, дополнительный организующий момент.
Кстати, данная тема именно с этого и началась - с вопроса об оптимальной структуре.

Спор "плюсы против бесплюсов" считаю таким же контрпродуктивным, как "асм против си".
Си вобрал в себя основные на тот момент методики структурирования ассемблера.
Плюсы - также включают основные методики из сишного программирования. То, что на си пишется в виде отдельного модуля, на с++ можно поместить в класс. Закрытые члены - это аналог static-функций и переменных. В общем, всё то же самое, только проще, короче, быстрее и нагляднее.
Точно так же, есть надстройки над с, дающие дополнительную абстракцию, например, компонентно-ориентированный диалект Nes-C, на котором написана TinyOS

Сообщение отредактировал MrYuran - Aug 23 2010, 09:03


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
neiver
сообщение Aug 23 2010, 08:33
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 214
Регистрация: 22-03-10
Из: Саратов
Пользователь №: 56 123



Идея интересная. Я статью по этой теме пишу - никак не допишу... Времени мало. А тут книгу...
Go to the top of the page
 
+Quote Post
777777
сообщение Aug 24 2010, 11:21
Сообщение #60


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

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



Цитата(ReAl @ Aug 21 2010, 22:24) *
Кстати, классы, изначально предназначенные для того, чтобы иметь только один экземпляр - вполне нормальное явление.

Да это явление может и нормальное, я не спорю. Хуже когда этот класс в принципе не может иметь несколько экземпляров - это уже архитектурная проблема, говорящая о том, что классу тут делать нечего. Можно например написать класс CIdle, который будет инкапсулировать в себе бесконечный цикл, имеющийся в любом контроллере:
Код
class CIdle
{
CIdle()
    {
    sei();
    while(1)
        {}
    }
}

Применение
Код
main()
    {
    // инициализация периферии
    ...
    // дальше работают только прерывания
    CIdle idle;
    }

Но этот пример попахивает онанизмом, не находите? Даже если в него навтыкать указателей на функции и заставить их вызывать по кругу, пользы от него не прибавится.


Цитата(MrYuran @ Aug 23 2010, 11:33) *
"С++ в микроконтроллерах. Почему бы и нет?"
Экспортный вариант:
"С++ for microcontrollers. Why no?"

По-английски это не звучит, надо по-французски: pourquoi pas? smile.gif
Цитата(MrYuran @ Aug 23 2010, 11:33) *
У "плюсов" есть ещё один несомненный плюс. Прежде чем сломя голову что-то писать, надо сначала продумать структуру.
То есть, дополнительный организующий момент.

Да, это действительно полезно...
Go to the top of the page
 
+Quote Post

12 страниц V  « < 2 3 4 5 6 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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