Разработка биометрического комплекса на основе считывания отпечатка пальца, страница 10

В разрабатываемой программе необходимо периодически обновлять ARP-таблицу, это осуществляется с помощью подпрограммы arp_manage(), а также периодически проверять наличие принятых Ethernet-кадров – receive_packet().

На рисунке 7.4  приведена структура Ethernet-кадра с UDP-вложением.

Любой Ethernet – кадр имеет следующие поля:

- Преамбула – является извещением о передаче кадра, состоит из повторяющейся последовательности бит 10101010….. продолжительностью 8 байт;

- Адрес получателя – MAC-адрес сетевого адаптера пункта назначения, состоит из 6 байт;

- Адрес источника – MAC-адрес сетевого адаптера источника, в данном случае сетевого адаптера микроконтроллера MC9S12NE64. Также состоит из 6 байт;

- Тип протокола – поле состоит из двух байт, которые указывают на тип протокола, вложенного в Ethernet-кадр. В данном случае поле имеет значение 0x0800, это указывает на то, что вложенным является IP-пакет;

- Поле данных – поле имеет длину от 46 до 1500 байт. В нем содержится кадр протокола более высокого уровня, например IP, TCP.

- Контрольная последовательность кадра – поле имеет длину 4 байта.

Помимо сетевых библиотек необходимо подключить стандартные библиотеки, и библиотеки для работы с микроконтроллером.

- datatypes.h – библиотека типов;

- system.h – системная библиотека;

- stdio.h – библиотека ввода/вывода;

- ne64config.h – библиотека конфигураций микроконтроллера;

- MC9S12NE64.h – библиотека описания всех регистров микроконтроллера.

Рисунок 7.4 – Структура Ethernet II кадра

8 ОПИСАНИЕ АЛГОРИТМОВ РАЗРАБОТАННОЙ ПРОГРАММЫ УПРАВЛЕНИЯ КОМПЛЕКСОМ И РЕАЛИЗАЦИЯ ИХ НА ЯЗЫКЕ СИ++

8.1 Используемые функции

Для удобства написания программы были разработаны отдельные функции, каждая из которых выполняет определенную небольшую задачу. Программа, написанная с помощью определенных функций, удобна в наладке и достаточно понятна, а также считается программой написанной в «хорошем стиле» программирования.

На языке СИ принята следующая структура подпрограмм/функций (подпрограмма не возвращает значений, функция - возвращает):

 (Тип возвращаемого значения) Название (Список параметров)

{

Тело подпрограммы

return (значение) – если требуется

}

Если предполагается, что подпрограмма/функция не возвращает значения, то перед ее названием необходимо поставить слово void. Если же возвращает, то необходимо задать тип значения int (целое), float (с плавающей запятой), boolean (логическое) и т.д.

Для написания программы управления были разработаны следующие функции:

init_our_udp() – функция инициализации TCP/IP для работы с UDP протоколом. Выделяется необходимый socket и открывается порт передачи данных.

send_our_udp(int8* buf,int8 n) – функция отправки одного UDP – пакета.

Параметры:

         - int8* buf – массив из восьмиразрядных чисел, подлежащий передаче;

         - int8 n – длина массива подлежащего предаче.

init_SPI_master() – функция инициализации порта SPI микроконтроллера в режим ведущего, с заданием частоты тактирования.

SPI_disable() – отключение порта SPI. Отключение необходимо производить если предполагается длительный простой этого блока.

SPI_transmit_empty() – функция ожидания разрешения на передачу данных через порт SPI.

SPI_recieve_wait() – функция ожидания окончания приема через порт SPI.

recieve_packet() – функция приема и анализа пакета пришедшего из сети. Позволяется выявить тип пакета (ICMP, IP, UDP, ARP) и запустить соответствующий обработчик.

tx_data_SPI(int8 tx) - функция передачи восьмиразрядного числа в порт SPI.

Параметры:

int8 tx – восьмиразрядного число подлежащее  передаче.

uint8 rx_data_SPI() – функция приема данных через порта SPI. Возвращает восьмиразрядное целое число.

init_FPC1010() – функция инициализации датчика FPC1010, посылает все необходимые команды для приведения датчика в исходное состояние.

read_image_row() – функция чтения строки изображения отпечатка пальца.