Например TDA7294

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

Текущее время: Вт июл 29, 2025 17:54:57

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


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



Начать новую тему Ответить на тему  [ Сообщений: 58 ]    , , 3
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Пример работы с I/O портами AVR на C++
СообщениеДобавлено: Вс фев 03, 2013 09:32:41 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
oleg110592 писал(а):
off не для холивара:
Почему Си - хорошо, а Си++ - плохо http://www.codenet.ru/progr/cpp/c-vs-cpp/
:)) :))
Более аргументированной статьи по поводу C vs C++ я не встречал :)

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


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

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
вопрос, немного не по теме - есть ли еще библиотеки классов C++ для AVR?


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

Карма: 8
Рейтинг сообщений: 65
Зарегистрирован: Пн янв 10, 2011 03:06:36
Сообщений: 736
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
ArtDen писал(а):
Более аргументированной статьи по поводу C vs C++ я не встречал :)
Да уж, Ваня Жуков расставил-таки точки над i в своей версии письма на деревню дедушке...

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

_________________
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle


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

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Имхо, применительно для AVR Ваня Жуков прав. Писать на Си++ для тини13/26/2313 вряд ли кто будет, там и Си не очень. Для компьютера - да Си++ хорош и то из-за наличия библиотек классов. И то вытесняется другими языками программирования. Для AVR полно библиотек на Си, наверное можно использовать в программе написанной на Си++, а надо ли. Простите за off.
По теме: http://kazus.ru/forums/showthread.php?t=17357


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

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Да... Паша там молодец!!! :music:
Раздал "сёстрам по серьгам"... :)))
На ДиАхтунге тоже тема проскакивала... но в "ворошиловские стрелки" толпой народ, почему-то, не повалил... видать "не поняли счастья своего безмерного и безмятежного"...

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


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

Карма: 8
Рейтинг сообщений: 65
Зарегистрирован: Пн янв 10, 2011 03:06:36
Сообщений: 736
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
oleg110592 писал(а):
Имхо, применительно для AVR Ваня Жуков прав. Писать на Си++ для тини13/26/2313 вряд ли кто будет
Таки да. Но дело в том, что (к счастью) Tiny13 на сегодняшний день не единственный процессор (и даже не самый мощный), к тому же далеко не все программы укладываются в килобайт кода, а крайне ценное мнение Вани высказано о языке в целом безотносительно области его применения. И опубликовано письмецо отнюдь не в разделе "Программировуем Tiny13", а, заметьте, "Языки программирования". Здесь весьма уместно мнение профессора Преображенского по аналогичному поводу:
Цитата:
вы в присутствии двух людей с университетским образованием позволяете себе с развязностью совершенно невыносимой подавать какие-то советы космического масштаба и космической же глупости
Да и вообще в качестве авторитетов в части программирования лучше ссылаться на Дейкстру, Вирта или Кнута, как-то весомее получается. Каждый должен заниматься своим делом:
Цитата:
Ванька покривил рот, потер своим черным кулаком глаза и всхлипнул.
"Я буду тебе табак тереть, -- продолжал он, -- богу молиться, а если что, то секи меня, как Сидорову козу. А ежели думаешь, должности мне нету, то я Христа ради попрошусь к приказчику сапоги чистить, али заместо Федьки в подпаски пойду."
Высечь и впрямь не мешало бы... Так, для порядку.

_________________
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle


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

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

Да как-то это:
ArtDen писал(а):
1. Код проще читается. Не надо напрягать мозги при виде RST_PORT &= ~RST_PINMASK;. Выражение RST_Pin::Off(); гораздо понятнее.
2. Нереально допустить такое ошибки как RST_PORT &= RST_PINMASK;
С каких это пор знание ассемблера обязательно для программирования на МК? :shock:

не вяжется с этим:
Цитата:
Дейкстра многократно предостерегал от попыток превратить разработку программ в некий тривиальный процесс; по его мнению, программирование, в сути своей — чрезвычайно сложная научная и инженерная деятельность, и никакие новые методы и инструменты не смогут кардинально изменить это положение — они лишь освобождают программиста от части рутинной работы. Попытки же превратить программирование в простое занятие, доступное каждому, обречены на провал.

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


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

Карма: 8
Рейтинг сообщений: 65
Зарегистрирован: Пн янв 10, 2011 03:06:36
Сообщений: 736
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
Не вяжется, но не язык тому виной, и уж тем более не объектная парадигма.

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

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

Предлагаемое решение не идеально, но вовсе не по причинам, указанным в письме Вани Жукова Константину Макарычу.

_________________
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle


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

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
написал же off не для холивара:
мне, например, больше понравились комментарии к злосчастной статье Вани.
Тема С++ для микроконтроллеров мне интересна. Где бы посмотреть примеры на С++ для AVR (про ScmRTOS знаю).
(к счастью) Tiny13 на сегодняшний день не единственный процессор (и даже не самый мощный)
Получается С++ придется применять на жирных Mega (особенно если использовать STL и исключения), а по мнению профи, на этом форуме и не только на этом, вместо Mega надо применять ARM.


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

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

Предлагаемое решение не идеально, но вовсе не по причинам, указанным в письме Вани Жукова Константину Макарычу.

Так, всё таки... решение не идеально... отвергаем???

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


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

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

И толку будет больше, чем от Меги на С++...

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


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

Карма: 8
Рейтинг сообщений: 65
Зарегистрирован: Пн янв 10, 2011 03:06:36
Сообщений: 736
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
oleg110592 писал(а):
Получается С++ придется применять на жирных Mega (особенно если использовать STL и исключения)
Тут вовсе не в жире дело. Языки общего назначения (как С и С++) создаются для решения определенных классов задач, а не под конкретные микросхемы.

Есть задачи, которые превосходно укладываются в рамки объектно-ориентированного анализа и проектирования. Для них использование С++ вполне органично. Есть задачи, которые более естественно решаются структурными методами. Туда тоже можно притянуть объекты за уши, но получится не слишком элегантно. Чтобы сделать правильный выбор, нужно достаточно хорошо знать и то, и другое. Чем знаний меньше, тем решение необоснованнее (и одновременно категоричнее, что мы и видели в злополучном письме дедушке).

HHIMERA писал(а):
Так, всё таки... решение не идеально... отвергаем???
Я думаю, каждый должен решить это для себя сам.

Лично мне оно не слишком понравилось, поэтому лично я воздержусь от его копирования. Но набираться наглости и говорить от лица всего прогрессивного человечества, как Ваня, все-таки не стану, тем более что оно (человечество) меня на это не уполномочило. Если кому-то решение пришлось впору, это его осознанный выбор.

Любая абстракция хороша, когда помогает решать задачи, и плоха, когда мешает. У меня не возникло ощущения, что мне она окажется полезной в своем нынешнем виде.

_________________
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle


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

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Добавил active state (активное состояние) для пина, чтобы соответствовать оригинальной библиотеке для STM32 (и изначальным макросам для AVR по мотивам которых эта либа была написана).
Теперь можно добавлять 'L' или 'H' (по умолчанию стоит 'H'), чтобы указывать активное состояние пина ('H' - 1, 'L' - 0):
Код:
typedef Pin<'B', 0, 'L'> LED1Pin;
typedef Pin<'B', 1, 'H'> LED2Pin; // 'H' можно не писать: Pin<'B', 1>

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


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

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Не совсем в тему, но близко: http://www.microcontrollercentral.com/a ... id=258378&


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

Карма: 8
Рейтинг сообщений: 65
Зарегистрирован: Пн янв 10, 2011 03:06:36
Сообщений: 736
Откуда: Ростов-на-Дону
Рейтинг сообщения: 0
Аналогичная заметка от гуру: James W. Grenning. Why are you Still Using C?

Мой реферат статьи и ее оригинал.

_________________
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle


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

Карма: -18
Рейтинг сообщений: 29
Зарегистрирован: Вс дек 05, 2010 06:10:34
Сообщений: 4583
Откуда: ЮВ
Рейтинг сообщения: 0
Цитата:
Опрос, проведенный Embedded.com, показал, что 68% респондентов используют для разработки встроенного ПО язык С. По какой причине они предпочитают C, а не C++? Частично это объясняется доступностью инструментальных средств. Но помимо этого многие разработчики даже не подозревают, какие возможности открывает перед ними объектно-ориентированный подход.

Угу... видать не все очки носят... не видят просто... :))
Цитата:
Подчас репутация C++ страдает из-за того, что он услужливо выполняет за вас некоторые весьма дорогостоящие операции (например. передачу громоздких объектов по значению). Есть способы надежно защититься от этой непрошенной помощи, например, объявив закрытый конструктор копирования для таких классов. Аналогично можно защититься от возврата объекта по значению.

Вот только "Бюро медвежьих услуг" и не хватало... :))
Цитата:
Резюме автора: программисты используют C++ для встроенных разработок намного реже, чем следовало бы, причем это связано не с объективными недостатками языка и/или компилятора, а скорее с незнанием и склонностью верить ничем не подтвержденным слухам.

Вообще смахивает на примитивный маркетинг... типа "Тогда мы идём к вам!"(С)... :))
А пытаться доказывать, что 68% респондентов "тупо ошибаются и просто верят слухам"... по крайней мере - глупо...

Если ещё и вспомнить, что ни С, ни С++ не находятся в списке рекомендованных для применения в ответственных приложениях... и учесть, что поиск багов и ошибок, учитывая большую развитость и сложность С++, более затруднителен, то становится очевиден и понятен выбор 68% респондентов... использующих для разработки встроенного ПО язык С...

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


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

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
По замечаниям добавил 2 дополнительные функции:
ConfInPulledUp - настраивает пин на вход с подтяжкой к + питания
Пример:
Код:
typedef Pin<'B', 0> InpPin;

InpPin::ConfInPulledUp(); // вход с подтяжкой к +
bool pin_value = InpPin::Signaled();

Latched - для пина, настроенного на выход возвращает последнее записанное туда состояние
Пример:
Код:
typedef Pin<'B', 1, 'L'> LED1Pin;

LED1Pin::ConfOut();
LED1Pin::On();
bool pin_out_value = LED1Pin::Latched(); // читаем выходное состояние пина

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


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

Карма: 24
Рейтинг сообщений: 286
Зарегистрирован: Чт июн 10, 2010 08:55:35
Сообщений: 1810
Откуда: Сибирские Афины
Рейтинг сообщения: 0
ArtDen писал(а):
1. Нога определяется только в одном месте (1 строка). На си ради этого надо писать три строки:
2. Меньше вероятность допустить ошибки перепутав порты или биты
3. Лучшая читаемость
4. Проще переносить код между аппаратными платформами
1) Ну, если точнее, то, в худшем случае, четыре строчки! :)
2) Это можно получить дефайнами.
3) И это можно получить дефайнами.
4) И это можно получить дефайнами тоже.

Если речь идёт о "написал в одном месте правильно и используй где хочешь",
то перефразирую, практически, запретную для этого сайта реплику из известного сериала:
Как, тебе не нравятся дефайны? Просто ты не умеешь их готовить! :))

СпойлерНичего не мешает написать вот так. Кому что-то мешает - читай подпись под сообщением.
Код:
#define LED1 B, 1
#define LED2 B, 2

void main()
{
  char a;
 
  PIN_INIT_AS_INPUT(LED1);
  PIN_PULLUP_ON(LED1);
  a = PIN_GET(LED1);
  PIN_PULLUP_OFF(LED1);
   
  PIN_INIT_AS_OUTPUT(LED1);
  PIN_INIT_AS_OUTPUT(LED2);

  PIN_CLR(LED1);
  PIN_CLR(LED2);

  while (1)
  {
    PIN_NEG(LED1);
    PIN_NEG(LED2);
  }
}
Разворачивается, как положено, в следующий код
Код:
void main()
{
  char a;

  DDRB &= ~(1 << (1));
  PORTB |= (1 << (1));
  a = PINB & (1 << (1));
  PORTB &= ~(1 << (1));

  DDRB |= (1 << (1));
  DDRB |= (1 << (2));

  PORTB &= ~(1 << (1));
  PORTB &= ~(1 << (2));

  while (1)
  {
    PORTB ^= (1 << (1));
    PORTB ^= (1 << (2));
  }
}

_________________
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)


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

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


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

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


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

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


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