C、无法比较两个缓冲区

标签 c compare atmelstudio

我正在使用一些 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/

相关文章:

c - 在用作 SQLite 聚合器的 C 函数中初始化结构中的值

c - 我应该如何以非 root 身份读取 Linux 上的英特尔 PCI 非核心性能计数器?

c - 当我尝试运行我的程序时,为什么它总是崩溃?

c++ - 调用此函数时无法编译代码

c - Mac OS 更新后,Strcpy 不适用于循环的第一行

java - 比较java中的数组

python - Pandas 将所有 DataFrame 列相互比较

c++ - 比较两个 TDateTime 变量

c - 即使在满足条件后,While 循环也不会中断,但如果我在 while 循环中使用 "printf",则相同的代码开始工作

embedded - 爱特梅尔工作室 : How exacly do data breakpoints trigger?