我正在使用一些 C 代码,但我完全陷入了这个函数。它应该将两个缓冲区与一些偏差进行比较。例如,如果 EEPROM_buffer[1] = 80,那么 TxBuffer 值从 78 到 82 应该是正确的!
所以问题是它总是返回-1。我检查了两个缓冲区,数据是正确的,它们应该匹配,但不会。程序只是运行 while 直到达到 i = 3 并返回 -1..
我使用 atmel studio 6.1、atmel32A4U 微 Controller 进行编译..
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;
}
最佳答案
您的 TxBuffer
元素和 EEPROM_buffer
元素都是 uint16_t
。当从 80
中扣除 81
作为 uint16_t
时,它会给出 0xffff
,没有机会 abs
来帮助你。对 int32_t
进行类型转换,效果会更好。
关于C、无法比较两个缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046396/