Ошибка компиляции на плате Teensy LC
Я написал простую программу переключения, используя Teensy LC и транзисторы, но компилятор Arduino не компилируется для Teensy LC. И не только для моей программы, но и для любой программы, включая примеры программ, включенных в Arduino. Я пробовал компилировать для других плат, и все они компилируются нормально. Эта проблема также была воспроизведена на другом компьютере под управлением Windows 10 (я использую Windows 7) с тем же сообщением об ошибке. Сообщение об ошибке и связанный с ним код приведены ниже для справки.
int led1 = 0;
int led2 = 1;
int led3 = 2;
int input1 = 5;
int input2 = 7;
int input3 = 9;
int bypass1 = 23; //выход 1
int toneStack1_1 = 22; //выход 2
int toneStack1_2 = 21; //выход 3
int bypass2 = 20; //вывод 4
int toneStack2_1 = 19; //вывод 5
int toneStack2_2 = 18; //вывод 6
int bypass3 = 17; //вывод 7
int toneStack3_1 = 16; //вывод 8
int toneStack3_2 = 15; //вывод 9
boolean bypass = true; //индикаторы, для которых активен режим
boolean toneStack1 = false;
boolean toneStack2 = false;
boolean toneStack3 = false;
void setup()
{
pinMode(input1, INPUT); //установка входов
pinMode(input2, INPUT);
pinMode(input3, INPUT);
pinMode(led1, OUTPUT); //настройка выходов
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(bypass1, OUTPUT);
pinMode(toneStack1_1, OUTPUT);
pinMode(toneStack1_2, OUTPUT);
pinMode(bypass1, OUTPUT);
pinMode(toneStack2_1, OUTPUT);
pinMode(toneStack2_2, OUTPUT);
pinMode(bypass1, OUTPUT);
pinMode(toneStack3_1, OUTPUT);
pinMode(toneStack3_1, OUTPUT);
digitalWrite(bypass1, HIGH); //устанавливаем режим обхода
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, HIGH);
}
void loop()
{
input1 = digitalRead(input1); //читает ввод с кнопок
input2 = digitalRead(input2);
input3 = digitalRead(input3);
if(input1 == HIGH && bypass == true) //Обход тонального стека 1
{
digitalWrite(bypass1, LOW); //отключает обходные транзисторы
digitalWrite(bypass2, LOW);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack1_1, HIGH); //включаем транзисторы тонального стека 1
digitalWrite(toneStack1_2, HIGH);
bypass = false;
toneStack1 = true;
}
if(input2 == HIGH && bypass == true) //Обход тонального стека 2
{
digitalWrite(bypass2, LOW); //отключает обходные транзисторы
digitalWrite(bypass3, LOW);
digitalWrite(bypass1, HIGH); //должно быть включено, чтобы сигнал поступал в тональный стек 2
digitalWrite(toneStack2_1, HIGH); //включаем транзисторы тонового стека 2
digitalWrite(toneStack2_2, HIGH);
bypass = false;
toneStack2 = true;
}
if(input3 == HIGH && bypass == true) //Обход тонального стека 3
{
digitalWrite(bypass3, LOW); //выключаем обходной транзистор
digitalWrite(bypass1, HIGH); //должно быть включено, чтобы сигнал поступал в тональный стек 2
digitalWrite(bypass2, HIGH);
digitalWrite(toneStack3_1, HIGH); //включаем транзисторы тонового стека 3
digitalWrite(toneStack3_2, HIGH);
bypass = false;
toneStack3 = true;
}
if(input1 == HIGH && toneStack1 == true) //стек тонов 1 для обхода
{
digitalWrite(bypass1, HIGH); //включаем обходные транзисторы
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, HIGH);
digitalWrite(toneStack1_1, LOW); //выключает транзисторы тонального стека 1
digitalWrite(toneStack1_2, LOW);
bypass = true;
toneStack1 = false;
}
if(input2 == HIGH && toneStack1 == true) //от стека тонов 1 к стеку тонов 2
{
digitalWrite(toneStack2_1, HIGH); //включаем 2 транзистора тонового стека
digitalWrite(toneStack2_2, HIGH);
digitalWrite(bypass1, HIGH); //устанавливаем обходные транзисторы
digitalWrite(bypass2, LOW);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack1_1, LOW); //выключает транзисторы тонального стека 1
digitalWrite(toneStack1_2, LOW);
toneStack2 = true;
toneStack1 = false;
}
if(input3 == HIGH && toneStack1 == true) //от стека тонов 1 до стека тонов 3
{
digitalWrite(toneStack3_1, HIGH); //включаем три транзистора тонового стека
digitalWrite(toneStack3_2, HIGH);
digitalWrite(bypass1, HIGH); //устанавливаем обходные транзисторы
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack1_1, LOW); //выключает транзисторы тонального стека 1
digitalWrite(toneStack1_2, LOW);
toneStack3 = true;
toneStack1 = false;
}
if(input2 == HIGH && toneStack2 == true) //стек тонов 2 для обхода
{
digitalWrite(bypass1, HIGH); //включаем обходные транзисторы
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, HIGH);
digitalWrite(toneStack2_1, LOW); //выключает транзисторы тонового стека 2
digitalWrite(toneStack2_2, LOW);
bypass = true;
toneStack2 = false;
}
if(input1 == HIGH && toneStack2 == true) //от стека тонов 2 к стеку тонов 1
{
digitalWrite(toneStack1_1, HIGH); //включаем транзисторы тонального стека 1
digitalWrite(toneStack1_2, HIGH);
digitalWrite(bypass1, LOW); //устанавливаем обходные транзисторы
digitalWrite(bypass2, LOW);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack2_1, LOW); //выключает транзисторы тонового стека 2
digitalWrite(toneStack2_2, LOW);
toneStack1 = true;
toneStack2 = false;
}
if(input3 == HIGH && toneStack2 == true) //от стека тонов 2 к стеку тонов 3
{
digitalWrite(toneStack3_1, HIGH); //включаем транзисторы тонального стека 1
digitalWrite(toneStack3_2, HIGH);
digitalWrite(bypass1, HIGH); //устанавливаем обходные транзисторы
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack2_1, LOW); //выключает транзисторы тонового стека 2
digitalWrite(toneStack2_2, LOW);
toneStack3 = true;
toneStack2 = false;
}
if(input3 == HIGH && toneStack3 == true) //стек тонов 3 для обхода
{
digitalWrite(bypass1, HIGH); //включаем обходные транзисторы
digitalWrite(bypass2, HIGH);
digitalWrite(bypass3, HIGH);
digitalWrite(toneStack3_1, LOW); //выключает транзисторы тонового стека 3
digitalWrite(toneStack3_2, LOW);
bypass = true;
toneStack3 = false;
}
if(input1 == HIGH && toneStack3 == true) //от стека тонов 3 к стеку тонов 1
{
digitalWrite(toneStack1_1, HIGH); //включаем транзисторы тонального стека 1
digitalWrite(toneStack1_2, HIGH);
digitalWrite(bypass1, LOW); //устанавливаем обходные транзисторы
digitalWrite(bypass2, LOW);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack3_1, LOW); //выключает транзисторы тонового стека 3
digitalWrite(toneStack3_2, LOW);
toneStack1 = true;
toneStack3 = false;
}
if(input2 == HIGH && toneStack3 == true) //от стека тонов 3 к стеку тонов 2
{
digitalWrite(toneStack2_1, HIGH); //включаем транзисторы тонового стека 2
digitalWrite(toneStack2_2, HIGH);
digitalWrite(bypass1, HIGH); //устанавливаем обходные транзисторы
digitalWrite(bypass2, LOW);
digitalWrite(bypass3, LOW);
digitalWrite(toneStack3_1, LOW); //выключает транзисторы тонового стека 3
digitalWrite(toneStack3_2, LOW);
toneStack2 = true;
toneStack3 = false;
}
}
И сообщение об ошибке:
Arduino: 1.8.4 (Windows 7), TD: 1.38, Board: "Teensy LC, Serial, 48 MHz, Smallest Code, US English"
In file included from C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3\IntervalTimer.h:34:0,
from C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3\IntervalTimer.cpp:31:
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3\IntervalTimer.cpp: In member function 'void IntervalTimer::end()':
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3\IntervalTimer.cpp:87:20: error: 'IRQ_PIT_CH0' was not declared in this scope
NVIC_DISABLE_IRQ(IRQ_PIT_CH0 + index);
^
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy3\kinetis.h:5627:68: note: in definition of macro 'NVIC_DISABLE_IRQ'
#define NVIC_DISABLE_IRQ(n) (*((volatile uint32_t *)0xE000E180 + ((n) >> 5)) = (1 << ((n) & 31)))
^
Error compiling for board Teensy LC.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
Я схожу с ума, пытаясь понять это. Я переустановил Arduino 1.8.4, переустановил Teensyduino, установил предыдущую версию Arduino и перезагрузил систему. Ничего пока не помогло. Я чувствую, что мне чего-то не хватает, поскольку, судя по тому, что я смог найти, ни у кого больше нет моей проблемы. Любая помощь будет оценена по достоинству.
@Blake H, 👍0
Обсуждение1 ответ
У меня возникла аналогичная ошибка. После дальнейших исследований это кажется известной проблемой. Мне удалось скомпилировать, используя 1.8.2 и Teensyduino 1.36. Я получил доступ к 1.36, загрузив zip-файл с веб-сайта pjrc в правом верхнем углу. Ссылка была на сайт загрузки. Тогда путь был pjrc_2017_04_04\teensy\td_136
- Глобальному массиву не присваивается то место которое он занимал бы в памяти
- GCC msg "note: in definition of macro 'max'" сообщение об ошибке
- Есть ли константа для максимального значения Unsigned Long в компиляторе Arduino?
- Вложенный цикл
- В чем разница между выводами SCLK и CLK?
- Необработанный строковый литерал Arduino IDE C++ 11 имеет проблемы с // в http://, компилятор считает, что // это комментарий
- Как прервать соединение HM10 Bluetooth?
- Не могу использовать uint16_t в библиотеке
Мне удалось сделать очень хакерское исправление, которое, похоже, сработало. В каталоге Arduino>hardware>teensy>avr>cores>teensy3 есть файл .H под названием kinetis. Похоже, именно здесь хранятся некоторые адреса таймеров, а в Teensy LC отсутствует пресловутый IRQ_PIT_CH0 из сообщения об ошибке. Я добавил его, определив как 4, и теперь все работает. Я еще не тестировал свой код, кроме его компиляции, но программа блинка работает. Я не знаю, вызовет ли это проблемы в дальнейшем, но, похоже, это решило мою текущую проблему., @Blake H