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

 
 
 
Reply to this topicStart new topic
> ООП подход в программировании AVR на С++ (не Си!)
Дуглас Шеппард
сообщение Oct 29 2007, 13:54
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 29-10-07
Пользователь №: 31 841



Народ!
подскажите, дайте ссылку, или кто знает просто расскажите
как правильно писать на С++ для AVR-ов, с учетом всех тонкостей
контроллеров, например функции обработчиков прерываний,
может ли обработчик быть мембером класса,
или как правильно создать прог. инт-фейс для перефирийного устройства
например УАРТа или др.
какие нибуть примеры, личный опыт....
но только С++, не Си! непутать объектное со структурным.....
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 29 2007, 14:48
Сообщение #2


Adept
******

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



Цитата(Дуглас Шеппард @ Oct 29 2007, 19:54) *
Народ!
подскажите, дайте ссылку, или кто знает просто расскажите
как правильно писать на С++ для AVR-ов, с учетом всех тонкостей
контроллеров, например функции обработчиков прерываний,
может ли обработчик быть мембером класса,
или как правильно создать прог. инт-фейс для перефирийного устройства
например УАРТа или др.
какие нибуть примеры, личный опыт....
но только С++, не Си! непутать объектное со структурным.....

Что вы понимаете под ООП? Классы?

Вообще, подобные темы уже обсуждались, поищите на форуме.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
tyro
сообщение Oct 29 2007, 14:57
Сообщение #3


Любитель Кошек
*****

Группа: Свой
Сообщений: 1 593
Регистрация: 8-06-06
Пользователь №: 17 873



Цитата(Дуглас Шеппард @ Oct 29 2007, 16:54) *
Народ!
подскажите, дайте ссылку, или кто знает просто расскажите
как правильно писать на С++ для AVR-ов, с учетом всех тонкостей
контроллеров, например функции обработчиков прерываний,
может ли обработчик быть мембером класса,
или как правильно создать прог. инт-фейс для перефирийного устройства
например УАРТа или др.
какие нибуть примеры, личный опыт....
но только С++, не Си! непутать объектное со структурным.....

Хорошое дело поиск, например
http://www.google.ru/search?client=opera&a...vr&sourceid


--------------------
По современному этикету, в левой руке держат вилку, в правой - мышку.
Go to the top of the page
 
+Quote Post
Дуглас Шеппард
сообщение Oct 29 2007, 16:41
Сообщение #4





Группа: Новичок
Сообщений: 11
Регистрация: 29-10-07
Пользователь №: 31 841



Цитата(dxp @ Oct 29 2007, 19:18) *
Что вы понимаете под ООП? Классы?

Вообще, подобные темы уже обсуждались, поищите на форуме.


я имею ввиду как правильно организовать приложение,
времена когда весь код был в main() уже прошли, нетак ли,
возникает вопрос: как, например main() засунуть в класс? (плохой пример)
или как обработчик прерывания сделать методом класса, наверняка
он должен быть статическим, могу ли я допустим PORTB сделать членом класса?
понимаете?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 29 2007, 21:27
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Это поможет?
Старая ИАРовская обучалка. Там есть пример, Вас интересующий.
Прикрепленные файлы
Прикрепленный файл  IAR_C___Interrupt_Tutor.rar ( 5.67 мегабайт ) Кол-во скачиваний: 372
 
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 30 2007, 07:41
Сообщение #6


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(Дуглас Шеппард @ Oct 29 2007, 19:41) *
я имею ввиду как правильно организовать приложение,
времена когда весь код был в main() уже прошли, нетак ли,

Так.

Цитата(Дуглас Шеппард @ Oct 29 2007, 19:41) *
возникает вопрос: как, например main() засунуть в класс? (плохой пример)

Вы поняли, что Вы сказали ?

Цитата(Дуглас Шеппард @ Oct 29 2007, 19:41) *
или как обработчик прерывания сделать методом класса, наверняка
он должен быть статическим

Зачем обработчик делать членом класса, лучше сделайте функцию в обработчике. Она будет находиться во flash.

Цитата(Дуглас Шеппард @ Oct 29 2007, 19:41) *
могу ли я допустим PORTB сделать членом класса?
понимаете?

Нет, не понимаю. Зачем такие выкрутасы, а сделать можно все. Вопрос зачем ?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 30 2007, 08:13
Сообщение #7


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



alexander55, оба Ваших последних "зачем" можно добавить третьим - "зачем ООП?".
Дело в том, что и обработчик прерывания и любой внутренний ресурс можно безболезненно сделать статическим членом класса. Я это делаю постоянно и мне лично это кажется удобным.
Смысл?
Да всё тот же, что и в ООП как таковом: инкапсуляция, сокрытие, и т. д., и т. п.
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 30 2007, 08:30
Сообщение #8


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(IgorKossak @ Oct 30 2007, 11:13) *
alexander55, оба Ваших последних "зачем" можно добавить третьим - "зачем ООП?".

Игорь, про третье "зачем ООП" у меня вопросов нет. Я сам стою горой за ООП. smile.gif

Цитата(IgorKossak @ Oct 30 2007, 11:13) *
Дело в том, что и обработчик прерывания и любой внутренний ресурс можно безболезненно сделать статическим членом класса. Я это делаю постоянно и мне лично это кажется удобным.

Тут я что-то не в курсе. Объясните мне:
-в чем Вы видите удобство использования обработчика прерывания, как члена класса (а не функции, в него входящей);
-чем хуже макроопределение ресурса, чем определение его, как члена класса.
О вкусах не спорят, но может, что-то я не улавливаю. 07.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Oct 30 2007, 09:15
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(alexander55 @ Oct 30 2007, 10:30) *
-в чем Вы видите удобство использования обработчика прерывания, как члена класса (а не функции, в него входящей);

Пробовал разные варианты.
В случае применения функции в обработчике сохраняется и восстанавливается много лишнего контекста. А ведь обработчик может быть коротким и не всегда есть смысл его тело выделять в функцию. Тем более, что вызываться она будет только из одного места. Можно её, конечно, обьявить инлайновой, но на мой взгляд это лишние телодвижения.
Цитата(alexander55 @ Oct 30 2007, 10:30) *
-чем хуже макроопределение ресурса, чем определение его, как члена класса.

Да ни чем не хуже.
Всё зависит от конкретного случая и личных предпочтений.
Вопрос ведь был: "Можно ли?". Ответ: "Да, можно".
Я в своё время пробовал по всякому, и продолжаю решать вопросы разными методами.
Например, если порт целиком используется для одной цели - управления LCD, то его целиком мне было удобно определить в классе, назначив пинам или группе пинов нужные функции.
В другом проекте, где исходя из удобства трассировки, линии управления LCD оказались принадлежащими разным портам, я работал через макроопределения.
Go to the top of the page
 
+Quote Post
dxp
сообщение Oct 30 2007, 09:19
Сообщение #10


Adept
******

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



Цитата(alexander55 @ Oct 30 2007, 14:30) *
Тут я что-то не в курсе. Объясните мне:
-в чем Вы видите удобство использования обработчика прерывания, как члена класса (а не функции, в него входящей);

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


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
alexander55
сообщение Oct 30 2007, 10:18
Сообщение #11


Бывалый
*****

Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615



Цитата(IgorKossak @ Oct 30 2007, 12:15) *

Спасибо, я понял мысль.

Цитата(IgorKossak @ Oct 30 2007, 12:15) *
Например, если порт целиком используется для одной цели - управления LCD, то его целиком мне было удобно определить в классе, назначив пинам или группе пинов нужные функции.

Я для LCD поступал аналогично (так удобнее).

Спасибо dxp за пояснение.
Go to the top of the page
 
+Quote Post

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

 


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


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