WinAvr в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Можно обойтись без atomic - на время чтения запретить прерывания, тогда во время считывания никто не помешает. Поскольку происходит это лишь 2-3 такта, задержка прерываний будет незначительна.
Аватара пользователя
DruidCat
Встал на лапы
Сообщения: 116
Зарегистрирован: Чт май 03, 2012 06:27:23
Откуда: Челябинск

Re: WinAvr в вопросах и ответах

Сообщение DruidCat »

А какой способ быстрее и экономичней в условиях большого количества разных и частых прерываний?
PS: я нашел ключик -D с частотой МК.
-DF_CPU=20000000UL
Это строчка находилась в файле subdir.mk, там же есть ключик -mmcu=atmega328p. Но запись:
#if mmcu==atmega328p
.......
#endif
Не работает. :)
Кот должен прожить жизнь без сожаления.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

Alexeyslav писал(а):Можно обойтись без atomic - на время чтения запретить прерывания, тогда во время считывания никто не помешает. Поскольку происходит это лишь 2-3 такта, задержка прерываний будет незначительна.

ATOMIC_BLOCK делает как раз именно это, но лучше и аккуратнее, чем если делать это вручную при помощи cli()/sei()
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: WinAvr в вопросах и ответах

Сообщение radio-kot »

DruidCat писал(а): запись: #if mmcu==atmega328p Не работает. :)
дак посмотри как сделано в хидерах winavr - там полно ветвлений по типу МК - иф элс. Наверно avr.h :beer:
Будете проходить мимо- проходите!
Аватара пользователя
DruidCat
Встал на лапы
Сообщения: 116
Зарегистрирован: Чт май 03, 2012 06:27:23
Откуда: Челябинск

Re: WinAvr в вопросах и ответах

Сообщение DruidCat »

Ура, получилось!!! :)
#if defined(__AVR_ATmega328P__)
.......
#endif
Спасибо!
Кот должен прожить жизнь без сожаления.
Аватара пользователя
radio-kot
Собутыльник Кота
Сообщения: 2584
Зарегистрирован: Вт сен 14, 2010 10:27:19

Re: WinAvr в вопросах и ответах

Сообщение radio-kot »

Ляпота то какая!!!!!!!!!!!!!!! :beer:
Будете проходить мимо- проходите!
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Доброго времени суток, подскажите пожалуйста корректна ли вот такая запись PORTA^=0x10,т.е. я хочю
включать выключать нагрузку на 4 пине порта А
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: WinAvr в вопросах и ответах

Сообщение ИС-пытатель »

корректна.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

TICLIR писал(а):корректна ли вот такая запись PORTA^=0x10,т.е. я хочю
включать выключать нагрузку на 4 пине порта А
слово хочу пишется через у, так что часть вашей записи некорректна :)))

кроме того (чисто для справки) для последних версий attiny и atmega для поочередного перебрасывания пина из 0 в 1 и наоборот можно использовать еще более простую запись: PINA = 0x10;

я бы на вшем месте использовал более понятное обозначение нужного бита в порту, тем более, что так и принято в WinWVR: PORTA ^= _BV(PA4); или PINA = _BV(PA4); - сразу видно, какой именно бит вы хотите тогглить
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: WinAvr в вопросах и ответах

Сообщение ИС-пытатель »

ARV писал(а):PINA = 0x10;


А вот это уже интересно. Это на уровне железа поддерживается? Как будет выглядеть в ассемблерном варианте?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

ИС-пытатель писал(а):А вот это уже интересно. Это на уровне железа поддерживается? Как будет выглядеть в ассемблерном варианте?

конечно на уровне железа. в ассемблере будет примерно так

Код: Выделить всё

 ldi r17, 1
out PINA, r17
можно и sbi использовать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

Re: WinAvr в вопросах и ответах

Сообщение ИС-пытатель »

Разработчики сделали еще одни грабли. :)))
TICLIR
Встал на лапы
Сообщения: 134
Зарегистрирован: Вс авг 01, 2010 16:05:25

Re: WinAvr в вопросах и ответах

Сообщение TICLIR »

Все понятно Спасибо.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение ARV »

ИС-пытатель писал(а):Разработчики сделали еще одни грабли. :)))
грабли - это использовать не по назначению биты в регистрах периферии :) а тут - весьма удобно, если требуется очень быстро генерировать частоту. например, программный SPI можно слегка пришпорить :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: WinAvr в вопросах и ответах

Сообщение FreshMan »

есть ли макрос для установки нескольких битов ?
Tell Me The Truth
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

есть - пишется как "|| <маска битов>"
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: WinAvr в вопросах и ответах

Сообщение FreshMan »

не совсем понял, можна с примером ?
Tell Me The Truth
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Что с вами? Это же элементарная логическая операция "ИЛИ"...
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: WinAvr в вопросах и ответах

Сообщение FreshMan »

Alexeyslav писал(а):Что с вами?

двоишник я :oops:
для одного мне известно как
#define SetBit(reg, bit) reg |= (1<<(bit))
а для нескольких будет так ?
#define SetBit(reg, bit0, bit1, bit2) reg |= (1<<(bit0)|(1<<(bit1)|(1<<(bit2))
Tell Me The Truth
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: WinAvr в вопросах и ответах

Сообщение Alexeyslav »

Ну, как-то так да. Проверить легко.
Ответить

Вернуться в «AVR»