Ошибка компиляции на плате 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 и перезагрузил систему. Ничего пока не помогло. Я чувствую, что мне чего-то не хватает, поскольку, судя по тому, что я смог найти, ни у кого больше нет моей проблемы. Любая помощь будет оценена по достоинству.

, 👍0

Обсуждение

Мне удалось сделать очень хакерское исправление, которое, похоже, сработало. В каталоге Arduino>hardware>teensy>avr>cores>teensy3 есть файл .H под названием kinetis. Похоже, именно здесь хранятся некоторые адреса таймеров, а в Teensy LC отсутствует пресловутый IRQ_PIT_CH0 из сообщения об ошибке. Я добавил его, определив как 4, и теперь все работает. Я еще не тестировал свой код, кроме его компиляции, но программа блинка работает. Я не знаю, вызовет ли это проблемы в дальнейшем, но, похоже, это решило мою текущую проблему., @Blake H


1 ответ


1

У меня возникла аналогичная ошибка. После дальнейших исследований это кажется известной проблемой. Мне удалось скомпилировать, используя 1.8.2 и Teensyduino 1.36. Я получил доступ к 1.36, загрузив zip-файл с веб-сайта pjrc в правом верхнем углу. Ссылка была на сайт загрузки. Тогда путь был pjrc_2017_04_04\teensy\td_136

,