static
переменные сохраняют свои значения между вызовами функций. Кроме того, они не инициализируются в начале функции; они имеют свое значение с начала программы.
Например, с переменной stati c,
int foo(int bar)
{
static int baz = 0;
if(bar)
baz = 1;
return baz;
}
не совпадает с
int foo(int bar)
{
static int baz;
baz = 0;
if(bar)
baz = 1;
return baz;
}
В первом примере, когда foo
вызывается с ненулевым аргументом, он вернет 1
из этого вызова и любых последующих вызовов. Во втором случае foo
возвращает 1
только когда ему передан ненулевой аргумент и всегда возвращает 0
в противном случае.
В вашем случае command
изменяется прямо здесь:
if (0 == command)
{
ptr = 0;
command = data; // here
uart_buffer[0] = 0;
и, если ptr == size
или таймер не истек, это значение будет сохранено для следующего вызова.