Цитата
Объясните тогда, что делает этот оператор static byte led_act_delay = LED_ACT_NORMAL_DELAY;?
Попробую
в программе определена символическая константа:
#define LED_ACT_NORMAL_DELAY 10
препроцессор везде где встретит LED_ACT_NORMAL_DELAY заменит на 10
т.е. мы получим код:
static byte led_act_delay = 10;
Переменные типа
static инициализируются только один раз (только при первом вызове функции)
т.е. мы определяем
led_act_delay имеющую тип
byte (typedef unsigned char byte;) которой присваивается 10.
Цитата
Вообще непонятно, зачем объявлять static в подпрограмме, переменная static является такой же глобальной переменной, как и extern, только в пределах файла, где она объявлена, и для удобства пользования должна быть объявлена на внешнем уровне. Объявление переменной может, конечно, включать инициализацию.
С этим не соглашусь,
static является локальной => виден только
в этой функции, а не в пределах файла.
Два простых примера:
Код
/* Демонстрация автоматических и статических локальных переменных */
#include <stdio.h>
void func1 (void)
{
static int x = 20;
int y = 20;
printf ( "x = %i, y = %i\r\n", x--, y-- );
}
void main (void)
{
int count;
for ( count = 0; count < 20; count++ )
{
printf ( "Iteration %i: ", count );
func1 ();
}
}
Код
/* Демонстрация автоматических и статических локальных переменных
** попробуем узнать x из основной программы
*/
#include <stdio.h>
void func1 (void)
{
static int x = 20;
int y = 20;
printf ( "x = %i, y = %i\t", x--, y-- );
}
void main (void)
{
int count;
for ( count = 0; count < 20; count++ )
{
printf ( "Iteration %i: ", count );
func1 ();
printf ( "x = %i\r\n", x );
}
}
PS: пытался обьяснить точно (чтобы небыло недоразумений

)