比较两个字符数组会冻结我在某些字符上的Atmega



我的Atmega16有问题,我使用USART获取char数组,然后我尝试解析命令并发送输出。

我有这些方法:

void process_command()
{
    if(command_in[0]=='D'  && command_in[1]=='X') {
        // do something or do nothing
    }
    else if(command_in[0]=='S' && command_in[1]=='X'){
        // do something or do nothing
    }
    else{
        // do something or do nothing
    }
}

command_in是输入的coppied char数组,我使用此方法将data_in复制到command_inchar数组。我使用原子,因为我的软件使用中断。

void copy_command ()
{
    ATOMIC_BLOCK(ATOMIC_FORCEON) {
        memcpy(command_in, data_in, 8);
        memset(data_in[0], 0, 8);
    }
}

这个问题很奇怪,当我试图将command_in[n]中的char(其中n是索引)与"O"或"M"进行比较时,我的AVR会冻结。有些字符不起作用(尤其是"O"、"O"或"M"、"M")。很多字符都很好用,我在解析"OK"命令时发现了这个问题。我甚至解析了像"ALLRIGHT"这样的命令,我的uC可以处理这个问题。

假设data_in类似于uint8_t data_in[DATA_MAXLEN] ;,则memset(data_in[0], 0, 8);读取data_in的第一个元素并将其用作地址,并将该地址的下8个字节设置为零。

你可能想要类似的东西

memset(data_in, 0, sizeof(data_in));

(假设data_in是一个数组而不是指针。如果它是指针,则应使用DATA_MAXLEN*sizeof(data_in[0])作为大小参数)

最新更新