Портирование библиотеки FastNoise c++ на Due

arduino-due printf

Я пытаюсь использовать библиотеку FastNoise с Due, однако при попытке выполнить требования получаю что-то вроде следующих ошибок.

ошибка: «abs» не был объявлен в этой области
ошибка: «mt19937» не является членом «std»
ошибка: 'uniform_int_distribution' не является членом 'std'

поэтому я добавил следующее:

#include <cstdlib>
#include <cmath>
#include <random>

который решил большинство проблем, однако по-прежнему сообщает, что printf не объявлен. Поэтому я попытался отредактировать cstdio, чтобы закомментировать #undef printf, но он просто вернул полный список сообщений об ошибках, так что это не решение. Я погуглил несколько решений, но ни одно из них, похоже, не работает. Есть ли у вас какие-либо предложения, которые мне следует попробовать?

Я не пытаюсь использовать printf, просто хочу использовать библиотеку.

Спасибо за любую помощь.

, 👍1

Обсуждение

Также спросили здесь: https://forum.arduino.cc/index.php?topic=579997.0, и мы до сих пор не знаем, какую библиотеку вы пытаетесь перенести на Arduino., @Jot

извините за спам, вот этот: https://github.com/Auburns/FastNoise, @Gergo

Я не знаю, как расширения std и алгоритма используются в компиляторе gcc для Arduino. Они не используются много. Я думаю, что его можно будет преобразовать в обычный код C++. printf может быть связан с расширением std и cstdlib. Препроцессор Arduino включает в себя наиболее распространенные включаемые файлы, необходимо включать только дополнительные библиотеки. Ваш заголовок этого вопроса касается FastNoise, но проблема в том, как перенести код на Arduino. Возможно, вы можете изменить название вопроса, чтобы привлечь внимание экспертов., @Jot


2 ответа


Лучший ответ:

0

Библиотека FastNoise компилируется так же, как и для Arduino MKR и Arduino Zero, но есть «неприятная» проблема для Срок выполнения: https://github.com/arduino/ArduinoCore-samd/issues/308

Проблему с assert можно легко решить, но #include <algorithm> и #include <random> каким-то образом связан с функцией printf.
Я думал, что это очень сложно, но затем @Juraj написал в своем ответе о простом решении закомментировать строку #undef printf.

В файле cstdio находится список примерно из сорока строк #undef. Закомментировать необходимо только printf.

// #undef printf

Файл находится в скрытой папке «Arduino15» в среде сборки Due: Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\arm-none-eabi\ включить\c++\4.8.3\cstdio

Затем он также скомпилируется для Arduino Due (даже без удаления утверждения). Есть много предупреждений.

Мне удалось запустить его на процессоре SAMD21, и он выдает случайные числа. Однако я не уверен, что эти цифры верны. Я не знаю, можно ли игнорировать многочисленные предупреждения компилятора.

#include <FastNoise.h>

FastNoise myNoise; // Создаем объект FastNoise

float heightMap[32][32]; // 2D-карта высот для создания ландшафта

void setup() {
  SerialUSB.begin(9600);
  SerialUSB.println("FastNoise");
  delay(1000);

  myNoise.SetNoiseType(FastNoise::SimplexFractal); // Устанавливаем желаемый тип шума

  for(int x=0; x<32; x++) {
    for(int y=0; y<32; y++) {
      heightMap[x][y] = myNoise.GetNoise(x,y);
      SerialUSB.println(heightMap[x][y]);
    }
  }
}

void loop() {
}

Знаете ли вы проблему XY? Вы не объяснили причину попытки запустить эту библиотеку на Arduino Due. Возможно, есть другой способ добиться того, чего вы хотите.

Arduino Due была крупным обновлением плат Arduino, но в настоящее время некоторые говорят, что следует избегать Arduino Due, поскольку у нее есть проблемы (аппаратное и программное обеспечение).


Я обновил свой ответ с помощью ответа @Juray.

,

Спасибо, ребята, я пытался удалить эту строку раньше, но она просто выдавала те же сообщения об ошибках, когда никакая библиотека не была включена (отсутствует функция абс и так далее). Более того, мне не удалось скомпилировать его ни для Zero, ни для MKR. Возможно ли, что мне чего-то не хватает? У меня есть обычная Arduino IDE, и я скачал последние версии плат. (сообщение об ошибке составляет около 1000 строк, возможно, это те предупреждения, о которых вы упоминаете? Однако у меня оно не компилируется), @Gergo

Я экспериментирую со светодиодами с библиотекой FastLED и последовательной связью, но связь не была идеальной, поскольку эти светодиоды (WS2812B) требуют точной синхронизации, а прерывания отключены, пока Uno отправляет данные светодиода. Так вот на странице помощи FastLED советуют переключиться на Teensy или Due. Поскольку Due казался более легким шагом по сравнению с Uno, я выбрал его. И с добавлением вычислительных мощностей я подумал, что смогу использовать библиотеку FastNoise для генерации шума вместо библиотеки FastLED (которая хороша, но имеет свои недостатки). Так что я вообще не настаиваю на использовании Due., @Gergo

Как вы думаете, можно ли запустить FastNoise на Teensy? Или это будет еще труднее заставить работать? Teensy кажется более мощным в математике с плавающей запятой (которую использует эта библиотека), чем Zero. К сожалению, я даже не уверен, какая именно вычислительная мощность мне нужна, я как раз собирался проверить, насколько быстро работает Due с библиотекой (так как мне все равно пришлось переключиться из-за проблем с последовательной связью с Uno)., @Gergo

@Gergo, ты можешь попытаться снова получить файлы библиотеки FastNoise, возможно, что-то изменилось. Он компилируется для нуля и mkr и, закомментировав эту строку, также для причитающегося. У меня нет опыта общения с подростками. Stackexchange — это вопросы и ответы. Вы можете обновить свой вопрос о том, что вы хотите использовать его для светодиодов ws2812b и что рекомендуется использовать крошечный или должный срок и так далее., @Jot

По данным github, FastNoise не изменился за последний год или около того, поэтому я скептически относился к его повторной загрузке, но, тем не менее, сделал это, и теперь он соответствует требованиям. Я не уверен, что пошло не так, так как FastNoise у меня должен быть тот же, так как он вроде бы не изменился. В любом случае, большое спасибо за ваше время и помощь в этом вопросе. Кроме того, спасибо за рекомендации по использованию этого форума., @Gergo


1

Обходной путь описан в проблеме, найденной Jot. В файле

C:\Users\aaaaaa\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\4.8.3-2014q1\arm-none-eabi\include\c++\4.8 .3\cstdio

прокомментируйте строку

#undef printf

и он скомпилируется

,

Спасибо, я это пропустил. Я обновил свой ответ., @Jot

@Jot, строку нужно удалить, @Juraj