Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.03.2010, 12:05
|
|
Временная регистрация
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
|
Re: О программировании AVR на C++.
kison, Вы абсолютно правы на счет недостатков. Собственно о них и как от них избавится я собирался писать далее. Причем не теряя всех достоинств. Это только первый пример. Не всё сразу.
|
|
|
|
21.03.2010, 12:43
|
|
Временная регистрация
Регистрация: 30.07.2007
Сообщений: 51
Сказал спасибо: 1
Сказали Спасибо 12 раз(а) в 7 сообщении(ях)
|
Re: О программировании AVR на C++.
Сообщение от kison
|
В общем реальный плюс один - лентяям, не желающим один раз за проект написать несколько дефайнов, способ понравится.
|
Да я ленивый - это минус,
Но я пишу на Си плюс плюс...
ЗЫ
Писать дефайны один раз, а использовать - много.
|
|
|
|
21.03.2010, 13:47
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: О программировании AVR на C++.
Ногодрыганье, как по мне, это не самое главное предназначение МК. И здесь, ваши примеры - просто примеры. Мне кажется многие пробовали соптимизировать работу с портами и, похоже, большинство приходит к старому сишному стилю. К дефайнам.
Как для меня, то это не только программирование. Файл определений ног - это визитная карточка проекта (с точки зрения схемотехники) или вариантов платы. То есть он хорош сам по себе.
И потом - если мы стремимся к абстракции - то зачем вводить абстракцию на уровне пина? Почему не выбрать сразу ф-цию выполняемую этим пином?
Например ввести "светодиод" со своими методами. ШД.
Это я не в критику. Тема интересна, просто пример с портами - чуть за уши притянут, на мой взгляд. Давайте дальше двигайтесь.
|
|
|
|
21.03.2010, 14:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: О программировании AVR на C++.
Современная тэндэнция - отходить от прямого ногодрыгания.
Фактически это осталось только в управлении реле,светодиодами,кнопки и джамперы.
Там особо скорость и оптимизация не нужна.
|
|
|
|
21.03.2010, 14:30
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: О программировании AVR на C++.
neiver, отлично все пишете, пожалуйста, продолжайте!
Я сам в свое время от дефайнов отказался, так как время не резиновое, и ножки контроллера, кстати, тоже, всё на один порт редко когда удается повесить.
__________________
.
![](signaturepics/sigpic59615_7.gif)
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
21.03.2010, 15:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: О программировании AVR на C++.
Сообщение от alexgap
|
Я сам в свое время от дефайнов отказался, так как время не резиновое, и ножки контроллера, кстати, тоже, всё на один порт редко когда удается повесить.
|
Вы бы свою позицию объяснили что ли. А то все, что выше точно так же реализуется через дефайны. И нельзя сказать что писанины больше - практически столько же. Собственно и недостатки будут те же - работа с каждым выводом отдельно. Это иногда существенно замедляет выполнение. Вообще пример с GPIO очень удачный. Что может быть проще махания ножками? Однако и тут можно заблудиться.
|
|
|
|
21.03.2010, 16:08
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Re: О программировании AVR на C++.
Сообщение от kison
|
Вы бы свою позицию объяснили что ли. А то все, что выше точно так же реализуется через дефайны
|
Нужно было пару раз подключать HD44780-совместимый LCD через I2C расширитель ввода-вывода. Через дефайны, конечно же, это было нереально. А вот через абстракцию пина - запросто.
Скорость, конечно же, в этом случае страдает.
__________________
.
![](signaturepics/sigpic59615_7.gif)
В мире всего два типа людей: те у кого был ZX Spectrum, и те у кого его не было.
|
|
|
|
21.03.2010, 16:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: О программировании AVR на C++.
Сообщение от alexgap
|
Нужно было пару раз подключать HD44780-совместимый LCD через I2C расширитель ввода-вывода. Через дефайны, конечно же, это было нереально. А вот через абстракцию пина - запросто.
|
Любопытно. Я в таком случае пользуюсь абстракцией всего индикатора ![Улыбка](images/smilies/icon_smile.gif) Хотя и с пинами это тоже реально - #define это по сути обертка, а внутри может сидеть что угодно вплоть до функций. А с индикатором пример все же приведите. Хотя бы кусочек - строб E. Думаю не только мне любопытно.
|
|
|
|
21.03.2010, 17:33
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: О программировании AVR на C++.
Сообщение от kison
|
Любопытно. Я в таком случае пользуюсь абстракцией всего индикатора Хотя и с пинами это тоже реально - #define это по сути обертка, а внутри может сидеть что угодно вплоть до функций. А с индикатором пример все же приведите. Хотя бы кусочек - строб E. Думаю не только мне любопытно.
|
+10.
Написание файла определений ножек и функций займёт от силы 20 минут по схеме принципиальной. Никакого отношения к библиотеке LCD в частности - не имеет. То есть библиотека не переписывается ни в коем разе. Я даже не представляю, как надо её написать, чтобы при изменении ножек - ломалась библиотека. Более того, такая библиотека как HD44780, при правильном написании, будет работать на любом МК. Если идёт управление то выглядит типа "SET_RS;" Если данными, то типа функцией.
Если работаете с портом, то объявляйте соответственно типа
DDRHDDATA &= ~MASKA_HDDATA;
PORTHDDATA |= MASKA_HDDATA;
То есть в самом файле я определяю и порты и работу с ними. Указываю особенности при работе с разными версиями пп. Например выпускался проект сначала на 1 плате, потом переразвели и некоторые ф-ции поменяли. Но ф-ции и проект - это разные вещи. Так зачем мне несколько проектов поддерживать? Вот эти особенности я описываю в файле определений. А проект общий. Иначе пойдут несовместимости, затрудняется устранение хомутов и поддержка проектов.
|
|
|
|
21.03.2010, 17:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.06.2005
Сообщений: 3,399
Сказал спасибо: 5
Сказали Спасибо 431 раз(а) в 306 сообщении(ях)
|
Re: О программировании AVR на C++.
Проблемы возникают когда ножки контроллера разбросаны по разным портам,а до этого были в одном.Бывает в одном случае работаем по прерыванию,в другом случае просто задержкаи тд...
Вообщем универсальную библиотеку трудно сделать. А даже если сделать то появиться щадача где она не пройдет по обьему или скорости.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:17.
|
|