Как массиву байтов присвоить массив байтов ???

Yura_15
Offline
Зарегистрирован: 02.08.2019

В функции по i2c формируется массив байтов. Все полученное надо присвоить другому массиву байтов. Пробовал и глобально объявлять и локально. Пробовал по всякому см. в коде, закоментил в функции loop. Я понимаю, вопрос нубский, но ни в гугле, ни в справочных данных, ни в нагугленных примерах, второй день немогу найти. Хочется кричать :" ПАМАГИТЕ!!!!".

Спасибо за ответы.

byte a[4] = {1, 2, 3, 4};
byte b[4];

void setup() {
  Serial.begin(9600);
}

void loop() {
  //data_save;
  // КАК??? Массиву a присвоить b
  //byte &a = (byte&)b;
  //a = b;
  //byte &b = (byte&)data_save;
  //memcpy(a, b, sizeof(a));
  for (int i=0; i<4;i++) {
    Serial.print(i); Serial.print(" "); Serial.println(a[i]);
  }
  delay(5000);
}

void data_save(){
  // Формируется массивбайтов полученных по i2c
  byte b[4] = {5, 6, 7, 8};
  return b;
}

 

svm
Offline
Зарегистрирован: 06.11.2016

В 15 строке, после фигурной скобки добавьте a[i]=b[i];

Yura_15
Offline
Зарегистрирован: 02.08.2019

В ответе нули. Код сейчас такой:

byte a[4] = {1, 2, 3, 4};
byte b[4];

void setup() {
  Serial.begin(9600);
}

void loop() {
  data_save;
  // КАК??? Массиву a присвоить b
  //byte &a = (byte&)b;
  //a = b;
  //byte &b = (byte&)data_save;
  //memcpy(a, b, sizeof(a));
  for (int i=0; i<4;i++) {
    a[i] = b[i];
    Serial.print(i); Serial.print(" "); Serial.println(a[i]);
  }
  delay(5000);
}

void data_save(){
  // Формируется массив байтов полученных по i2c
  byte b[4] = {5, 6, 7, 8};
  //return b;
}

 

svm
Offline
Зарегистрирован: 06.11.2016

Так у Вас b[i]  и так "0". Присвойте им в начале скетча во 2 строке, какие либо значения, как в 24 строке

Yura_15
Offline
Зарегистрирован: 02.08.2019

Выдает, в массиве a: 11,12,13,14: Но никак не 5,6,7,8. Функция data_save не влияет на массив b,объявленный в начале. Код такой:

byte a[4] = {1, 2, 3, 4};
byte b[4] = {11, 12, 13, 14};

void setup() {
  Serial.begin(9600);
}

void loop() {
  data_save;
  for (int i=0; i<4;i++) {
    a[i] = b[i];
    Serial.print(i); Serial.print(" "); Serial.println(a[i]);
  }
  delay(5000);
}

void data_save(){
  // Формируется массивбайтов полученных по i2c
  byte b[4] = {5, 6, 7, 8};
  //return b;
}

 

svm
Offline
Зарегистрирован: 06.11.2016

Так Вы ее и не вызываете. Вставьте в нее вывод чего нибудь в сериал, и увидите.

Yura_15
Offline
Зарегистрирован: 02.08.2019

svm пишет:

Так Вы ее и не вызываете. Вставьте в нее вывод чего нибудь в сериал, и увидите.

byte a[4] = {1, 2, 3, 4};
byte b[4] = {11, 12, 13, 14};

void setup() {
  Serial.begin(9600);
}

void loop() {
  data_save();
  for (int i=0; i<4;i++) {
    a[i] = b[i];
    Serial.print(i);
    Serial.print(" ");
    Serial.println(a[i]); // Вывод здесь. Ожидаю {5, 6, 7, 8}, получаю: {11, 12, 13, 14}
  }
  delay(5000);
}

void data_save(){
  // Формируется массивбайтов полученных по i2c
  Serial.println("####"); // Код работает но не меняет а.
  byte b[4] = {5, 6, 7, 8};

 

svm
Offline
Зарегистрирован: 06.11.2016

На повторное определение массива, компилятор не ругается? Попробуйте в 22 строке написать b[1]=5;b[2]=6 и т.д

KindMan
Offline
Зарегистрирован: 19.12.2018

У вас b объявляется в функции data_save и она не та, что во второй строке.
P.s. опередил меня svm :)

KindMan
Offline
Зарегистрирован: 19.12.2018

svm пишет:

На повторное определение массива, компилятор не ругается?


Так это warning, у настоящих пацанов это не отображается.

Yura_15
Offline
Зарегистрирован: 02.08.2019

Так точно!!! Теперь по всякому работает. Повторное определение  в функции, вы правы !!!

byte a[4] = {1, 2, 3, 4};
byte b[4] = {11, 12, 13, 14};

void setup() {
  Serial.begin(9600);
}

void loop() {
  data_save();
  for (int i=0; i<4;i++) {
    //a[i] = b[i];          // Теперь и Так работает !!!!
    memcpy(a, b, sizeof(a));    И так тоже работает !!!!
    Serial.print(i);
    Serial.print(" ");
    Serial.println(a[i]); // Вывод здесь. Ожидаю {5, 6, 7, 8}, получаю: {11, 12, 13, 14}
  }
  delay(5000);
}

void data_save(){
  // Формируется массивбайтов полученных по i2c
  Serial.println("####"); // Код работает но не меняет а.
  b[0] = 44;
  b[1] = 55;
  b[2] = 66;
  b[3] = 77;
}

 

svm
Offline
Зарегистрирован: 06.11.2016

Удачи! А 12 строку лучше вынести из цикла. Зачем ее 4 раза выполнять?

Yura_15
Offline
Зарегистрирован: 02.08.2019

KindMan, спасибо. Повторное определение, именно оно. Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить? В чем сейчас люди пишут?

Спасибо за ответы.

Yura_15
Offline
Зарегистрирован: 02.08.2019

svm пишет:

Удачи! А 12 строку лучше вынести из цикла. Зачем ее 4 раза выполнять?

Понимаю. Черновик :)

KindMan
Offline
Зарегистрирован: 19.12.2018

Yura_15 пишет:

Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить?

По умолчанию, в ардуино ide не отображаются так называемые предупреждения. В настройках включите - Отбражать все сообщения компилятора.

Yura_15
Offline
Зарегистрирован: 02.08.2019

KindMan пишет:
Yura_15 пишет:

Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить?

По умолчанию, в ардуино ide не отображаются так называемые предупреждения. В настройках включите - Отбражать все сообщения компилятора.

Включил, буду наблюдать. Спасибо, что отозвались, глупые ошибки делают нервы :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yura_15 пишет:
ни в справочных данных, ни в нагугленных примерах, второй день немогу найти.

На ютубе искал, на порнхабе искал, на блонди.ру тоже ничего нет :(

Да, читайте ж, наконец, Кернигана и Ритчи! Там всё это с примерами и разжёвыванием!

b707
Offline
Зарегистрирован: 26.05.2017

Интересно, как криво надо сформулировать запрос, чтоб на такую элементарщину не найти в гугле ответ?
На "как скопировать массив" в гугле сотни ответов

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Можно я ещё по нубски спрошу? Решить данную задачу через указатели никак нельзя разве?

наверное я что то прогнал. При работе с указателями мы не получим копию массива пока не скопируем всемжлементы (или весь объём памяти массивом занятый). 

Yura_15
Offline
Зарегистрирован: 02.08.2019

b707 пишет:
Интересно, как криво надо сформулировать запрос, чтоб на такую элементарщину не найти в гугле ответ? На "как скопировать массив" в гугле сотни ответов

Сделал ошибку в коде. вопрос исчерпан.

Yura_15
Offline
Зарегистрирован: 02.08.2019

ЕвгенийП пишет:

Yura_15 пишет:
ни в справочных данных, ни в нагугленных примерах, второй день немогу найти.

На ютубе искал, на порнхабе искал, на блонди.ру тоже ничего нет :(

Да, читайте ж, наконец, Кернигана и Ритчи! Там всё это с примерами и разжёвыванием!

Я не знал про "Кернигана и Ритчи". Не зря запостил. Спасибо за ответ. 

Yura_15
Offline
Зарегистрирован: 02.08.2019

BOOM пишет:

Можно я ещё по нубски спрошу? Решить данную задачу через указатели никак нельзя разве?

наверное я что то прогнал. При работе с указателями мы не получим копию массива пока не скопируем всемжлементы (или весь объём памяти массивом занятый). 

Так оно и получилось. Изминил элементы массива правильно и все ОК.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yura_15 пишет:

Я не знал про "Кернигана и Ритчи". 

Значит, придя на форум, не ознакомился с разделом "Песочница". Там всё написано.