fl
МИКРОКОНТРОЛЛЕРЫ
J
языке С (да и не только на нем) выполняется компилятором
последовательно. Впрочем, расположить описание вызы-
ваемой функции до описания вызывающей - не единствен-
ный способ сообщить компилятору информацию об “уст-
ройстве” функции.
В целом про функции, описанные выше, можно сказать,
что это - программы выхода для автоматов, управляющих
светодиодами. А поскольку управление одним светодиодом
ничем не отличается от управления другим светодиодом,
/ /
/ /
Секция объявлений для автомата.
/ /
мы вместо восьми экземпляров функций, индивидуально
“заточенных” под каждый светодиод, написали по одной
общей функции, управляющей тем светодиодом, номер
которого передается в функцию в качестве параметра.
Смысловое назначение каждой функции указано в коммен-
тариях к ней, более подробно мы на этом пока останавли-
ваться не будем.
Следующий участок программы - описание автоматной
таблицы:
typedef void exitProc(unsigned char buttonNo);
/ / <1> описание программы выхода.
typedef s tru c t
{unsigned char
unsigned char
unsigned char
exitP roc
} automatLine;
actualCond;
te rm in a l;
newCond;
♦action;
/ / <2> Описание строки автоматной таблицы.
/ / - текущее состояние автомата.
/ / - поступивший на вход автомата терминал.
/ / - новое состояние автомата.
/ / - программа выхода автомата.
{{0 ,
BUTTON_ON,
1,
START_2 0MSEC),
{1,
TIMEOUT,
2,
STOP_TIMER_TURNON_LED),
{1,
BUTTON_OFF,
0,
STOPJTIMER),
{2,
BUTTONJOFF,
3,
START_2 0MSEC},
{3,
TIMEOUT,
8,
START_0 5SEC},
{3,
BUTTON JON,
2,
STOPJTIMER},
{4,
BUTTONJDN,
5,
START_2 0MSEC},
{5,
TIMEOUT,
14,
START_0 5SEC},
{5,
BUTTONJOFF,
4,
STOPJTIMER},
{6,
BUTTON_OFF,
7,
START_2 0MSEC},
{7,
TIMEOUT,
0,
STOPJTIMER},
{7,
BUTTONJON,
6,
STOPJTIMER},
{8,
TIMEOUT,
4,
STOPJTIMER},
{8,
BUTTONJON,
9,
START_2 0MSEC},
{9,
BUTTONJOFF,
8,
STOPJTIMER},
{9,
TIMEOUT,
10,
STOPJTIMER},
{10,
BUTTONJOFF,
11,
START_2 0MSEC},
{11,
BUTTONJON,
10,
STOPJTIMER},
{И ,
TIMEOUT,
12,
START_10SEC},
СМ
гН
TIMEOUT,
13,
TURNOFF_LED_START_l0SEC},
{13,
TIMEOUT,
12,
TURNON_LED_START_l0SEC},
{12,
BUTTONJON,
5,
START_2 0MSEC},
{13,
BUTTONJON,
5,
START_2 0MSEC},
{14,
BUTTONJOFF,
7,
TURNOFF_LED_START_2 0MSEC},
{14,
TIMEOUT,
15,
START_2 0MSEC},
{15,
TIMEOUT,
15,
START_20MSEC_CHANGE_BRIGHT},
{15,
BUTTONJOFF,
3,
STARTJ2 0MSEC_CHANGE_SIGN}
Итак, что же записано в участке программы под номе-
ром <1>? Если не обращать внимание на ключевое слово
{урес!еТ, перед нами - обычное описание функции, только
за этим описанием расположены не фигурные скобки с
телом функции, а символ
Это, в терминах языка С -
объявление
функции (declaration). Оно нужно компилятору
для того, чтобы знать, как называется функция, какой ре-
зультат она возвращает, и какие параметры ей требуются
для работы. Этой информации компилятору достаточно для
того, чтобы построить правильный код для вызова функции.
40
У Радиолюбитель - 1
2 /2 0 0 8
предыдущая страница 40 Радиолюбитель 2008-12 читать онлайн следующая страница 42 Радиолюбитель 2008-12 читать онлайн Домой Выключить/включить текст