Сбор адресов DS18B20 в массив

Тема в разделе "Arduino & Shields", создана пользователем UnSstrennen, 22 дек 2018.

Метки:
  1. UnSstrennen

    UnSstrennen Нерд

    Вечер бился, так и не придумал как это реализовать. Есть шина с неизвестным количеством датчиков. Как собрать все их адреса в один массив?
     
  2. Выделить массив, и вызывать search в цикле, пока не закончатся.
     
  3. UnSstrennen

    UnSstrennen Нерд

    проблема в том, что непонятно, как добавить в массив значение и какой формат массива добавить. вопрос возник из-за специфики адреса.
     
  4. UnSstrennen

    UnSstrennen Нерд

    Можете привести код, пожалуйста?
     
  5. Airbus

    Airbus Радиохулиган Модератор

    А подумать не?
     
  6. DIYMan

    DIYMan Guest

    Адрес - это 8 байт. Т.е. у вас должен быть массив из N раз по 8 байт, где N - кол-во датчиков на шине. Память выделяется/даляется при помощи new/delete или malloc/free/realloc.

    В общем случае примерный код будет выглядеть так:
    Код (C++):

    typedef uint8_t[8] ROM;
    ROM* addresses = NULL;
    uint16_t count = 0;
    OneWire ow(pinNumber);

    ow.reset_search();
    ROM deviceAddress;

    while(ow.search(&deviceAddress))
    {
      if(addresses)
      {
         ROM* newAddresses = new ROM[ (count+1) *sizeof(ROM)];
         memcpy(newAddresses,addresses, count*sizeof(ROM));
         delete[] addresses;
         memcpy(newAddresses+count*sizeof(ROM),&deviceAddress,sizeof(ROM));
         addresses = newAddresses;
         count++;
      }
      else
      {
        addresses = new ROM[++count];
        memcpy(addresses,&deviceAddress,sizeof(ROM));
      }

    }

    // тут в addresses лежит count записей адресов по 8 байт каждый.

    // когда уже не нужно - очищаем память
    delete[] addresses;

     
    Писал навскидку, не компилировал, только для демонстрации подхода. Без претензий, короче.
     
    Andrey12 нравится это.
  7. Vovka

    Vovka Гик

    И забыл, что память не резиновая...
     
  8. DIYMan

    DIYMan Guest

    Ну да, ещё я шнурки топикстартеру не погладил :)
     
    Andrey12 нравится это.
  9. parovoZZ

    parovoZZ Гуру

    в МК??? Механизм контроля памяти есть? А то сейчас насоветуете
     
  10. DIYMan

    DIYMan Guest

    Ок, прикладывай подорожник, говорят, помогает. А я по прежнему буду использовать динамическое выделение памяти, т.к. всё работает норм, если подходить с умом. Проблем с фрагментацией кучи пока не ловил, ттт.
     
    Andrey12 и DetSimen нравится это.
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Последнее редактирование: 24 дек 2018
  12. b707

    b707 Гуру

    это как раз описано сотни раз