C,无法比较两个缓冲区

时间:2014-09-25 19:18:21

标签: c compare atmelstudio

我正在使用一些C代码,我完全陷入了这个功能。它应该将两个缓冲区与一些偏移器进行比较。例如,如果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;

}

1 个答案:

答案 0 :(得分:1)

您的TxBuffer元素和EEPROM_buffer元素均为uint16_t。从81中扣除80作为uint16_t时,它会0xffffabs无法帮助您。对int32_t做一个类型转换,你会更好。