У меня проблема с моим Atmega16, я использую USART для получения массива char, затем я пытаюсь разобрать команду и отправить вывод.Сравнивая два массива char, замораживает мой Atmega на некоторых персонажах
У меня есть следующие методы:
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 обугленного массива входных данных, я использую этот метод, чтобы скопировать data_in в command_in массива символов. Я использую атом, потому что мое программное обеспечение использует прерывания.
void copy_command()
{
ATOMIC_BLOCK(ATOMIC_FORCEON) {
memcpy(command_in, data_in, 8);
memset(data_in[0], 0, 8);
}
}
Проблема очень странно, когда я пытаюсь сравнить полукокс из command_in [N], где п индекс к «O» или «M» моего AVR замерзает. Есть некоторые символы, которые не работают (особенно «O», «o» или «M», «m»). Множество символов отлично работает, я нашел эту проблему, когда пытался разбор команды «ОК». Я даже разобрал команду как «ALLRIGHT», и мой UC мог справиться с этим.
Можете ли вы дать более подробную информацию о что происходит, когда ваш AVR «зависает»? Кроме того, можете ли вы добавить определения 'data_in' и' command_in' вашего кода? –
Btw, для более длинных команд вы можете использовать 'strncmp()' вместо того, чтобы проверять все символы один за другим с логическим и inbetween. –
Ваш вызов 'memset' является подозрительным. Первым параметром должен быть указатель, например 'data_in'. Вместо этого вы передаете значение 'data_in [0]' в качестве адреса. Вы можете очистить важную память с помощью этого вызова. – UncleO