ОБНОВЛЕНИЕ: исправлена последняя ошибка путем замены оператора [] на this-> operator [].
ОБНОВЛЕНИЕ 2: исправлена логическая ошибка!
_P ошибка это все, что осталось! (который отображается только в DUE, а не в UNO или других досках …)
ОБНОВЛЕНИЕ 3: Изменение имени временной матрицы на _Pt сработало, возможно, был зарезервированный макрос?
НОВАЯ ОШИБКА:
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 …
Этот отчет будет иметь больше информации с
Функция «Показать подробный вывод во время компиляции» включена в меню «Файл»> «Настройки».
Здесь много всего, но я надеюсь, что дать все это то, что я должен сделать, чтобы получить хороший ответ на это.
используя Arduino 1.6.1 для Arduino DUE на OSX.
используя эту библиотеку, чтобы получить пространство имен std
‘https://github.com/maniacbug/StandardCplusplus/‘
И это библиотека, у меня возникают проблемы при компиляции:
‘http://kalman.sourceforge.net/index.php‘
Я переместил библиотеку фильтров в этот формат, чтобы иметь возможность использовать ее для Arduino, и теперь я смог, по крайней мере, сделать включение, не находя заголовочные файлы:
Как видите, мне пришлось переименовать файлы в заголовки .h (не уверен, насколько это действительно необходимо), и переименовать папку с тем же названием, что и мои .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 ::, и я не могу найти ничего плохого в реализации этой кодовой базы.
Из того, что я вижу, большая часть всего, что следует за _P, — это проблема, связанная с тем, что первая ошибка не позволяет приводить переменную _P в виде матрицы, как определено в kmatrix.h. Как ни странно, и это может указывать на решение, эти ошибки НЕ появляются, когда я компилирую для Arduino UNO.
Последняя пара ошибок мне просто непонятна, если честно, что это вообще значит.
Arduino: 1.6.1 (Mac OS X), Board: "Arduino Due (Programming Port)"
В файл включен из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:37:0,
из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33,
от TestKalmanLibrary.ino: 2:/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:74:48: ошибка: ожидаемое имя класса до маркера ‘{‘
struct KalmanError : public std::logic_error { ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h: в конструкторе ‘Kalman :: KalmanError :: KalmanError (постоянная строка&) ‘:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:82:9: error:класс ‘Kalman :: KalmanError’ не имеет никакого поля с именем ‘logic_error’
: logic_error(message) {} ^
В файле, включенном из / Users / insertnamehere / Documents / Arduino / library / StandardCplusplus-master / cctype: 19: 0,
от / Users / имя_ссылки здесь / Documents / Arduino / библиотеки / StandardCplusplus-master / istream: 21,
из / Пользователи / insertnamehere / Documents / Arduino / библиотеки / StandardCplusplus-master / iostream: 27,
из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:35,
из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33,
от TestKalmanLibrary.ino: 2:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h: в глобальном масштабе:/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:807:20:
ошибка: ожидаемый неквалифицированный идентификатор перед числовой константой
mutable Matrix _P; //!< Temporary matrix. ^
В файл включен из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:817:0,
от TestKalmanLibrary.ino: 2:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: В функции-член ‘void Kalman :: EKFilter :: init (Kalman :: EKFilter :: Vector&, Калман :: EKFilter :: Матрица&) ‘:/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:196:8: error:
запрос на член ‘swap’ в ’16’, который имеет тип non-class ‘int’
_P.swap(P_); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: в функции-члене const Matrix& Kalman :: EKFilter :: вычисленияP () const ‘:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:435:10: ошибка: запрос на член ‘resize’ в ’16’, который имеет неклассовый тип ‘int’_P.resize(n, n); // keep this resize ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:439:15: error: выражение не может использоваться как функция
_P(i,i) = U(i,i); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:443:17: ошибка: выражение не может использоваться как функция
_P(i,j) = U(i,j)*U(j,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:17: ошибка: выражение не может использоваться как функция
_P(i,i) += U(i,j)*_P(i,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:35: error: выражение не может использоваться как функция
_P(i,i) += U(i,j)*_P(i,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:447:19: ошибка: выражение не может использоваться как функция
_P(i,j) += U(i,k)*U(j,k)*U(k,k); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:17: ошибка: выражение не может использоваться как функция
_P(j,i) = _P(i,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:27: ошибка: выражение не может использоваться как функция
_P(j,i) = _P(i,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h: В функции-члене ‘виртуальная пустота Калмана :: EKFilter :: sizeUpdate ()’:
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:572:26: ошибка: выражение не может использоваться как функцияU(i,j) = _P(i,j); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:583:10: error: запрос на член ‘resize’ в ’16’, который имеет неклассовый тип ‘int’
_P.resize(n, nn); ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:586:17: ошибка: выражение не может использоваться как функция
_P(i,j) = U(i,j); ^
В файл включен из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:34:0,
из /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33,
от TestKalmanLibrary.ino: 2:
/ Users / имя_страницы здесь / Documents / Arduino / библиотеки / StandardCplusplus-master / string: в экземпляре ‘std :: basic_string :: size_type std :: basic_string :: find_first_not_of (const std :: basic_string&, std :: basic_string :: size_type) const [с 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: требуется отсюда
/ Users / insertnamehere / Documents / Arduino / library / StandardCplusplus-master / string: 518: 64: примечание: объявления в зависимой базе ‘std :: vector>’ не найдены при неквалифицированном поискеif( Tr::eq(str[j], operator[](i)) ){ ^
/ Users / имя_страницы здесь / Documents / Arduino / библиотеки / StandardCplusplus-master / string: 518: 64: примечание: вместо этого используйте оператор ‘this-> operator []’
Ошибка компиляции.
Так что здесь многое нужно исправить, но это все после того, как я исправил некоторые проблемы с тем, как библиотека уже отформатирована:
Мне пришлось добавить -fpermissive в «/boards.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');
к этому:
const _Unwind_Exception_Class __gxx_exception_class = "GNUCC++\0";
ВСЕ ВОПРОСЫ РЕШЕНЫ СЕЙЧАС.
Последняя ошибка решена включением -fexceptions во флаги моего компилятора.
Спасибо за помощь, ребята!