Например TDA7294

Форум РадиоКот • Просмотр темы - Пример работы с I/O портами AVR на C++
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пн июн 23, 2025 10:00:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , 2,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 20:16:37 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
ArtDen писал(а):
И как это относится к вопросу библиотеки C++ для работы с портами AVR?! :shock:

Это же ваше???
Цитата:
Недавно столкнулся с C++ - библиотекой для работы с портами ввода/вывода на STM32. Очень удобная штука.

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 20:36:10 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
То, что можно по ошибке написать


Ну, знаете ли, по ошибке можно и Off вместо On написать. :)

Цитата:
И можно всё-таки пояснить зачем нужно знать ассемблер, чтобы программировать на МК?


В частности, чтобы понимать, почему C++ под такие мелкие системы неприменим. :)

Чтобы иметь возможность оценить эффективность кода, глянув в дизассемблер. Чтобы понимать, почему GCC лучше, чем mikroBASIC, и почему mikroBASIC лучше, чем AlgorithmBuilder. А также почему IAR порой лучше всех перечисленных компиляторов вместе взятых.

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

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 20:39:35 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
YS писал(а):
В частности, чтобы понимать, почему C++ под такие мелкие системы неприменим. :)

Можно чем-нибудь подтвердить эту мысль?

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 20:46:59 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Можно чем-нибудь подтвердить эту мысль?


Я ведь уже приводил дизассемблированный код для ООП-варианта и чистого Си. Видно, что в ООП-варианте для каждой строки генерируется отдельный блок одинакового кода. Зачем? Это бесполезная трата памяти и времени. И это в самом простом проекте, проще которого не бывает.

Представляете, что произойдет, если вдруг захотеть породить экземпляр класса? :)))

Еще раз призываю - поглядите на Arduino. Там как раз упрощенный C++. Дизассемблируйте что-то, написанное на Wiring, и ужаснитесь. :)))

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
В продаже новые LED-драйверы XLC компании MEAN WELL с диммингом нового поколения

Компания MEAN WELL пополнила ассортимент своей широкой линейки светодиодных драйверов новым семейством XLC для внутреннего освещения. Главное отличие – поддержка широкого спектра проводных и беспроводных технологий диммирования. Новинки представлены в MEANWELL.market моделями с мощностями 25 Вт, 40 Вт и 60 Вт. В линейке есть модели, работающие как в режиме стабилизации тока (СС), так и в режиме стабилизации напряжения (CV) значением 12, 24 и 48 В.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 20:56:39 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
YS писал(а):
Я ведь уже приводил дизассемблированный код для ООП-варианта и чистого Си)
Код не аналогичный.
Чтобы код был аналогичный, вместо LED_PORT^=(LED1_PIN | LED2_PIN); должно быть LED_PORT^=LED1_PIN; LED_PORT^=LED2_PIN. К тому-же мне никто не мешает написать класс Pins для работы с несколькими пинами одновременно (вместо Pin как в первом примере). Тогда мой пример будет выглядеть как
Код:
typedef Pins<'B', 0x1 | 0x2> LED1AND2Pins;
....
LED1AND2Pins::ConfOut();
for (;;)
{
   LED1AND2Pins::Cpl();
   _delay_ms(500); // Делаем задержку
}

Ассемблерный код тогда станет полностью аналогичный с Pure-C

В общем, никто так и не понял в чём профит такого подхода :facepalm:

PS: подтверждения ненужности C++ для МК так и не получил :)

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:04:21 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
подтверждения ненужности C++ для МК так и не получил


Мне за Вас погуглить сравнение эффективности Wiring (упрощенный C++ для AVR) и pure C? :)

Цитата:
|Ассемблерный код тогда станет полностью аналогичный с Pure-C


Уверены?

Потом, мы же говорим не о светодиодной мигалке, а о чем-то приличном? Напишите, например, вывод в регистр HC595, и сравним. :) Хотя это тоже на уровне мигалки.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:14:14 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
YS писал(а):
Мне за Вас погуглить сравнение эффективности Wiring (упрощенный C++ для AVR) и pure C? :)
А разве разговор идёт о Wiring?
YS писал(а):
Цитата:
|Ассемблерный код тогда станет полностью аналогичный с Pure-C

Уверены?
Конечно.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:20:12 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
А разве разговор идёт о Wiring?


Я ведь даже в скобках на всякий случай указал, что такое Wiring. :) Кстати компилятор там - тот же GCC, так что сравнение корректно.

Только не говорите, что использующий плюсовые фичи остановится на их применении к портам. :) Хотя, в общем, и тут особых преимуществ перед дефайнами не видно.

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

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:28:16 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
YS писал(а):
Я ведь даже в скобках на всякий случай указал, что такое Wiring. :) Кстати компилятор там - тот же GCC, так что сравнение корректно.
Не вижу логической связи между утверждениями "Wiring генерирует тормозной код" и "Компилятор C++ генерирует тормозной код"
YS писал(а):
Только не говорите, что использующий плюсовые фичи остановится на их применении к портам. :)
Не совсем понял
YS писал(а):
Смысл дефайнов в том, что абсолютное большинство кода, ими описанного, должно выполниться препроцессором либо оптимизатором и не войти в результирующий бинарник. А вот ООП-фишки такого преимущества лишены.
Тоже не понял. Код (бинарный) выполняется процессором. Если имелся ввиду исходный код, то он не выполняется ни оптимизатором, не препроцессором :shock: И почему ООП-фишки лишены такой возможности? (кстати, какой именно возможности?)

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:28:39 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
ArtDen писал(а):
В общем, никто так и не понял в чём профит такого подхода :facepalm:

Да, не смогли раскрыть тему архинужности С++ полностью... бывает... :))
Цитата:
PS: подтверждения ненужности C++ для МК так и не получил :)

А нужно??? Кому и зачем???

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:31:32 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
ArtDen писал(а):
Не совсем понял


Цитата:
Тоже не понял.

Название темы... хоть помните??? :)))

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:35:26 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
HHIMERA, не надо гнать оффтопик. Для выражения любви/ненависти к одному из языков программирования - ассемблера, С или C++ есть две другие темы: http://www.radiokot.ru/forum/viewtopic.php?f=20&t=5931 и http://www.radiokot.ru/forum/viewtopic.php?f=20&t=37190
Эта же тема про библиотеку для работы с портами ввода/вывода для AVR на C++.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:43:22 
Держит паяльник хвостом
Аватар пользователя

Карма: 15
Рейтинг сообщений: 70
Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО
Рейтинг сообщения: 0
Цитата:
Эта же тема про библиотеку для работы с портами ввода/вывода для AVR на C++.


Так Вы нам не доказали чем она лучше традиционного подхода. Мы бы поняли , если бы Ваш код компилятор свёл к такому.
Код:
Loop:
sbi PINx,LED
rjmp LOOP

Т.к Вы не знаете asm , поясню- это обычная мигалка светодиодом


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 21:48:58 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
2ArtDen
Если вы совсем не в теме, то и не стоит так нервничать...
И если у С++ есть неоспоримые преимущества, так покажите их...
И любовь/ненависть тут совсем не при чём... есть такие понятия как "целесообразность" и "наилучший/быстрый результат"...

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 22:06:29 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Не вижу логической связи между утверждениями "Wiring генерирует тормозной код" и "Компилятор C++ генерирует тормозной код"


Wiring ничего не генерирует. :) Wiring - диалект C++, который компилируется GCC...

Цитата:
Не совсем понял


Я имел в виду, что скорее всего, парадигма ООП будет распространена на всю программу. : )

Цитата:
Тоже не понял. Код (бинарный) выполняется процессором. Если имелся ввиду исходный код, то он не выполняется ни оптимизатором, не препроцессором


Тогда я Вас очень удивлю. Если Вы напишете

Код:
a=((2+3)+4*8) | (1<<2);


то компилятор на этапе разбора (!) вычислит значение (((2+3)+4*8) | (1<<2)), и в код пойдет

Код:
a=37;


Да-да, компилятор выполнит написанный Вами код. А еще он может оптимизировать повторяющиеся части выражений. И при написании макросов вовсю этим пользуются. Макрос - не переменная. Он подставляется в исходник в виде строки.

***

Тов. ArtDen, не обращайте внимания, тов. HHIMERA просто перенервничал. :)

А в целом - я ни в чем Вас не обвиняю и не призываю прям щас верить мне на слово и отказываться от С++ (более того, есть области, где он незаменим). Вы написали код, вложили усилия, что-то узнали. Вы молодец. :) Просто почитайте про Wiring, внутреннюю кухню объектов, оптимизации компиляторов и принципы разбора кода. И все-таки поглядите на ассемблер. : ) А я, пожалуй, закончу тут проповедовать. :)

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 22:26:13 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
HHIMERA писал(а):
2ArtDen
Если вы совсем не в теме, то и не стоит так нервничать...
В какой именно я "не в теме": C/C++, работа с портами ввода/вывода или программирование для МК? :)
HHIMERA писал(а):
И если у С++ есть неоспоримые преимущества, так покажите их...
Ещё раз повторяю. Тема не про преимущества/недостатки С++ перед си и ассемблером. Тема про конкретную библиотеку для работы с портами.
HHIMERA писал(а):
И любовь/ненависть тут совсем не при чём... есть такие понятия как "целесообразность" и "наилучший/быстрый результат"...
Есть конечно. Буду рад услышать "целесообразность" и "наилучший/быстрый результат" применительно к данной теме :)

ILYAUL писал(а):
Так Вы нам не доказали чем она лучше традиционного подхода.

Повторюсь:
1. Нога определяется только в одном месте (1 строка). На си ради этого надо писать три строки:
#define XXXXX_PORT PORTA
#define XXXXX_DIR DDRA
#define XXXXX_BIT 0x01
2. Меньше вероятность допустить ошибки перепутав порты или биты
3. Лучшая читаемость
4. Проще переносить код между аппаратными платформами

YS писал(а):
Тогда я Вас очень удивлю. Если Вы напишете

Код:
a=((2+3)+4*8) | (1<<2);


то компилятор на этапе разбора (!) вычислит значение (((2+3)+4*8) | (1<<2)), и в код пойдет

Код:
a=37;


Да-да, компилятор выполнит написанный Вами код. А еще он может оптимизировать повторяющиеся части выражений. И при написании макросов вовсю этим пользуются. Макрос - не переменная. Он подставляется в исходник в виде строки.

Про выполнение исходного кода компилятором написан бред. Он ничего не выполняет. Далее по пунктам:
YS писал(а):
компилятор на этапе разбора (!) вычислит значение (((2+3)+4*8) | (1<<2)),

Бред. На этапе разбора компилятор строит AST-дерево. При этом он ничего не вычисляет. Значение (((2+3)+4*8) | (1<<2)) будет вычислено на этапе многостадийной оптимизации в одной из стадий свёртки констант. Повторю ещё раз: компилятор ничего не выполняет!
YS писал(а):
И при написании макросов вовсю этим пользуются. Макрос - не переменная. Он подставляется в исходник в виде строки.

Когда это я писал, что макрос - это переменная?

И вообще как это относиться к теме?

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 22:47:08 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
ArtDen писал(а):
Повторюсь:
1. Нога определяется только в одном месте (1 строка). На си ради этого надо писать три строки:
#define XXXXX_PORT PORTA
#define XXXXX_DIR DDRA
#define XXXXX_BIT 0x01

Надуманно... одной строкой больше, одной меньше... не впечатляет...
При групповой инициализации может быть и наоборот...
Цитата:
2. Меньше вероятность допустить ошибки перепутав порты или биты

Надуманно... есть статистические данные по этому поводу, которым можно верить??? "Капитана Очевидность не предлагать!"(С)
Цитата:
3. Лучшая читаемость

Надуманно... для этого есть абстракция...
Цитата:
4. Проще переносить код между аппаратными платформами

Надуманно... С++ не пользуюсь, а трудностей с переносом не ощущаю... "Что я не так делаю?" (С) :)))

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 22:54:10 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
HHIMERA писал(а):
ArtDen писал(а):
3. Лучшая читаемость

Надуманно... для этого есть абстракция...

Во. Я второй раз уже слышу это слово в этой теме. Так что есть абстракция применительно к читаемости кода? Можно с примерами.
HHIMERA писал(а):
Надуманно... С++ не пользуюсь, а трудностей с переносом не ощущаю... "Что я не так делаю?" (С) :)))

Ещё раз повторюсь: речь идёт не про С++, а про библиотеку работы с портами. Вопросы по С/С++ обсуждаются в соседней теме.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Сб фев 02, 2013 23:22:07 
Друг Кота

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
ArtDen писал(а):
Ещё раз повторюсь: речь идёт не про С++, а про библиотеку работы с портами. Вопросы по С/С++ обсуждаются в соседней теме.

Ладно... пусть будет так... вам виднее... :))
Но тема, вообще то, называется "Пример работы с I/O портами AVR на C++"... может просто пример был неудачный... :)

_________________
"Я не даю готовых решений, я заставляю думать!"(С)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Вс фев 03, 2013 08:16:52 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
off не для холивара:
Почему Си - хорошо, а Си++ - плохо http://www.codenet.ru/progr/cpp/c-vs-cpp/
Пример работы с I/O портами AVR на Arduino http://www.arduino.cc/en/Tutorial/Button
имхо выглядит нагляднее


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , 2,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y