Как указать имя таймера в зависимости от чипа, в который он будет компилироваться?
Мне нужно включить прерывание по таймеру для чипа, а тем временем я тестирую код на Arduino Nano, а не (кормить чип, тестировать чип)++
.
Итак, как часть кода я должен TIMSK0 |= (1 << OCIE0A);
, который отлично работает на Arduino Nano, но его нужно изменить на TIMSK
(без 0) для ATtiny45.
Я планировал сделать что-то вроде
#define NANO//Поместите // перед AtTiny45
#ifdef NANO
const char in = A0;
const char out = 3;
const char pwr = 10;
char *timer = &TIMSK0;
#else
const char in = 3;
const char out = 0;
const char pwr = 1;
char *timer = &TIMSK;
#endif
//...
*timer |= (1 << OCIE0A);
Итак, вот мои три вопроса:
- Занимают ли #эти команды место на чипе?
- Подходит ли указатель для таких вещей?
- Правильно ли я делаю?
@B7th, 👍1
1 ответ
Лучший ответ:
Как дополнение к ответу Delta_G:
Имена
TIMSK0
,OCIE0A
и т. д. уже являются макросами препроцессора. поэтому для согласованности имеет смысл определить собственный препроцессор макросы для них. Я склонен быть ленивым и использовать один из уже определенных имена, например#ifdef TIMSK0 // support both ATtiny{25,45,85} and ATmega328P # define TIMSK TIMSK0 #endif
Указатель
const
для&TIMSK0
подойдет.Макросы, идентифицирующие MCU, имеют значение 1. Таким образом, вы есть выбор между этими тремя идиомами:
#ifdef __AVR_ATtiny45__ ... #endif #if defined(__AVR_ATtiny45__) ... #endif #if __AVR_ATtiny45__ ... #endif
Третий вариант удобен, когда вы хотите обратиться к нескольким MCU. модели с одинаковым кодом:
#if __AVR_ATtiny25__ || __AVR_ATtiny45__ || __AVR_ATtiny85__ ... #endif
- ATtiny85 AC Phase Control для регулировки яркости лампочки
- Прерывать каждую секунду на ATTiny84 (и спать все остальное)
- Прерывания таймера Arduino для PID
- Работа двигателя в течение 3 секунд непрерывно с прерыванием и без него
- Attiny85 Таймер 1 компаратор B не работает должным образом (в то время как A работает)
- Проблема с прескалером таймера Elegoo Nano
- Использование прерывания внутреннего таймера для чтения аналогового датчика
- Arduino для ATtiny изменения поведения pin-прерывания?