Teensyduino 1.59 Beta #2

Pretty sure it's an issue in teensy_serialmon.exe for 1.8.19 and also in teensy_monitor.exe for IDE 2, and (probably) also the same thing in TyCommander. Will look into it today (teensy_serialmon and teensy_monitor that is...)
 
Pretty sure it's an issue in teensy_serialmon.exe for 1.8.19 and also in teensy_monitor.exe for IDE 2, and (probably) also the same thing in TyCommander. Will look into it today (teensy_serialmon and teensy_monitor that is...)
TyCommander apppears to work. I just ran the simple sketch:
Code:
void setup() {
  while(!Serial);
}
void loop() {
  delay(1000);
  Serial.println(Serial.baud(), DEC);
}
And it was printing 115200, I then went to the options page and change to 23400 and the output changed:
Code:
...
115200
115200
115200
230400
230400
230400
...
 
that is a cool trick, but extra latency you wouldn't physically notice in the loop() ��
In majority of sketches yes the Serial.baud() does not matter. As it does nothing to the USB transfer stuff.
However in a small set of sketches, like the example Teensy->USB Serial -> USBtoSerial
or the case that I doing now like it for USBtoUSBHostSerial
Screenshot.jpg

Which here is a stripped down version of it, minus most comments and options and the like:
Not sure if it will build - the actual sketch part of a PR...
Code:
#include <USBHost_t36.h>
#define USBBAUD 1000000 //115200
uint32_t baud = USBBAUD;
uint32_t format = USBHOST_SERIAL_8N1;
USBHost myusb;

USBSerial userial(myusb);  // works only for those Serial devices who transfer <=64 bytes (like T3.x, FTDI...)
char buffer[512];
uint32_t led_on_time=0;

void setup() {
  myusb.begin();
  userial.begin(USBBAUD); 
  Serial.begin(USBBAUD);

  pinMode(LED_BUILTIN, OUTPUT);

}

//=============================================================================
// loop: continuously called.
//=============================================================================
void loop() {
  myusb.Task(); 

  uint16_t rd, wr, n;

  // check if any data has arrived on the USB virtual serial port
  rd = Serial.available();
  if (rd > 0) {
    // check if the USB Host serial port is ready to transmit
    wr = userial.availableForWrite();
    if (wr > 0) {
      // compute how much data to move, the smallest
      // of rd, wr and the buffer size
      if (rd > wr) rd = wr;
      if (rd > sizeof(buffer)) rd = sizeof(buffer);
      // read data from the USB port
      n = Serial.readBytes((char *)buffer, rd);
      // write it to the USB Host serial port
//      DBGPrintf("S-U(%u %u)\n", rd, n);
      userial.write(buffer, n);
      // turn on the LED to indicate activity
      digitalWrite(LED_BUILTIN, HIGH);
      led_on_time = millis();
    }
  }

  // check if any data has arrived on the USBHost serial port
  rd = userial.available();
  if (rd > 0) {
    // check if the USB virtual serial port is ready to transmit
    wr = Serial.availableForWrite();
    if (wr > 0) {
      // compute how much data to move, the smallest
      // of rd, wr and the buffer size
      if (rd > wr) rd = wr;
      if (rd > 80) rd = 80;
      // read data from the USB host serial port
      n = userial.readBytes((char *)buffer, rd);
      // write it to the USB port
 //     DBGPrintf("U-S(%u %u):", rd, n);
      Serial.write(buffer, n);
      // turn on the LED to indicate activity
      digitalWrite(LED_BUILTIN, HIGH);
      led_on_time = millis();
    }
  }

  // if the LED has been left on without more activity, turn it off
  if (led_on_time && (millis() - led_on_time > 3)) {
    digitalWrite(LED_BUILTIN, LOW);
    led_on_time = 0; 
  }

  // check if the USB virtual serial wants a new baud rate
  // ignore if 0 as current Serial monitor of Arduino sets to 0..
  uint32_t cur_usb_baud = Serial.baud();
  if (cur_usb_baud && (cur_usb_baud != baud)) {
    baud = cur_usb_baud;
    DBGPrintf("DEBUG: baud change: %u\n", baud);
    if (baud == 57600) {
      // This ugly hack is necessary for talking
      // to the arduino bootloader, which actually
      // communicates at 58824 baud (+2.1% error).
      // Teensyduino will configure the UART for
      // the closest baud rate, which is 57143
      // baud (-0.8% error).  Serial communication
      // can tolerate about 2.5% error, so the
      // combined error is too large.  Simply
      // setting the baud rate to the same as
      // arduino's actual baud rate works.
      userial.begin(58824);
    } else {
      userial.begin(baud);
    }
  }

}
Before I changed the line if (cur_usb_baud != baud) {
to: if (cur_usb_baud && (cur_usb_baud != baud)) {

It was telling the USB to Serial adapter that I had plugged in to set it's baud rate to 0... Not sure how slow it was able to set it. But you could visually see one character at a time being returned by the adapter...

P.S. - This is similar if not the same as the sketch we played with where you could have one Teensy program another Teensy (or other board).
 
Just ran across something interesting with the new toolchain and and updating to c17

Found that cout now works (no cin does not) and the c++ function setprecission works. Came across this when I was looking at @brtaylor's update EKF 15 state model and was wondering if it worked so tried a test case from the web:
Code:
#include <iomanip>
#include <iostream>

using namespace std;

void setup() {
  while (!Serial && millis() < 5000) ; //wait up to 5 seconds

#ifdef __IMXRT1062__
  if (CrashReport) {
    Serial.print(CrashReport);
  }
#endif

    double num1 = 3.12345678;
    cout <<"Test of cout and setprecission" << endl;
    cout << fixed << showpoint;
    cout << setprecision(12);
    cout << num1 << endl;
    cout << setprecision(2);
    cout << num1 << endl;
}

void loop() {
  // put your main code here, to run repeatedly:

}
which prints:
Code:
Test of cout and setprecission
3.123456780000
3.12

Fun stuff :)
 
Yes, but did you look at the memory consumption? Last time I tried it was some 300kB :-(
 
Yes, but did you look at the memory consumption? Last time I tried it was some 300kB :-(

Well you made me look and sure enough the sketch as written uses 309k. Looks like most of that is coming from using IOSTREAM. If I change the sketch to:
Code:
#include <iomanip>
//#include <iostream>

using namespace std;

void setup() {
  while (!Serial && millis() < 5000) ; //wait up to 5 seconds

#ifdef __IMXRT1062__
  if (CrashReport) {
    Serial.print(CrashReport);
  }
#endif

    double num1 = 3.12345678;
    //cout <<"Test of cout and setprecission" << endl;
    //cout << fixed << showpoint;
    //cout << setprecision(12);
    //cout << num1 << endl;
    setprecision(2);
    Serial.println( num1 );
}

void loop() {
  // put your main code here, to run repeatedly:

}
its goes down to about 12K
Code:
Memory Usage on Teensy MicroMod:
  FLASH: code:11748, data:5068, headers:8780   free for files:16489476
   RAM1: variables:5504, code:7952, padding:24816   free for local variables:486016
   RAM2: variables:12416  free for malloc/new:511872

Also did a check that if you include the Streaming library to get the use of cout it stays at about 12k:
Code:
Memory Usage on Teensy MicroMod:
   RAM1: variables:5504, code:7968, padding:24800   free for local variables:486016
   RAM2: variables:12416  free for malloc/new:511872

So probably not a good idea to use iostream but was interesting to see that it works.
 
I would have the following problem. I'm using PlatformIO and teensy 4.1 lockable and tried LTO. Both with 1.58 and 1.59 (I changed the teensy library to a new version, so I can test it).

There are two options:
TEENSY_OPT_SMALLEST_CODE
CCFLAGS=["-Os", "--specs=nano.specs"],
LINKFLAGS=["-Os", "--specs=nano.specs"]
TEENSY_OPT_SMALLEST_CODE_LTO
CCFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects"],
LINKFLAGS=["-Os", "--specs=nano.specs", "-flto", "-fno-fat-lto-objects", "-fuse-linker-plugin"]

when I complied it with TEENSY_OPT_SMALLEST_CODE under 1.58, the code did not start. This is fine, I think, the 1.59 was made to fix this problem, because under 1.59 it works fine, it starts.

However, with TEENSY_OPT_SMALLEST_CODE_LTO, starts with 1.58 and 1.59.
However, once I upload the code, I cannot update it again via serial. Teensy reboots and that's it. Serial says, press the flasher button (it also throws errors when looking at the flash program log).
When I press it, it works. Upload the new code to it.



Could this be some kind of abnormal behavior? Could I ask for help with this? I saw that there were bugs related to the LTO code, and I found in another forum topic that it should be reported here if there is anything like that. I know, PlatformIO, not Arduino IDE, but that's why I looked up the compilation options. Maybe someone can help me with my question.

Thanks!
 
...
However, with TEENSY_OPT_SMALLEST_CODE_LTO, starts with 1.58 and 1.59.
However, once I upload the code, I cannot update it again via serial. Teensy reboots and that's it. Serial says, press the flasher button (it also throws errors when looking at the flash program log).
When I press it, it works. Upload the new code to it.
...

Not clear if the issue is 1.58 or 1.59 as noted?

IDE 2 does not show LTO as an option for 1.58 so it was not corrected and incorporated. PIO may trigger it as an option - but not valid.

If this is just PIO and 1.59 beta it may be an issue - or not given "changed the teensy library to a new version, so I can test it" - the changes may not be 100%?

Here IDE 1.8.19 has TD 1.59 b2 and just built Coremark 'smallest w/LTO' and it uploads and runs and the computer can AUTO upload code for another sketch.
 
Not clear if the issue is 1.58 or 1.59 as noted?

IDE 2 does not show LTO as an option for 1.58 so it was not corrected and incorporated. PIO may trigger it as an option - but not valid.

If this is just PIO and 1.59 beta it may be an issue - or not given "changed the teensy library to a new version, so I can test it" - the changes may not be 100%?

Here IDE 1.8.19 has TD 1.59 b2 and just built Coremark 'smallest w/LTO' and it uploads and runs and the computer can AUTO upload code for another sketch.


Thank you very much for the information. Now, just to be sure, I downloaded the TeensyDuino 1.59 beta2 code installer for Arduino IDE 1.8.x. I installed it.
I set the "Smalles Code with LTO" option. I chose a simple blink code from the example library.
I uploaded it after compile. That worked. After that, I change the delay from 1000ms to 100ms to see if the update was working or not.
After pressing upload, Teensy started again and I got a timeout while uploading.

Got this error:
Teensy did not respond to a USB-based request to enter program mode.
Please press the PROGRAM MODE BUTTON on your Teensy to upload your sketch.

Please note thtat there was no problem with platformio, not with the normal case.
I have a problem when I try Lockable verision. Or Teensy is locked with the key. I admit, it could have been a problem if I copied/updated something wrong under PlatformIO. That's why I made it, a simpler, reproducible code, and tried with Arduino as well.

I attached some photos.

Should I attach anything else to this information? Please let me know and I'll try to help to better show the problem/error I'm experiencing.

Regards,image-56.jpgimage-57.jpgimage-55.png
 
My (admittedly personal) list of candidate PRs for urgent consideration when TD1.59 gets some bandwidth again:
The reason I say "urgent" consideration is that these address issues that seriously degrade various aspects of the Teensy ecosystem, in some cases to the extent of rendering modules entirely unusable.
 
Question: Is it still the case that Audio blocks SPI Interrupts even if Audio does not use SPI?
 
Question: Is it still the case that Audio blocks SPI Interrupts even if Audio does not use SPI?
The issue occurs if Audio has used SPI in the past, e.g. for SD card playback. In this case, if any subsequent SPI transaction occurs, it blocks the Audio updates for the duration of that transaction, even though Audio has tried to relinquish use of the SPI bus. The fix is incredibly trivial - just add #define SPI_HAS_NOTUSINGINTERRUPT 1 to the architectures where SPIClass::notUsingInterrupt() actually is available. It's two lines added to one file.
 
The issue occurs if Audio has used SPI in the past, e.g. for SD card playback. In this case, if any subsequent SPI transaction occurs, it blocks the Audio updates for the duration of that transaction, even though Audio has tried to relinquish use of the SPI bus. The fix is incredibly trivial - just add #define SPI_HAS_NOTUSINGINTERRUPT 1 to the architectures where SPIClass::notUsingInterrupt() actually is available. It's two lines added to one file.

Yep, I agree it would be nice to solve this problem asap... There is also a related bug were the audio library assumes it is using SPI0 (even when it is not) and thus disables audio updates while SPI0 is used.
 
The issue occurs if Audio has used SPI in the past, e.g. for SD card playback. In this case, if any subsequent SPI transaction occurs, it blocks the Audio updates for the duration of that transaction, even though Audio has tried to relinquish use of the SPI bus. The fix is incredibly trivial - just add #define SPI_HAS_NOTUSINGINTERRUPT 1 to the architectures where SPIClass::notUsingInterrupt() actually is available. It's two lines added to one file.

Do you have a Pull Request to solve this?
 
Here is an attempt to fix the zero baud rate issue reported in msg #73.

If I run this and use the COM29 under Teensy ports on either IDE1 or 2,
This prints out as 0's for the baud.

For Arduino IDE 1.8.19, put teensy_serialmon.exe into C:\Program Files (x86)\Arduino\hardware\tools

For Arduino IDE 2.1.0, put teensy-monitor.exe into {AppData}\Local\Arduino15\packages\teensy\tools\teensy-monitor\1.58.0
 

Attachments

  • teensy-monitor.zip
    26.4 KB · Views: 38
  • teensy_serialmon.zip
    30.3 KB · Views: 39
https://github.com/PaulStoffregen/A...d78fa053506d3c4dd2cb62c67/play_sd_wav.cpp#L72
Code:
#if defined(HAS_KINETIS_SDHC)
	if (!(SIM_SCGC3 & SIM_SCGC3_SDHC)) AudioStartUsingSPI();
#else
	AudioStartUsingSPI();
#endif
	wavfile = SD.open(filename);
	if (!wavfile) {
#if defined(HAS_KINETIS_SDHC)
		if (!(SIM_SCGC3 & SIM_SCGC3_SDHC)) AudioStopUsingSPI();
#else
		AudioStopUsingSPI();
#endif
		if (irq) NVIC_ENABLE_IRQ(IRQ_SOFTWARE);
		return false;
	}
Very many years ago, when I added this horrible hack, I asked to implement a better way to know what periphal is used for files or other uses. Unfortunately, this is still obviously completely uninteresting,as others have also been ignorated with this request. It could be so easy, but well... better this half-baked mess, which was the only option at the time, than nothing :) It's quite a pity, because there are countless other cases where it would be useful.
 
Is there a reason prefetching is disabled for PSRAM? FLEXSPI_AHBCR_PREFETCHEN is cleared in FLEXSPI2_AHBCR in startup.c which means prefetching has no effect when enabled in the individual FLEXSPI_AHBRXBUF control registers.
If enabled I get ~50% faster sequential reads from PSRAM.
 
Honestly, there probably isn't much of a reason other than a matter of history, that in the early days the settings we use now seemed to work well, so other ways beyond simply varying the clock speed haven't been tested much.

But I do recall seeing a warning about prefetch and the MPU in the chip errata. No idea if it really applies here, but it is something to check...

Really the main question is how prefetch affects most applications. If it's usually faster and the less desirable cases aren't common or aren't much slower, would probably be worthwhile to consider enabling FlexSPI prefetch for future software releases.
 
There's errata for speculative prefetches from the CPU but that's unrelated (and I think avoided anyway, since MPU region #0 covers all unused memory).

With AHB prefetching enabled for FLEXSPI2 and the clock speed turned up to 120MHz, I'm getting 56MB/s for sequential reads which seems pretty close to the maximum possible. Need to test with DMA to see if it makes EXTMEM feasible for framebuffer memory...
 
All:
I have a strange problem that just popped up in my build:

Code:
PLATFORM: Teensy (4.18.0) > Teensy 4.1
HARDWARE: IMXRT1062 600MHz, 512KB RAM, 7.75MB Flash
DEBUG: Current (jlink) External (jlink)
PACKAGES: 
 - framework-arduinoteensy @ 1.159.230410 (1.59) 
 - tool-teensy @ 1.159.230410 (1.59) 
 - toolchain-gccarmnoneeabi @ 1.110301.230410 (11.3.1) 
 - toolchain-gccarmnoneeabi-teensy @ 1.110301.0 (11.3.1)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 106 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Eds_BME680
|-- SD @ 2.0.0
|-- TMP117-Arduino @ 1.0.3
|-- WDT_T4 @ 0.1
|-- AT24CX
|-- DS3231RTC
|-- EEPROMEx @ 0.0.0-alpha+sha.09d7586108
|-- LittleFS @ 1.0.0
|-- MTP_Teensy @ 1.0.0
|-- SPI @ 1.0
|-- SparkFun_u-blox_GNSS_Arduino_Library
|-- Streaming @ 6.0.9
|-- Timezone @ 1.2.4
|-- Wire @ 1.0
|-- Ra8876LiteTeensy
|-- MCP9808
|-- memcpy
Building in release mode
Compiling .pio/build/teensy41/src/TestingTFT.cpp.o
Compiling .pio/build/teensy41/libe9f/SPI/SPI.cpp.o
Compiling .pio/build/teensy41/libb68/Wire/Wire.cpp.o
Compiling .pio/build/teensy41/libb68/Wire/WireIMXRT.cpp.o
Compiling .pio/build/teensy41/libb68/Wire/WireKinetis.cpp.o
Compiling .pio/build/teensy41/libb68/Wire/utility/twi.c.o
Compiling .pio/build/teensy41/lib3d7/Eds_BME680/Eds_BME680.cpp.o
Compiling .pio/build/teensy41/lib243/SdFat/ExFatLib/ExFatDbg.cpp.o
Compiling .pio/build/teensy41/lib243/SdFat/ExFatLib/ExFatFile.cpp.o
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/Wire/WireIMXRT.h:32,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/Wire/Wire.h:26,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/Wire/WireIMXRT.cpp:2:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/Wire/WireKinetis.cpp:27:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from lib/Eds_BME680/Eds_BME680.h:52,
                 from lib/Eds_BME680/Eds_BME680.cpp:8:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SPI/SPI.h:16,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SPI/SPI.cpp:11:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
*** [.pio/build/teensy41/libb68/Wire/WireKinetis.cpp.o] Error 1
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/Wire/Wire.cpp:22:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/../SdFatConfig.h:56,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/SysCall.h:33,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/FsDateTime.h:29,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/ExFatFile.h:33,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/ExFatVolume.h:27,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/ExFatDbg.cpp:25:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
*** [.pio/build/teensy41/libb68/Wire/Wire.cpp.o] Error 1
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
*** [.pio/build/teensy41/libb68/Wire/WireIMXRT.cpp.o] Error 1
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from src/TestingTFT.h:21,
                 from src/TestingTFT.cpp:7:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
*** [.pio/build/teensy41/libe9f/SPI/SPI.cpp.o] Error 1
*** [.pio/build/teensy41/lib3d7/Eds_BME680/Eds_BME680.cpp.o] Error 1
*** [.pio/build/teensy41/lib243/SdFat/ExFatLib/ExFatDbg.cpp.o] Error 1
In file included from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/WProgram.h:69,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/Arduino.h:6,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/../SdFatConfig.h:56,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/SysCall.h:33,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/../common/DebugMacros.h:27,
                 from /Users/freddie/.platformio/packages/framework-arduinoteensy/libraries/SdFat/src/ExFatLib/ExFatFile.cpp:26:
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t)':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:36: error: 'is_arithmetic_v' is not a member of 'std'; did you mean 'is_arithmetic'?
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                    ^~~~~~~~~~~~~~~
      |                                    is_arithmetic
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:60: error: expected primary-expression before '>' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                            ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:122:61: error: expected primary-expression before ',' token
  122 |                 static_assert(std::is_arithmetic_v<period_t>, "Period must be arithmetic");
      |                                                             ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:36: error: 'is_integral_v' is not a member of 'std'; did you mean 'is_integral'?
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                    ^~~~~~~~~~~~~
      |                                    is_integral
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:58: error: expected primary-expression before '>' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                          ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:126:59: error: expected primary-expression before ')' token
  126 |                 if constexpr (std::is_integral_v<period_t>)       // evaluated at compiletime, handles all integral types
      |                                                           ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:20: warning: 'if constexpr' only available with '-std=c++17' or '-std=gnu++17'
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                    ^~~~~~~~~
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:36: error: 'is_floating_point_v' is not a member of 'std'; did you mean 'is_floating_point'?
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                    ^~~~~~~~~~~~~~~~~~~
      |                                    is_floating_point
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:64: error: expected primary-expression before '>' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                ^
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:128:65: error: expected primary-expression before ')' token
  128 |                 if constexpr (std::is_floating_point_v<period_t>) // evaluated at compiletime, handles all floating point types
      |                                                                 ^
*** [.pio/build/teensy41/lib243/SdFat/ExFatLib/ExFatFile.cpp.o] Error 1
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h: In member function 'uint32_t IntervalTimer::cyclesFromPeriod(period_t) [with period_t = int]':
/Users/freddie/.platformio/packages/framework-arduinoteensy/cores/teensy4/IntervalTimer.h:132:5: warning: control reaches end of non-void function [-Wreturn-type]
  132 |     }
      |     ^
*** [.pio/build/teensy41/src/TestingTFT.cpp.o] Error 1

I have been using Interval timer for a long time but never seen these errors before, any ideas what I have done wrong? Is it possible that this is something to do with the new compiler?

Thanks,
Ed
 
Back
Top