WinAvr в вопросах и ответах
Можно обойтись без atomic - на время чтения запретить прерывания, тогда во время считывания никто не помешает. Поскольку происходит это лишь 2-3 такта, задержка прерываний будет незначительна.
- Реклама
А какой способ быстрее и экономичней в условиях большого количества разных и частых прерываний?
PS: я нашел ключик -D с частотой МК.
-DF_CPU=20000000UL
Это строчка находилась в файле subdir.mk, там же есть ключик -mmcu=atmega328p. Но запись:
#if mmcu==atmega328p
.......
#endif
Не работает.
PS: я нашел ключик -D с частотой МК.
-DF_CPU=20000000UL
Это строчка находилась в файле subdir.mk, там же есть ключик -mmcu=atmega328p. Но запись:
#if mmcu==atmega328p
.......
#endif
Не работает.
Кот должен прожить жизнь без сожаления.
ATOMIC_BLOCK делает как раз именно это, но лучше и аккуратнее, чем если делать это вручную при помощи cli()/sei()Alexeyslav писал(а):Можно обойтись без atomic - на время чтения запретить прерывания, тогда во время считывания никто не помешает. Поскольку происходит это лишь 2-3 такта, задержка прерываний будет незначительна.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2584
- Зарегистрирован: Вт сен 14, 2010 10:27:19
дак посмотри как сделано в хидерах winavr - там полно ветвлений по типу МК - иф элс. Наверно avr.hDruidCat писал(а): запись: #if mmcu==atmega328p Не работает.
Будете проходить мимо- проходите!
Ура, получилось!!! 
#if defined(__AVR_ATmega328P__)
.......
#endif
Спасибо!
#if defined(__AVR_ATmega328P__)
.......
#endif
Спасибо!
Кот должен прожить жизнь без сожаления.
- Реклама
- Сообщения: 2584
- Зарегистрирован: Вт сен 14, 2010 10:27:19
- Сообщения: 134
- Зарегистрирован: Вс авг 01, 2010 16:05:25
Доброго времени суток, подскажите пожалуйста корректна ли вот такая запись PORTA^=0x10,т.е. я хочю
включать выключать нагрузку на 4 пине порта А
включать выключать нагрузку на 4 пине порта А
слово хочу пишется через у, так что часть вашей записи некорректнаTICLIR писал(а):корректна ли вот такая запись PORTA^=0x10,т.е. я хочю
включать выключать нагрузку на 4 пине порта А
кроме того (чисто для справки) для последних версий attiny и atmega для поочередного перебрасывания пина из 0 в 1 и наоборот можно использовать еще более простую запись: PINA = 0x10;
я бы на вшем месте использовал более понятное обозначение нужного бита в порту, тем более, что так и принято в WinWVR: PORTA ^= _BV(PA4); или PINA = _BV(PA4); - сразу видно, какой именно бит вы хотите тогглить
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
А вот это уже интересно. Это на уровне железа поддерживается? Как будет выглядеть в ассемблерном варианте?ARV писал(а):PINA = 0x10;
конечно на уровне железа. в ассемблере будет примерно такИС-пытатель писал(а):А вот это уже интересно. Это на уровне железа поддерживается? Как будет выглядеть в ассемблерном варианте?
Код: Выделить всё
ldi r17, 1
out PINA, r17если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 134
- Зарегистрирован: Вс авг 01, 2010 16:05:25
грабли - это использовать не по назначению биты в регистрах периферииИС-пытатель писал(а):Разработчики сделали еще одни грабли.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
есть - пишется как "|| <маска битов>"
Что с вами? Это же элементарная логическая операция "ИЛИ"...
двоишник яAlexeyslav писал(а):Что с вами?
для одного мне известно как
#define SetBit(reg, bit) reg |= (1<<(bit))
а для нескольких будет так ?
#define SetBit(reg, bit0, bit1, bit2) reg |= (1<<(bit0)|(1<<(bit1)|(1<<(bit2))
Tell Me The Truth
Ну, как-то так да. Проверить легко.


