Cant Compile for Teensy++ 2.0

Status
Not open for further replies.

gggggggg

New member
I have some code that works for a 3.5, but I cant get it to compile for a Teensy++ 2.0. Am I doing something wrong, or does the ++ 2.0 not support something that the 3.5 does??

Error
Code:
test_multi_debounce: In function 'void check_switches()':
test_multi_debounce:86: warning: comparison between signed and unsigned integer expressions 
   if (millis() < lasttime) {
       ~~~~~~~~~^~~~~~~~~~
test_multi_debounce:90: warning: comparison between signed and unsigned integer expressions 
   if ((lasttime + DEBOUNCE) > millis()) {
       ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S: Assembler messages:
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:64: Error: unknown pseudo-op: `.syntax'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:66: Error: unknown pseudo-op: `.thumb'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:69: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:71: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:73: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:76: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:78: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:80: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:83: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:85: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:86: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:87: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:88: Error: unknown opcode `movs'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:89: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:90: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:93: Error: unknown pseudo-op: `.thumb_func'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:98: Error: unknown opcode `cpsid'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:104: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:105: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:106: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:107: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:112: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:113: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:114: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:115: Error: unknown opcode `beq'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:116: Error: bad expression
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:116: Error: garbage at end of line
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:117: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:118: Error: unknown opcode `b'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:123: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:124: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:125: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:126: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:134: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:135: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:136: Error: unknown opcode `stmia'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:147: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:148: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:149: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:150: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:151: Error: unknown opcode `mrs'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:152: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:153: Error: unknown opcode `str'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:156: Error: unknown opcode `bl'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:159: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:160: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:161: Error: unknown opcode `ldmia'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: constant value required
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: constant value required
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:171: Error: garbage at end of line
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:172: Error: unknown opcode `orr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:173: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:174: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:175: Error: unknown opcode `cmp'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:176: Error: unknown opcode `bne'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:178: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:179: Error: unknown opcode `ldr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:180: Error: unknown opcode `msr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:181: Error: unknown opcode `orr'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:185: Error: unknown opcode `cpsie'
C:\Program Files (x86)\Arduino\hardware\teensy\avr\libraries\TeensyThreads\TeensyThreads-asm.S:187: Error: unknown opcode `bx'
Error compiling for board Teensy++ 2.0.

My code:
Code:
#include <Arduino.h>
#include "TeensyThreads.h"

const int LED = 11;
volatile int blinkcode = 0;

#define DEBOUNCE 10  // how many ms to debounce, 5+ ms is usually plenty
 
//define the buttons that we'll use.
byte buttons[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; 
 
//determine how big the array up above is, by checking the size
#define NUMBUTTONS sizeof(buttons)
 
//track if a button is just pressed, just released, or 'currently pressed' 
byte pressed[NUMBUTTONS], justpressed[NUMBUTTONS], justreleased[NUMBUTTONS];
byte previous_keystate[NUMBUTTONS], current_keystate[NUMBUTTONS];
 
void setup() {
  byte i;
  Serial.begin(57600); //set up serial port
  Serial.print("Button checker with ");
  Serial.print(NUMBUTTONS, DEC);
  Serial.println(" buttons");
  // Make input & enable pull-up resistors on switch pins
  for (i=0; i< NUMBUTTONS; i++) {
    pinMode(buttons[i], INPUT);
    digitalWrite(buttons[i], HIGH);
  }

  pinMode(LED, OUTPUT);
  threads.addThread(blinkthread);
  
}

// for blink
int count = 0;
 
void loop() {


  count++;
  blinkcode = count;
  delay(1000);
  Serial.println(count);

  
  byte thisSwitch=thisSwitch_justPressed();
  switch(thisSwitch)
  {  
  case 0: 
    pressButton(1);
    Serial.println("switch 1 just pressed"); break;
  case 1: 
    pressButton(2);
    Serial.println("switch 2 just pressed"); break;
  case 2: 
    pressButton(3);
    Serial.println("switch 3 just pressed"); break;
  case 3: 
    pressButton(4);
    Serial.println("switch 4 just pressed"); break;
  case 4: 
      pressButton(5);
    Serial.println("switch 5 just pressed"); break;
  case 5: 
    pressButton(5);
    Serial.println("switch 6 just pressed"); break;    
  }
}


void pressButton(int myButton){
    Joystick.button(myButton, 1);
    delay(50);
    Joystick.button(myButton, 0);
  
}
 
void check_switches()
{
  static byte previousstate[NUMBUTTONS];
  static byte currentstate[NUMBUTTONS];
  static long lasttime;
  byte index;
  if (millis() < lasttime) {
    // we wrapped around, lets just try again
    lasttime = millis();
  }
  if ((lasttime + DEBOUNCE) > millis()) {
    // not enough time has passed to debounce
    return; 
  }
  // ok we have waited DEBOUNCE milliseconds, lets reset the timer
  lasttime = millis();
  for (index = 0; index < NUMBUTTONS; index++) {
    justpressed[index] = 0;       //when we start, we clear out the "just" indicators
    justreleased[index] = 0;
    currentstate[index] = digitalRead(buttons[index]);   //read the button
    if (currentstate[index] == previousstate[index]) {
      if ((pressed[index] == LOW) && (currentstate[index] == LOW)) {
        // just pressed
        justpressed[index] = 1;
      }
      else if ((pressed[index] == HIGH) && (currentstate[index] == HIGH)) {
        justreleased[index] = 1; // just released
      }
      pressed[index] = !currentstate[index];  //remember, digital HIGH means NOT pressed
    }
    previousstate[index] = currentstate[index]; //keep a running tally of the buttons
  }
}
 
byte thisSwitch_justPressed() {
  byte thisSwitch = 255;
  check_switches();  //check the switches & get the current state
  for (byte i = 0; i < NUMBUTTONS; i++) {
    current_keystate[i]=justpressed[i];
    if (current_keystate[i] != previous_keystate[i]) {
      if (current_keystate[i]) thisSwitch=i;
    }
    previous_keystate[i]=current_keystate[i];
  }  
  return thisSwitch;
}






void blinkthread() {
  while(1) {
    if (blinkcode) {
      for (int i=0; i<blinkcode; i++) {
        digitalWrite(LED, HIGH);
        threads.delay(150);
        //digitalWrite(LED, LOW);
        threads.delay(150);
      }
      blinkcode = 0;
    }
    threads.yield();
  }
}
 
Library #include "TeensyThreads.h" certainly will not work on an AVR processor Teensy 2.x.

That uses Code specific to the 32 bit ARM processors.
 
Teensythreads contains a fair bit of assembler code which is specific to the ARM architecture whereas the Teensy++2 is an AVR.
From the readme.md:
Teensy Threading Library implements preemptive threads for the Teensy 3 & 4

Pete
P.S. Defragster beat me to it :)
 
Status
Not open for further replies.
Back
Top