0 Вопрос: Передать указатель в функцию или массив в функцию

вопрос создан в Thu, May 2, 2019 12:00 AM

Я пытаюсь понять, что я делаю неправильно. У меня проблема до нескольких строк кода. Программа будет зависать или вести себя неправильно при использовании кода.  Просто интересно, правильно ли я передаю это для массива?

void callFunction(uint8_t &channel)
{
        uint8_t address[8]; //1wire wire address and CRC
    uint8_t scratchPad[8]; //holding for onewire capture
        readScratchPad(address,scratchPad,channel);
}

void Temperature::readScratchPad(uint8_t rom[8],uint8_t data[8],const     uint8_t &channel)
{
    //read temperature data.
    wireReset(); //reset();
    selectChannel(channel); //necessary on -800
    wireSelect(rom);
    wireWriteByte(0xbe);         // Read Scratchpad command
    //display hex values of scratchpad
    for ( int i = 0; i < 8; i++) {           // we need 9 bytes
        data[i] = wireReadByte();
    }
}

Единственное, что может быть, это то, что я неправильно передаю указатель на функцию:

function getNext()
{
     uint8_t address[8];
     getNextAddress(address);
}

bool Temperature::getNextAddress(uint8_t *vAddress)
{
    if ( !wireSearch(vAddress))
    {
        wireResetSearch();
        wireReset();
        wireSkip();
        return false;
    }
    return true;
}

Я передавал указатель как getNext (& address [8]), но он тоже не работал.  Спасибо,

    
0
  1. Передача массива (которая в любом случае сводится к передаче адреса) выглядит правильно в обоих фрагментах кода. Это, безусловно, неправильно в последней строке вашего вопроса, так что просто не делайте этого. Вам нужно запустить вашу программу через отладчик и /или valgrind. У нас нет никакой возможности помочь в этом, поскольку мы, безусловно, не можем воспроизвести вашу проблему с тем, что у нас есть.
    2019-05-02 14: 50: 07Z
  2. Я извиняюсь, знаю, что вы не можете дублировать его, но он находится на печатной плате, поэтому я не могу подключить отладчик, поверьте мне, если бы мог. Поэтому не делайте & array [0] при переходе к указателю в функции. Правильно?
    2019-05-02 14: 58: 01Z
  3. Единственная возможная проблема, которую я вижу, - это возможность wireSearch или wireSelect писать более восьми uint8_ts.
    2019-05-02 14: 58: 10Z
  4. @ DonaldBoissonneault &address[0] не в вашем последнем предложении. &address[8] - это то, что вы представили, и это, безусловно, неправильно. И &address[0] бессмысленен сам по себе. Он эквивалентен address в любом контексте выражения, ожидающем указатель на базу, поэтому, если вы не хотите набирать символы для удовольствия, в &address[0] нет смысла независимо; address будет достаточно.
    2019-05-02 15: 00: 34Z
  5. Предложение. Если вы не можете отлаживать на целевом оборудовании, отлаживайте как можно больше на оборудовании, которое вы можете отлаживать. Например, протестируйте живой смурф из вашей программы на ПК, и, когда вы поймете, что логика логична, запустите ее на цели, чтобы разрешить привередливые детали. Это может потребовать от вас написания кода, который абстрагирует или имитирует аппаратное обеспечение, но написание этого «заглушки» кода часто занимает меньше времени, чем попытка отладки методом проб и догадок.
    2019-05-02 15: 07: 33Z
0 ответов                              0                         
источник размещен Вот