2014-09-25 99 views
0

我正在使用一些C代碼,我完全停留在這個函數中。它應該比較兩個緩衝區和一些偏差。例如,如果EEPROM_buffer [1] = 80,那麼從78到82的TxBuffer值應該是正確的!C,無法比較兩個緩衝區

所以問題是它總是返回-1。我檢查了兩個緩衝區,數據是正確的,他們應該匹配,但不會。程序只運行一段時間,直到達到I = 3和返回-1 ..

我編譯與愛特梅爾工作室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

無論您TxBuffer元素和EEPROM_buffer元素uint16_t。當從80中扣除81作爲uint16_t它會給0xffff,沒有機會abs來幫助你。做一個類型轉換到int32_t,你會變得更好。

+0

'uint16_t * EEPROM_buffer'和'uint16_t * TxBuffer'抱歉,必須糾正我的輸入錯誤。謝謝 – Steen 2014-09-25 19:36:51