Error compiling numpy.hpp

Hello Edge Impulse Team,

I started using your excelent plattform for a project but now im running into an error while trying to deploy a impulse to my Adafruit Feather M0 Lora board.

I exported my impulse as a C++ library and included it in my project as follows:

#include <Arduino.h>
#include <lmic.h>
#include <hal/hal.h>
#include <SPI.h>
#include <CayenneLPP.h>
#include <deviceConfig.h>
#include <Wire.h>
#include <config.h>
#include <Fsm.h>
#include <Adafruit_SleepyDog.h>
#include <VoltageSensor.h>
#include <Debug.h>
#include <AM2315_Sensor.h>
#include <GPS_Sensor.h>
#include "edge-impulse-sdk/classifier/ei_run_classifier.h"

Trying to compile just this include section gives me the following error:

In file included from src\main.cpp:15:
include/edge-impulse-sdk/dsp/spectral/../numpy.hpp:2176:31: error: expected ')' before '*' token
 2176 |     static int round(matrix_t *matrix) {
      |                               ^

Whole compiler output:

Compiling .pio\build\adafruit_feather_m0\src\main.cpp.o
src\main.cpp:13: warning: ignoring #pragma region Include [-Wunknown-pragmas]
   13 | #pragma region Include
      |
src\main.cpp:35: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
   35 | #pragma endregion
      |
src\main.cpp:37: warning: ignoring #pragma region Initialize [-Wunknown-pragmas]
   37 | #pragma region Initialize
      |
src\main.cpp:102: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
  102 | #pragma endregion
      |
src\main.cpp:104: warning: ignoring #pragma region Setup [-Wunknown-pragmas]
  104 | #pragma region Setup
      |
src\main.cpp:191: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
  191 | #pragma endregion
      |
src\main.cpp:193: warning: ignoring #pragma region Main [-Wunknown-pragmas]
  193 | #pragma region Main Loop
      |
src\main.cpp:206: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
  206 | #pragma endregion
      |
src\main.cpp:208: warning: ignoring #pragma region Functions [-Wunknown-pragmas]
  208 | #pragma region Functions
      |
src\main.cpp:443: warning: ignoring #pragma endregion  [-Wunknown-pragmas]
  443 | #pragma endregion
      |
In file included from src\main.cpp:15:
include/edge-impulse-sdk/dsp/spectral/../numpy.hpp:2176:31: error: expected ')' before '*' token
 2176 |     static int round(matrix_t *matrix) {
      |                               ^
C:\users\yvome\.platformio\packages\framework-arduino-samd-adafruit\cores\arduino/Arduino.h:133:24: note: in definition of macro 'round'
  133 | #define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
      |                        ^
C:\users\yvome\.platformio\packages\framework-arduino-samd-adafruit\cores\arduino/Arduino.h:133:23: note: to match this '('
  133 | #define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
      |                       ^
include/edge-impulse-sdk/dsp/spectral/../numpy.hpp:2176:16: note: in expansion of macro 'round'
 2176 |     static int round(matrix_t *matrix) {
      |                ^~~~~
include/edge-impulse-sdk/dsp/spectral/../numpy.hpp:2176:31: error: expected ')' before '*' token
 2176 |     static int round(matrix_t *matrix) {
      |                               ^
C:\users\yvome\.platformio\packages\framework-arduino-samd-adafruit\cores\arduino/Arduino.h:133:24: note: in definition of macro 'round'
  133 | #define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
      |                        ^
C:\users\yvome\.platformio\packages\framework-arduino-samd-adafruit\cores\arduino/Arduino.h:133:22: note: to match this '('
  133 | #define round(x)     ((x)>=0?(long)((x)+0.5):(long)((x)-0.5))
      |                      ^
include/edge-impulse-sdk/dsp/spectral/../numpy.hpp:2176:16: note: in expansion of macro 'round'
 2176 |     static int round(matrix_t *matrix) {
      |                ^~~~~
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\Adafruit_USBD_CDC.cpp.o
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\Adafruit_USBD_Device.cpp.o
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\tinyusb\src\class\bth\bth_device.c.o
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\tinyusb\src\class\cdc\cdc_device.c.o
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\tinyusb\src\class\dfu\dfu_rt_device.c.o
*** [.pio\build\adafruit_feather_m0\src\main.cpp.o] Error 1
Compiling .pio\build\adafruit_feather_m0\FrameworkArduino\TinyUSB\Adafruit_TinyUSB_ArduinoCore\tinyusb\src\class\hid\hid_device.c.o

Any advice?

Thank you very much.

I got it to work using a different approach by deploying the impulse as an arduino library.

I followed this example:

Using Visual Studio Code and PlatformIO

6 Likes