Макросы, библиотеки, примеры для работы с IO AVR
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Макросы, библиотеки, примеры для работы с IO AVR
Всем привет. Хотел попросить вас поделиться библиотеками, примерами применения макросов для работы с IO AVR. На данный момент мне каждый раз приходится тщательно прописывать каждый используемый пин. Если у вас есть инструменты для облегчения этого процесса просьба поделиться библиотеками и примерами применения. Также, обоснования применения примеров, подходов. Плюсы, минусы.
Считаю, что данный топик будет полезен не только мне, предварительная просьба не засорять данный топик флудом, перепалками. "У кого короче".
Сложности кода не боимся, если есть примеры на плюсах, тоже интересно. В качестве примера для подхода.
Считаю, что данный топик будет полезен не только мне, предварительная просьба не засорять данный топик флудом, перепалками. "У кого короче".
Сложности кода не боимся, если есть примеры на плюсах, тоже интересно. В качестве примера для подхода.
Последний раз редактировалось Demiurg Пт окт 21, 2022 09:32:01, всего редактировалось 1 раз.
- Реклама
Re: Макросы, библиотеки, примеры для работы с IO AVR
Код: Выделить всё
#define _out(port,bit,...) (DDR##port |= 1<<bit)
#define out(x) _out(x)
#define _in(port,bit,...) (DDR##port &= ~(1<<bit))
#define in(x) _in(x)
// поправил
#define LED B,5,H
#define KEY D,2,L
out(LED);
in(KEY);
Последний раз редактировалось OKF Пт окт 21, 2022 10:10:42, всего редактировалось 1 раз.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Макросы, библиотеки, примеры для работы с IO AVR
Благодарствую. Вроде годный пример.
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Макросы, библиотеки, примеры для работы с IO AVR
Не уверен, в тему ли... т.к. тут не совсем про периферию, но и про неё тоже...начало взял из имеющейся задачи, а далее с коментария "описание периферии" пришлось придумывать...
удобство в работе с флагами и периферией в полной мере проявляется в случае если придётся менять привязку имен - в этом случае достаточно изменить только дефайн... (ну, ещё у портов DDRки поправить... их, конечно тоже можно вынести в начало, но я не уверен, что оптимизатор инициализацию портов, описанную в произвольном порядке поймёт правильно).
Добавлено after 3 minutes 50 seconds:
OKF, не очень понял, а куда "H" и "L" пойдут? и для чего они?
Спойлер
Код: Выделить всё
//бинарная математика
#define SB(b,n) b|= (1<<n) //установка бита
#define CB(b,n) b&=~(1<<n) //сброс бита
#define IB(b,n) b^= (1<<n) //инверсия бита
#define QB(b,n) (b&(1<<n)) //проверка бита
#define SF(x) SB(x) //установка флага
#define CF(x) CB(x) //сброс флага
#define IF(x) IB(x) //инверсия флага
#define QF(x) QB(x) //проверка флага
//описание флагов
register uint08_t Flag0 = 0;//переменная с флагами
#define div10_u Flag0,0 //напряжение > 9.99 вольт
#define div10_i Flag0,1 //ток > 9.99 ампер
#define mode_cv Flag0,2 //идет стабилизация по напряжению
#define OnBlnk Flag0,3 //мигание
#define Btn_s_p Flag0,4 //зафиксировано нажатие кнопки
#define Btn_l_p Flag0,5 //зафиксировано длинное нажатие кнопки
//описание периферии
#define BUZZER PORTB,0
#define BUTTON PINB,1
//.............
//работа с битами
CB(DDRB,1);
SB(PORTB,1);
SB(DDRB,0);
//так можно до любого бита добраться, а если ему дать своё имя, то можно будет работать как с флагом:
//работа с флагами
while(1){
if(!QF(BUTTON)) SF(Btn_s_p); //если нажата кнопка - взведем флаг нажатия
if(QF(Btn_s_p)) IF(BUZZER); //если есть флаг - пищим, постоянно перекидывая порт динамика
}удобство в работе с флагами и периферией в полной мере проявляется в случае если придётся менять привязку имен - в этом случае достаточно изменить только дефайн... (ну, ещё у портов DDRки поправить... их, конечно тоже можно вынести в начало, но я не уверен, что оптимизатор инициализацию портов, описанную в произвольном порядке поймёт правильно).
Добавлено after 3 minutes 50 seconds:
OKF, не очень понял, а куда "H" и "L" пойдут? и для чего они?
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Макросы, библиотеки, примеры для работы с IO AVR
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4307671#p4307671"]OKF, не очень понял, а куда "H" и "L" пойдут? и для чего они?[/uquote]
Активный уровень. Типа:
on(LED); //и пофигу как он подключен - к плюсу или общему.
Активный уровень. Типа:
on(LED); //и пофигу как он подключен - к плюсу или общему.
- Реклама
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Макросы, библиотеки, примеры для работы с IO AVR
Понял, эта часть пока не описана...
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Макросы, библиотеки, примеры для работы с IO AVR
[uquote="Ivanoff-iv",url="/forum/viewtopic.php?p=4307687#p4307687"]Понял, эта часть пока не описана...[/uquote]
А вот это уже "додумаете сами"). Вообще, коль demiurg постоянно кичится тем что тусуется на электрониксе, сахаре и пр. проф форумах уж должен знать об Аскольде Волкове. Или нет?
А вот это уже "додумаете сами"). Вообще, коль demiurg постоянно кичится тем что тусуется на электрониксе, сахаре и пр. проф форумах уж должен знать об Аскольде Волкове. Или нет?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1916
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: Макросы, библиотеки, примеры для работы с IO AVR
... и впоследствии изо "всех сил" пытаемся добавить метод "устранения дребезга"if(!QF(BUTTON)) SF(Btn_s_p); //если нажата кнопка - взведем флаг нажатия
Некоторое время назад я пытался таким же образом "автоматизировать" писание кода с много #define, теперь: только при необходимости. В противном случае перенос кода в другой проект начинается с бесконечной кастомизации, почти равносильной написания нового кода. Даже больше теряю время: есть изначально: "что я имел в виду для кода в #define напр. 1-5 лет назад?" Поэтому используем шаблоны, но только если они нам нужны
Re: Макросы, библиотеки, примеры для работы с IO AVR
Ну да. А для некоторых МК нет С++ и шаблонов соответственно и чо?
Ну ежели придуман препроцессор, то зачем то это, всё таки, нужно? И он (препроцессор) есть везде!
Ну ежели придуман препроцессор, то зачем то это, всё таки, нужно? И он (препроцессор) есть везде!
- Ivanoff-iv
- Друг Кота
- Сообщения: 7077
- Зарегистрирован: Пт ноя 11, 2016 05:48:09
- Откуда: Сердце Пармы
Re: Макросы, библиотеки, примеры для работы с IO AVR
veso74, это только как пример применения... для кнопок с подавлением дребезга, опознанием комбинаций и различием короткого нажатия/удержания у меня используется другая библиотека... может выложу позже, если оформлю красиво... (она у меня кусками по проектам таскается т.к. в основном последнее время на тини13 сижу и ради экономии места её постоянно урезаю...)
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Re: Макросы, библиотеки, примеры для работы с IO AVR
Обычно макро используется для в/в. Это удобно.
С тем что бы отделить физику от логики. Большего применения я не вижу.
Т.е., в хедере описал в/в, а в .с описываешь ни от чего не зависимую логику. А затем легко и просто переносишь на другую платформу. Именно для этого и придумали высокоуревневый язык. Однако многие об этом забывают, или используют Си по недомыслию (ограниченного мысления, то бышь).
С тем что бы отделить физику от логики. Большего применения я не вижу.
Т.е., в хедере описал в/в, а в .с описываешь ни от чего не зависимую логику. А затем легко и просто переносишь на другую платформу. Именно для этого и придумали высокоуревневый язык. Однако многие об этом забывают, или используют Си по недомыслию (ограниченного мысления, то бышь).


