Проблемка с дигиспарком

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Пишу в песочнице, т.к. вопрос совсем детский. Столкнулся с неожиданным - этот код нормально компилируется для атмег, но не не хочет компилироваться для дигиспарка

int16_t *arr = NULL;

void setup()
{
  Serial.begin(9600);
  arr = new int16_t[5];
  for (byte i = 0; i < 5; i++)
  {
    arr[i] = i;
  }
  
}

void loop()
{
  
}

Выдает ошибку

/tmp/arduino_build_206278/sketch/double_blink1.ino.cpp.o: In function `setup':
/mnt/B6F0D77CF0D74173/_Documents/Vladimir/YandexDisk/Arduino/generated_examples/double_blink1/double_blink1.ino:6: undefined reference to `operator new[](unsigned int)'
collect2: error: ld returned 1 exit status

Аддон для дигиспарка используется этот - http://digistump.com/package_digistump_index.json

ОС - линукс минт

И как быть?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Может там нет "кучи" ?

А если не для массива ? ругается ?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Петрович говорил, надо в исходниках malloc.c чото поправить, придёт - спросим

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Komandir пишет:

А если не для массива ? ругается ?

Не ругается

int16_t *arr = NULL;

void setup()
{
  Serial.begin(9600);
  arr = new int16_t(5);
}

void loop()
{

}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Без ковыряния в ядре - надо просто выделить область sizeof(int16_t)*n байтов и указатель на эту область сохранить в arr.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Komandir пишет:

Без ковыряния в ядре - надо просто выделить область sizeof(int16_t)*n байтов и указатель на эту область сохранить в arr.

Думал, что оператор new именно это и делает )))

Вот так работает

int16_t *arr = NULL;

void setup()
{
  Serial.begin(9600);
  arr = (int16_t *)calloc(5, sizeof(int16_t));
  for (byte i = 0; i < 5; i++)
  {
    arr[i] = i;
  }
}

void loop()
{
}

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Просто его видимо не добавили под нестандартный тип данных.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Видимо да. Ну и фиг с ним, на атмегах calloc тоже работает и ладно )))

rkit
Offline
Зарегистрирован: 23.11.2016

v258 пишет:

Думал, что оператор new именно это и делает )))

Нет, он еще и вызывает конструктор.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

Но есть еще одна непонятка - в одной своей библиотеке отметил несколько методов как deprecated и получил ошибку

/mnt/B6F0D77CF0D74173/_Documents/Vladimir/YandexDisk/Arduino/libraries/shButton/shButton.h:204:3: error: expected unqualified-id before '[' token
   [[deprecated]] void setLongClickTimeout(uint16_t new_timeout);

Опять же для атмег компилируется нормально, а тут - ни в какую. Что за косячище )))

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

rkit пишет:

v258 пишет:

Думал, что оператор new именно это и делает )))

Нет, он еще и вызывает конструктор.

Да я уже понял, что у аддона с С++ кривовато как-то