2015-04-26 4 views
0

ОБНОВЛЕНИЕ: получена окончательная ошибка, зафиксированная фактически заменой оператора [] на this-> operator [].Сбор неисправностей Библиотека EKfilter C++ на Arduino DUE

ОБНОВЛЕНИЕ 2: исправлено логическое исправление! Ошибка _P это все, что осталось! (который появляется только в DUE, а не в UNO или других платах ...)

ОБНОВЛЕНИЕ 3: Изменение имени матрицы темпа на _Pt было забронировано, возможно, было зарезервированным макросом?

NEW ОШИБКА:

Arduino: 1.6.1 (Mac OS X), Board: "Arduino Due (Programming Port)" 

/Users/zackbright/Documents/Arduino/libraries/StandardCplusplus-master/func_exception.cpp: In function 'void std::__throw_bad_alloc()': 
/Users/zackbright/Documents/Arduino/libraries/StandardCplusplus-master/func_exception.cpp:30:18: error: exception handling disabled, use -fexceptions to enable 
     throw bad_alloc(); 
        ^
Error compiling. 

Похоже, мне нужно использовать -fexceptions ...

Этот отчет будет иметь больше информации с "Показать подробный вывод во время компиляции" включена в File> Preferences ,

Здесь много, но я надеюсь, что дать все, что я должен сделать, чтобы получить хороший ответ на это.

с использованием Arduino 1.6.1 для arduino DUE на OSX.

используя эту библиотеку, чтобы получить зЬе имена «https://github.com/maniacbug/StandardCplusplus/»

И это библиотека У меня возникли проблемы с компиляцией: «http://kalman.sourceforge.net/index.php»

я переехал вокруг библиотеки фильтров в этот формат буду в состоянии использовать его fr arduino, и теперь смогли, по крайней мере, включить include, не найдя файлы заголовков:

Как вы можете видеть, мне пришлось переименовать файлы в .h heade RS (не знаю, как это необходимо на самом деле), и переименовать папку с тем же названием, как мой .cpp и .h, и, конечно, редактировать все вложенные файлы по-разному ссылаться на файлы: пример

#include "kalman/ekfilter.hpp" 
//the "kalman/" is because these used to be in a separate include folder 

является Теперь вместо этого:

#include "ekfilter.h" 

Итак, теперь, когда я просто пытаюсь скомпилировать:

#include <StandardCplusplus.h> 
#include <ekfilter.h> 

void setup() { 
    // put your setup code here, to run once: 
} 

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

Я получаю этот беспорядок ошибки, показанные ниже.

Первая ошибка действительно сводит меня с ума, потому что эта библиотека StandardCplusplus должна обрабатывать пространство std :: namespace, и я ничего не могу явно ошибаться в реализации этой кодовой базы.

Из того, что я вижу, большая часть всего, что стоит за _P, является проблемой, когда первая ошибка предотвращает листинг переменной _P как матрицы, как определено в kmatrix.h. Как ни странно, и это может указывать на решение, эти ошибки НЕ появляются, когда я компилирую Arduino UNO.

Последняя пара ошибок. Я просто не совсем понимаю, что это значит.

Arduino: 1.6.1 (Mac OS X), Board: "Arduino Due (Programming Port)" 

In file included from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:37:0, from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33, from TestKalmanLibrary.ino:2:

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:74:48: error: expected class-name before '{' token

struct KalmanError : public std::logic_error { 
              ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h: In constructor 'Kalman::KalmanError::KalmanError(const string&)': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:82:9: error:

class 'Kalman::KalmanError' does not have any field named 'logic_error'

: logic_error(message) {} 
    ^

In file included from /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/cctype:19:0, from /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/istream:21, from /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/iostream:27, from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:35, from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33, from TestKalmanLibrary.ino:2: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h: At global scope:

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:807:20:

error: expected unqualified-id before numeric constant

mutable Matrix _P; //!< Temporary matrix. 
       ^

In file included from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:817:0, from TestKalmanLibrary.ino:2: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: In member function 'void Kalman::EKFilter::init(Kalman::EKFilter::Vector&, Kalman::EKFilter::Matrix&)':

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:196:8: error:

request for member 'swap' in '16', which is of non-class type 'int'

_P.swap(P_); 
    ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: In member function 'const Matrix& Kalman::EKFilter::calculateP() const': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:435:10: error: request for member 'resize' in '16', which is of non-class type 'int'

_P.resize(n, n);   // keep this resize 
    ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:439:15: error: expression cannot be used as a function

 _P(i,i) = U(i,i); 
     ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:443:17: error: expression cannot be used as a function

 _P(i,j) = U(i,j)*U(j,j); 
      ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:17: error: expression cannot be used as a function

 _P(i,i) += U(i,j)*_P(i,j); 
      ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:35: error: expression cannot be used as a function

 _P(i,i) += U(i,j)*_P(i,j); 
          ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:447:19: error: expression cannot be used as a function

  _P(i,j) += U(i,k)*U(j,k)*U(k,k); 
      ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:17: error: expression cannot be used as a function

 _P(j,i) = _P(i,j); 
      ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:27: error: expression cannot be used as a function

 _P(j,i) = _P(i,j); 
        ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: In member function 'virtual void Kalman::EKFilter::sizeUpdate()': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:572:26: error: expression cannot be used as a function

 U(i,j) = _P(i,j); 
        ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:583:10: error: request for member 'resize' in '16', which is of non-class type 'int'

_P.resize(n, nn); 
    ^

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:586:17: error: expression cannot be used as a function

 _P(i,j) = U(i,j); 
      ^

In file included from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:34:0, from /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33, from TestKalmanLibrary.ino:2: /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/string: In instantiation of 'std::basic_string::size_type std::basic_string::find_first_not_of(const std::basic_string&, std::basic_string::size_type) const [with Ch = char; Tr = std::char_traits; A = std::allocator; std::basic_string::size_type = unsigned int]': /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector_impl.h:66:42: required from here /Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/string:518:64: note: declarations in dependent base 'std::vector >' are not found by unqualified lookup

       if(Tr::eq(str[j], operator[](i))){ 
                  ^

/Users/insertnamehere/Documents/Arduino/libraries/StandardCplusplus-master/string:518:64: note: use 'this->operator[]' instead Error compiling.

Так что есть много, чтобы исправить здесь, но все это после того, как я исправил некоторые проблемы с тем, как библиотека была отформатированный уже:

мне пришлось добавить -fpermissive в «/ доски .txt»компиляция предпочтение

там было странная реализация в коде, который не будет компилировать, я изменил это:

// These are explicitly GNU C++ specific. 

// This is the exception class we report -- "GNUCC++\0". 

const _Unwind_Exception_Class __gxx_exception_class 
= ((((((((_Unwind_Exception_Class) 'G' 
    << 8 | (_Unwind_Exception_Class) 'N') 
<< 8 | (_Unwind_Exception_Class) 'U') 
    << 8 | (_Unwind_Exception_Class) 'C') 
    << 8 | (_Unwind_Exception_Class) 'C') 
    << 8 | (_Unwind_Exception_Class) '+') 
<< 8 | (_Unwind_Exception_Class) '+') 
<< 8 | (_Unwind_Exception_Class) '\0'); 
44445164 +10617451515053691368888

к этому:

const _Unwind_Exception_Class __gxx_exception_class = "GNUCC++\0"; 
+0

похоже, что вы должны '#include ' в ekfilter.h – Lol4t0

+0

, которые включают уже в ktypes.h, где и возникает ошибка. –

+0

Также стоит отметить, что мне пришлось добавить #include "Arduino.h" ко всем файлам, чтобы они тоже собирались для Arduino. –

ответ

0

ВСЕ ВОПРОСЫ РАЗРЕШИТЬ СЕЙЧАС.

Последняя ошибка решена путем включения -f_exceptions в мои флаги компилятора.

Спасибо за помощь, ребята.

Смежные вопросы