Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ООП подход в программировании AVR на С++ (не Си!)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
Дуглас Шеппард
Народ!
подскажите, дайте ссылку, или кто знает просто расскажите
как правильно писать на С++ для AVR-ов, с учетом всех тонкостей
контроллеров, например функции обработчиков прерываний,
может ли обработчик быть мембером класса,
или как правильно создать прог. инт-фейс для перефирийного устройства
например УАРТа или др.
какие нибуть примеры, личный опыт....
но только С++, не Си! непутать объектное со структурным.....
dxp
Цитата(Дуглас Шеппард @ Oct 29 2007, 19:54) *
Народ!
подскажите, дайте ссылку, или кто знает просто расскажите
как правильно писать на С++ для AVR-ов, с учетом всех тонкостей
контроллеров, например функции обработчиков прерываний,
может ли обработчик быть мембером класса,
или как правильно создать прог. инт-фейс для перефирийного устройства
например УАРТа или др.
какие нибуть примеры, личный опыт....
но только С++, не Си! непутать объектное со структурным.....

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

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

Хорошое дело поиск, например
http://www.google.ru/search?client=opera&a...vr&sourceid
Дуглас Шеппард
Цитата(dxp @ Oct 29 2007, 19:18) *
Что вы понимаете под ООП? Классы?

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


я имею ввиду как правильно организовать приложение,
времена когда весь код был в main() уже прошли, нетак ли,
возникает вопрос: как, например main() засунуть в класс? (плохой пример)
или как обработчик прерывания сделать методом класса, наверняка
он должен быть статическим, могу ли я допустим PORTB сделать членом класса?
понимаете?
IgorKossak
Это поможет?
Старая ИАРовская обучалка. Там есть пример, Вас интересующий.
alexander55
Цитата(Дуглас Шеппард @ Oct 29 2007, 19:41) *
я имею ввиду как правильно организовать приложение,
времена когда весь код был в main() уже прошли, нетак ли,

Так.

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

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

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

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

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

Нет, не понимаю. Зачем такие выкрутасы, а сделать можно все. Вопрос зачем ?
IgorKossak
alexander55, оба Ваших последних "зачем" можно добавить третьим - "зачем ООП?".
Дело в том, что и обработчик прерывания и любой внутренний ресурс можно безболезненно сделать статическим членом класса. Я это делаю постоянно и мне лично это кажется удобным.
Смысл?
Да всё тот же, что и в ООП как таковом: инкапсуляция, сокрытие, и т. д., и т. п.
alexander55
Цитата(IgorKossak @ Oct 30 2007, 11:13) *
alexander55, оба Ваших последних "зачем" можно добавить третьим - "зачем ООП?".

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

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

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

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

Да ни чем не хуже.
Всё зависит от конкретного случая и личных предпочтений.
Вопрос ведь был: "Можно ли?". Ответ: "Да, можно".
Я в своё время пробовал по всякому, и продолжаю решать вопросы разными методами.
Например, если порт целиком используется для одной цели - управления LCD, то его целиком мне было удобно определить в классе, назначив пинам или группе пинов нужные функции.
В другом проекте, где исходя из удобства трассировки, линии управления LCD оказались принадлежащими разным портам, я работал через макроопределения.
dxp
Цитата(alexander55 @ Oct 30 2007, 14:30) *
Тут я что-то не в курсе. Объясните мне:
-в чем Вы видите удобство использования обработчика прерывания, как члена класса (а не функции, в него входящей);

Удобство в том, что если, например, прерывание по замыслу непосредственно связано с каким-то объектом класса и больше ни с чем другим, то имеет смысл сокрыть обработчик этого прерывания внутри оного класса. Во-вторых, это дает возможность доступа к закрытым членам класса из этого обработчика прерываний.
alexander55
Цитата(IgorKossak @ Oct 30 2007, 12:15) *

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

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

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

Спасибо dxp за пояснение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.