GithubHelp home page GithubHelp logo

hideakitai / arduinoeigen Goto Github PK

View Code? Open in Web Editor NEW
37.0 37.0 2.0 1.3 MB

Eigen (a C++ template library for linear algebra) for Arduino

License: Mozilla Public License 2.0

C++ 99.15% C 0.84% CMake 0.01%

arduinoeigen's Introduction

Top Langs github stats

arduinoeigen's People

Contributors

hideakitai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

arduinoeigen's Issues

arduino:sam support

Hello, I am trying to use this library with an Arduino Due, based on 32-bits ARM Cortex-M3 (SAM core).

Have this library been tried with Arduino Due before? Would be really helpful if support could be added.

I get the following error:
error: #error THIS PLATFORM IS NOT SUPPORTED BECAUSE THERE IS NO STANDARD LIBRARY

Compiling with:
arduino-cli compile --fqbn arduino:sam:arduino_due_x_dbg sketch.ino -v

Compatible Boards

This library will only compile for Teensy 3.0 to 3.6. However, it will not compile for Teensy 4.0 or higher. Compiling for 4.0 or higher gives me the following error:

C:\Users\Nerdsiah\Documents\Arduino\libraries\Eigen-0.2.2/ArduinoEigen/ArduinoEigenCommon.h: In function 'constexpr const __FlashStringHelper* F(const char*)':

C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy4/avr/pgmspace.h:30:52: error: 'data' declared 'static' in 'constexpr' function
#define PROGMEM attribute((section(".progmem")))
^
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy4/avr/pgmspace.h:35:46: note: in expansion of macro 'PROGMEM'
#define PSTR(str) ({static const char data[] PROGMEM = (str); &data[0];})
^
C:\Users\Nerdsiah\Documents\Arduino\libraries\Eigen-0.2.2/ArduinoEigen/ArduinoEigenCommon.h:37:57: note: in expansion of macro 'PSTR'
return reinterpret_cast<const __FlashStringHelper*>(PSTR(str));
^
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy4/avr/pgmspace.h:35:60: error: initializer fails to determine size of 'data'
#define PSTR(str) ({static const char data[] PROGMEM = (str); &data[0];})
^
C:\Users\Nerdsiah\Documents\Arduino\libraries\Eigen-0.2.2/ArduinoEigen/ArduinoEigenCommon.h:37:57: note: in expansion of macro 'PSTR'
return reinterpret_cast<const __FlashStringHelper*>(PSTR(str));
^
C:\Program Files (x86)\Arduino\hardware\teensy\avr\cores\teensy4/avr/pgmspace.h:35:60: error: array must be initialized with a brace-enclosed initializer
#define PSTR(str) ({static const char data[] PROGMEM = (str); &data[0];})
^
C:\Users\Nerdsiah\Documents\Arduino\libraries\Eigen-0.2.2/ArduinoEigen/ArduinoEigenCommon.h:37:57: note: in expansion of macro 'PSTR'
return reinterpret_cast<const __FlashStringHelper*>(PSTR(str));

Fixed compile issue by commenting out __FlashStringHelper in ArduinoEigenCommon.h.

compilation terminated.

Arduino\libraries\Bolder_Flight_Systems_Eigen\src/Eigen/src/Core/products/Parallelizer.h:14:10: fatal error: atomic: No such file or directory
#include
^~~~~~~~

Asser Error when trying to initialize large size vector with less values initialized

  VectorXd acc(2000);
  acc.setZero();
  acc << 1,2,3,4,5,6,7,8,9,10;
  double maxVal = acc.maxCoeff();
  double minVal = acc.minCoeff();
  double meanVal = acc.mean();

  Serial.printf("Max value: %f\n", maxVal);
  Serial.printf("Min value: %f\n", minVal);
  Serial.printf("Max mean: %f\n", meanVal);

I have initialized acc vector with size of 2000. I have taken max size as there is no way to increase the vector size dynamically by push as this will cause heap fragment issue.

I get this error when i try to do it.
assert failed: XprType& Eigen::CommaInitializer<MatrixType>::finished() [with XprType = Eigen::Matrix<double, -1, 1>] CommaInitializer.h:124 (((m_row+m_currentBlockRows) == m_xpr.rows() || m_xpr.cols

Initializing the values like this works

acc(0) = 1;
acc(1) = 2;
acc(2) = 3;
acc(3) = 4;
acc(4) = 5;
acc(5) = 6;
acc(6) = 7;

But it gives wrong output for mean() function as it divides it by 2000 elements.

Output:

Max value: 7.000000
Min value: 0.000000
Max mean: 0.014000

Crash when initializing matrix of size 170x170

I've observed that creating a very large matrix causes the ESP32 to crash. I was able to replicate this issue by creating a new PlatformIO project and attempting to create a matrix of size 170x170. This resulted in a crash of the ESP32. However, creating a matrix of size 169x169 does not cause a crash, and there is still a significant amount of heap memory available.

Free heap memory: 200308 bytes n = 169
Free heap memory: 201656 bytes n = 168
Free heap memory: 202996 bytes n = 167
and so on.

Error message
ELF file SHA256: 381759b49e6b9a19

E (173) esp_core_dump_flash: Core dump flash config is corrupted! CRC=0x7bd5c66f instead of 0x0
Rebooting...
ets Jul 29 2019 12:21:46

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:1184
load:0x40078000,len:13232
load:0x40080400,len:3028
entry 0x400805e4

abort() was called at PC 0x400e10db on core 0

Backtrace: 0x40083349:0x3ffe3aa0 0x40087f45:0x3ffe3ac0 0x4008cd21:0x3ffe3ae0 0x400e10db:0x3ffe3b60 0x400e1122:0x3ffe3b80 0x400e1427:0x3ffe3ba0 0x400d13ab:0x3ffe3bc0 0x400d1411:0x3ffe3be0 0x400d147a:0x3ffe3c00 0x400d975f:0x3ffe3c20 0x40082a75:0x3ffe3c50 0x40079306:0x3ffe3c90 |<-CORRUPTED

Missing #undef

When compiling this sketch on Arduino Nano 33 BLE...

#include "ArduinoEigen.h"

void setup() {}

void loop() {}

...I get the following errors:

In file included from C:\Users\Sylvain\.platformio\packages\framework-arduino-mbed\cores\arduino/Arduino.h:76:0,
                 from .pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen.h:5,
                 from src\main.cpp:1:
.pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h: In member function 'void Eigen::internal::lhs_process_one_packet<nr, LhsProgress, RhsProgress, LhsScalar, RhsScalar, ResScalar, AccPacket, LhsPacket, RhsPacket, ResPacket, GEBPTraits, LinearMapper, DataMapper>::operator()(const DataMapper&, const LhsScalar*, const RhsScalar*, ResScalar, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, int, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index)':
C:\Users\Sylvain\.platformio\packages\framework-arduino-mbed\variants\ARDUINO_NANO33BLE/pins_arduino.h:83:16: error: lvalue required as unary '&' operand
 #define D0  (0u)
                ^
.pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:73: note: in expansion of macro 'D0'
           peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
                                                                         ^~
C:\Users\Sylvain\.platformio\packages\framework-arduino-mbed\variants\ARDUINO_NANO33BLE/pins_arduino.h:84:16: error: lvalue required as unary '&' operand
 #define D1  (1u)
                ^
.pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:78: note: in expansion of macro 'D1'
           peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
                                                                              ^~
C:\Users\Sylvain\.platformio\packages\framework-arduino-mbed\variants\ARDUINO_NANO33BLE/pins_arduino.h:85:16: error: lvalue required as unary '&' operand
 #define D2  (2u)
                ^
.pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:83: note: in expansion of macro 'D2'
           peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
                                                                                   ^~
C:\Users\Sylvain\.platformio\packages\framework-arduino-mbed\variants\ARDUINO_NANO33BLE/pins_arduino.h:86:16: error: lvalue required as unary '&' operand
 #define D3  (3u)
                ^
.pio\libdeps\nano33ble\ArduinoEigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:88: note: in expansion of macro 'D3'

So I guess ArduinoEigen/ArduinoEigenCommon.h should also undef D0, D1, D2, D3.

Additionally, in the past, I am quite sure I saw conflicts with A0 and A1 (I don't remember on which board). So you might want to also undef A0 and A1 to be on the safe side.

Nano 33 BLE complier errors

In file included from ***AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\cores\arduino/Arduino.h:76:0,
from ***\AppData\Local\Temp\arduino-sketch-E55E67B8DEFCD898E43FF53D1C5851C5\sketch\simple.ino.cpp:1:
*Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h: In member function 'void Eigen::internal::lhs_process_one_packet<nr, LhsProgress, RhsProgress, LhsScalar, RhsScalar, ResScalar, AccPacket, LhsPacket, RhsPacket, ResPacket, GEBPTraits, LinearMapper, DataMapper>::operator()(const DataMapper&, const LhsScalar, const RhsScalar, ResScalar, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, int, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index, Eigen::Index)':
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:83:16: error: lvalue required as unary '&' operand
#define D0 (0u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:73: note: in expansion of macro 'D0'
peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:84:16: error: lvalue required as unary '&' operand
#define D1 (1u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:78: note: in expansion of macro 'D1'
peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:85:16: error: lvalue required as unary '&' operand
#define D2 (2u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:83: note: in expansion of macro 'D2'
peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:86:16: error: lvalue required as unary '&' operand
#define D3 (3u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1270:88: note: in expansion of macro 'D3'
peeled_kc_onestep(1, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:83:16: error: lvalue required as unary '&' operand
#define D0 (0u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1272:73: note: in expansion of macro 'D0'
peeled_kc_onestep(3, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:84:16: error: lvalue required as unary '&' operand
#define D1 (1u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1272:78: note: in expansion of macro 'D1'
peeled_kc_onestep(3, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:85:16: error: lvalue required as unary '&' operand
#define D2 (2u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1272:83: note: in expansion of macro 'D2'
peeled_kc_onestep(3, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:86:16: error: lvalue required as unary '&' operand
#define D3 (3u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1272:88: note: in expansion of macro 'D3'
peeled_kc_onestep(3, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:83:16: error: lvalue required as unary '&' operand
#define D0 (0u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1275:73: note: in expansion of macro 'D0'
peeled_kc_onestep(5, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:84:16: error: lvalue required as unary '&' operand
#define D1 (1u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1275:78: note: in expansion of macro 'D1'
peeled_kc_onestep(5, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:85:16: error: lvalue required as unary '&' operand
#define D2 (2u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1275:83: note: in expansion of macro 'D2'
peeled_kc_onestep(5, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:86:16: error: lvalue required as unary '&' operand
#define D3 (3u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1275:88: note: in expansion of macro 'D3'
peeled_kc_onestep(5, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:83:16: error: lvalue required as unary '&' operand
#define D0 (0u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1277:73: note: in expansion of macro 'D0'
peeled_kc_onestep(7, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:84:16: error: lvalue required as unary '&' operand
#define D1 (1u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1277:78: note: in expansion of macro 'D1'
peeled_kc_onestep(7, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:85:16: error: lvalue required as unary '&' operand
#define D2 (2u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1277:83: note: in expansion of macro 'D2'
peeled_kc_onestep(7, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~
***\AppData\Local\Arduino15\packages\arduino\hardware\mbed_nano\3.4.1\variants\ARDUINO_NANO33BLE/pins_arduino.h:86:16: error: lvalue required as unary '&' operand
#define D3 (3u)
^
***\Documents\Arduino\libraries\Eigen/ArduinoEigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h:1277:88: note: in expansion of macro 'D3'
peeled_kc_onestep(7, blA, blB, traits, &A1, &rhs_panel, &T0, &D0, &D1, &D2, &D3);
^~

exit status 1

Compilation error: exit status 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.