我的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_in char数组。我使用atomic是因为我的软件使用了中断。
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可以解决这个问题。
答案 0 :(得分:0)
假设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])
作为大小参数)