В разрабатываемой программе необходимо периодически обновлять 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() – функция чтения строки изображения отпечатка пальца.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.