0

私はいくつかの C コードを使用していますが、この機能に完全に行き詰まっています。2 つのバッファーを何らかの偏差値と比較する必要があります。たとえば、EEPROM_buffer[1] = 80 の場合、78 から 82 までの TxBuffer 値が正しいはずです!

問題は、常に -1 を返すことです。両方のバッファをチェックしました。データは正しく、一致するはずですが、一致しません。プログラムは i = 3 に達するまで実行され、-1 を返します。

atmel studio 6.1、atmel32A4U マイクロコントローラーでコンパイルします。

int8_t CheckMatching(t_IrBuff * tx_buffer, t_IrBuff * tpool)
{
uint8_t i = 0; 

uint16_t * TxBuffer = (uint16_t*) tx_buffer->data;

while((TxBuffer->state != Data_match) || (i != (SavedBuff_count))) // Data_match = 7;
{   
    uint16_t * EEPROM_buffer = (uint16_t*) tpool[i].data; 

    for(uint16_t j = 0; j < tpool[i].usedSize; j++) // tpool[i].usedSize = 67;
    {
        if(abs(TxBuffer[j] - EEPROM_buffer[j]) > 3)
        {
            i++;
            continue;               
        }
    }

    i++;        
    TxBuffer->state = Data_match; // state value before Data_match equal 6!
}

tx_buffer->state = Buffer_empty;

if(i == (SavedBuff_count)) // SavedBuff_count = 3;
{
    return -1;
}

return i;

}

4

1 に答える 1

1

あなたのTxBuffer要素とEEPROM_buffer要素は両方ともuint16_tです。81から差し引く80と、あなたを助けるチャンスはありませuint16_tん。タイプキャストを行うと、より良い結果が得られます。0xffffabsint32_t

于 2014-09-25T19:31:12.450 に答える