Как массиву байтов присвоить массив байтов ???
- Войдите на сайт для отправки комментариев
Сб, 10/08/2019 - 22:09
В функции по 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;
}
В 15 строке, после фигурной скобки добавьте a[i]=b[i];
В ответе нули. Код сейчас такой:
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; }Так у Вас b[i] и так "0". Присвойте им в начале скетча во 2 строке, какие либо значения, как в 24 строке
Выдает, в массиве 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; }Так Вы ее и не вызываете. Вставьте в нее вывод чего нибудь в сериал, и увидите.
Так Вы ее и не вызываете. Вставьте в нее вывод чего нибудь в сериал, и увидите.
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};На повторное определение массива, компилятор не ругается? Попробуйте в 22 строке написать b[1]=5;b[2]=6 и т.д
У вас b объявляется в функции data_save и она не та, что во второй строке.
P.s. опередил меня svm :)
На повторное определение массива, компилятор не ругается?
Так это warning, у настоящих пацанов это не отображается.
Так точно!!! Теперь по всякому работает. Повторное определение в функции, вы правы !!!
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; }Удачи! А 12 строку лучше вынести из цикла. Зачем ее 4 раза выполнять?
KindMan, спасибо. Повторное определение, именно оно. Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить? В чем сейчас люди пишут?
Спасибо за ответы.
Удачи! А 12 строку лучше вынести из цикла. Зачем ее 4 раза выполнять?
Понимаю. Черновик :)
Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить?
По умолчанию, в ардуино ide не отображаются так называемые предупреждения. В настройках включите - Отбражать все сообщения компилятора.
Пишу в Arduino ide, как я понял в другой среде разработки эту ошибку можно было бы заметить?
Включил, буду наблюдать. Спасибо, что отозвались, глупые ошибки делают нервы :)
На ютубе искал, на порнхабе искал, на блонди.ру тоже ничего нет :(
Да, читайте ж, наконец, Кернигана и Ритчи! Там всё это с примерами и разжёвыванием!
Интересно, как криво надо сформулировать запрос, чтоб на такую элементарщину не найти в гугле ответ?
На "как скопировать массив" в гугле сотни ответов
Можно я ещё по нубски спрошу? Решить данную задачу через указатели никак нельзя разве?
наверное я что то прогнал. При работе с указателями мы не получим копию массива пока не скопируем всемжлементы (или весь объём памяти массивом занятый).
Сделал ошибку в коде. вопрос исчерпан.
На ютубе искал, на порнхабе искал, на блонди.ру тоже ничего нет :(
Да, читайте ж, наконец, Кернигана и Ритчи! Там всё это с примерами и разжёвыванием!
Я не знал про "Кернигана и Ритчи". Не зря запостил. Спасибо за ответ.
Можно я ещё по нубски спрошу? Решить данную задачу через указатели никак нельзя разве?
наверное я что то прогнал. При работе с указателями мы не получим копию массива пока не скопируем всемжлементы (или весь объём памяти массивом занятый).
Так оно и получилось. Изминил элементы массива правильно и все ОК.
Я не знал про "Кернигана и Ритчи".
Значит, придя на форум, не ознакомился с разделом "Песочница". Там всё написано.