Вечер бился, так и не придумал как это реализовать. Есть шина с неизвестным количеством датчиков. Как собрать все их адреса в один массив?
проблема в том, что непонятно, как добавить в массив значение и какой формат массива добавить. вопрос возник из-за специфики адреса.
Адрес - это 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; Писал навскидку, не компилировал, только для демонстрации подхода. Без претензий, короче.
Ок, прикладывай подорожник, говорят, помогает. А я по прежнему буду использовать динамическое выделение памяти, т.к. всё работает норм, если подходить с умом. Проблем с фрагментацией кучи пока не ловил, ттт.
Ха. Сама процедура автоконфигурации 1-Wire сети весьма занятная вещь. Вас ведь именно это интересует, а не выделение памяти под массив адресов ? И еще алгоритм подсчета контрольной суммы ? https://www.maximintegrated.com/en/app-notes/index.mvp/id/187 http://radiohlam.ru/?p=1420