Web–сервер на ATmega1280 + Wiznet W5100 с размещением данных в памяти программ

Создание систем управления по TCP/IP сети как построение на микроконтроллерах устойчиво работающего web–сервера. Алгоритм создания сервера на Wiznet W5100, его программная реализация. Регистры управления. Расчет физического адреса буфера RX памяти.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 02.07.2018
Размер файла 1023,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Web-сервер на ATmega1280 + Wiznet W5100 с размещением данных в памяти программ

Создание систем управления по TCP/IP сети требует построения на микроконтроллерах устойчиво работающего web-сервера. Распространенным способом является использование микроконтроллеров фирмы AVR и Ethernet контроллеров фирмы Wiznet - W5100 и фирмы Microchip - ENC28J60. В микросхеме Wiznet W5100 стек протоколов TCP/IP и Ethernet является встроенным, а у ENC28J60 встроенным является лишь протокол Ethernet.

В работе используется сервер на базе чипа Wiznet W5100 т.к. протокол TCP/IP встроен в него на аппаратном уровне, а это значительно упрощает программу сервера и уменьшает требуемый размер оперативной памяти микроконтроллера. В этом случае нет необходимости писать программу для реализации протокола TCP/IP на микроконтроллере. Необходимо лишь реализовать протокол HTTP. Другой причиной выбора Wiznet W5100 является его распространенность на коммерческом рынке в виде различных автономных модулей, что говорит об устойчивости его работы во встраиваемых сетевых устройствах управления.

Предлагаемый здесь web-сервер должен обладать следующими особенностями по сравнению с представленным HTTP - сервером в статье [1]:

1.Аппаратная часть реализована на AVR микроконтроллере ATmega1280 и микросхеме Wiznet W5100. Указанные схемы установлены в модулях Arduino Mega и Ethernet Shield W5100[2].

2.К серверу подключен температурный датчик DS18B20.

3.Сервер может пересылать клиенту кроме текста также и изображения. Эти данные хранятся в flash памяти микроконтроллера в виде массивов байт.

4.Размер данных, размещенных в Flash памяти, может превышать 64Кбайт. Программная среда Ардуино этого не делает для микроконтроллеров AVR[2].

5.Сервер должен работать устойчиво, не «зависать», что характерно для программной среды Ардуино и программы в статье [1]. Это очень важно при создании надежных систем удаленного управления.

6. К серверу должен быть подключен мобильный телефон, который дозванивается при срабатывании концевого выключателя. Дозвон может быть инициирован удаленно от сервера, если в браузере набрать заданный адрес. Если абонент примет вызов, то он сможет прослушивать удаленно район расположения сервера.

Основные сведения о TCP/IP контроллере Wiznet W5100

В Wiznet W5100 реализован полнофункциональный стандарт IEEE 802.3 (физический и канальный уровень протокола Ethernet), стек TCP/IP протоколов. Поэтому программирование Wiznet W5100 состоит в чтении и записи данных, которые находятся во внутренних регистрах, значения которых изменяются при работе стека TCP/IP. Работа с регистрами выполняется либо параллельно с использованием шин адреса и данных или последовательно с помощью шины SPI. В работе управление чипом W5100 выполняется через шину SPI. На рисунке 1 показана связь между ATmega1280 и Ethernet Shield W5100 по шине SPI.

web сервер микроконтроллер программный

Рис.1. Связь ATmega1280 и W5100 по SPI

Здесь Wiznet W5100 выступает в качестве ведомого устройства SPI, а микроконтроллер ATmega1280 в качестве ведущего. Для реализации протокола SPI нужно как минимум четыре сигнала т.е. MOSI (выход ведущего/вход ведомого), MISO (вход ведущего/выход ведомого), SCK (сигнал синхронизации от ведущего) и CS (выбор ведомого). Микроконтроллер поддерживает все режимы SPI (т.е. 0,1,2 и 3), Wiznet W5100 чип поддерживает - только режим 0 и режим 3. В работе используется режим 0 шины SPI. Не используется режим прерывания для W5100, поэтому вывод прерывания не задействован (как и для программно - аппаратной среды Ардуино).

Рассмотрим построения сервера на Wiznet W5100.

1. Инициализация Wiznet W5100 по шине SPI.

Для инициализации необходимо выполнить соответствующие записи в регистры режима работы MR, маски сети SUBR, MAC - адреса SAR, IP - адреса SIPR, регистра памяти приема - RMSR и регистра памяти передачи данных - TMSR. На рисунке 2 показана карта памяти Wiznet W5100.

Рис.2. Карта памяти Wiznet W5100

Все регистры адреса контроллера W5100 являются 16-разрядными, а его собственные регистры - 8 разрядными. Поэтому, используя 8 - разрядный микроконтроллер ATmega1280 по шине SPI записываем или читаем сначала первый 8-и битный старший байт, а потом следующий 8-и битный младший байт регистра адреса W5100. Для записи данных в Wiznet W5100 необходимо по SPI вначале передать команду 0xF0, а при чтении данных - команду 0x0F. Для записи и чтения по шине SPI в программе используются функции SPI_Write() и SPI_Read().

Wiznet W5100 поддерживает до 4-х одновременных каналов или sockets, причем каждый из каналов имеет свой собственный адресный регистр, контролирующий операции. Все эти каналы поддерживают 8-ми килобайтный буфер для передачи и 8-ми килобайтный буфер для приема. При инициализации Wiznet W5100 необходимо на каждый канал распределить конкретную величину памяти путем записи необходимых значений в регистры RMSR и TMSR. Например, для того, чтобы распределить на каждый канал по 2 Кбайта памяти, выполняется код:

SPI_Write(RMSR,0x55);

SPI_Write(TMSR,0x55);

За инициализацию W5100 отвечает функция W5100_Init() программы на Си. В этой функции:

- Записывается 0x80 в W5100 в регистр режима MR по адресу 0x0000, что означает программный сброс W5100;

- Записываются по адресам с 0x0001 по 0x0004 в регистр GAR (регистр шлюза) четыре байта, представляющие собой адрес основного шлюза;

- Записываются по адресам с 0x0005 по 0x0008 четыре байта в регистр SUBR (регистр маски), представляющие собой маску сети;

- Записываются шесть байт MAC адреса сервера в SUBR по адресам с 0x0009 по 0x000E;

- По адресам с 0x00F по 0x0012 записывается 4-е байта IP - адреса сервера.

Необходимо отметить то, что уже после инициализации должна работать команда ping на установленный ip - адрес.

2.Программная реализация web - сервера

Web - сервер использует простой текст под названием язык гипертекстовой разметки (HTML) для взаимодействия с браузером (клиентским приложением) через протокол TCP/IP. Поскольку протокол TCP/IP реализован в Wiznet W5100, необходимо написать программу для микроконтроллера для реализации протокола HTTP. Сервер работает прослушиванием любого запроса от браузера клиента для любого HTTP запроса GET или POST через стандартный TCP/IP порт номер 80 (в рассматриваемой работе порт 8080). После посылки запроса от клиента согласно стандарту сервер, ответит ему HTTP заголовком

HTTP /1.0 200 OK

Content-Type: text/html

И пустой строкой

После этого сервер перешлет весь HTML текст клиенту, а затем автоматически прервет установленное соединение с клиентом (см. рисунок 3).

Рис.3. Схема взаимодействия клиента и сервера

Ниже в качестве примера представлены запрос браузера клиента и ответ на него сервера:

Client Request:

GET / HTTP/1.1

Host: 192.168.2.101

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.3) Gecko/20

100401 Firefox/3.6.3

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: en-us,en;q=0.5

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 115

HTTP Server Response:

HTTP/1.0 200 OK

Content-Type: text/html

(Здесь пустая строка!)

<html>

<body>

<h1>Сервер на ATmega1280</h1>

</body>

</html>

Получив ответ от сервера, клиент представит HTML текст и, если есть, то и изображения на экране браузера. Функции микроконтроллера состоят в том, чтобы правильно обрабатывать полученный запрос от клиента и отправлять необходимую в соответствии с запросом информацию клиенту. В связи с этим рассмотрим последовательность работы микроконтроллера ATmega1280 и Wiznet W5100.

Для настройки и управления Wiznet W5100 в режиме web - сервера необходимо записывать и считывать информацию в регистр управления сокетом, а также в буферную память, в которую выполняется получение RX и передача TX данных с сети. Для простоты в этом сервере реализован только один канал (сокет 0) из четырех поддерживаемых контроллером W5100. Это достаточно для реализации простого web - сервера, позволяющего не только выполнять управление удаленными устройствами по сети и считывать информацию с датчиков, но и отображать небольшие объемы информации на браузере. Регистры управления для сокета 0 Wiznet W5100 начинаются с адреса 0x400 и заканчиваются адресом 0x4FF. В таблице 1 представлен список управляющих регистров для сокета 0 при условии использования буферной памяти приема RX и передачи TX данных размером по 2Кбайт для этого сокета.

Таблица 1. Регистры управления

Рассмотрим последовательность работы web - сервера по программе, написанной на Си, полный текст которой можно посмотреть в Интернет - источнике[3].

Для работы сервера основой является использование командного регистра S0_CR, а также чтения и запись данных в буфер W5100. Диаграмма на рисунке 4 показывает, в какой последовательности происходит работа с регистрами и буферами памяти TX, RX.

Рис.4. Диаграмма работы с регистрами Wiznet W5100.

Из диаграммы видно, что после инициализации W5100 открывается TCP/IP порт 80 и выполняется прослушивание этого порта для любых клиентских запросов. Эти действия выполняются функцией socket():

// Выбор протокола

SPI_Write(S0_MR,eth_protocol);

// Запись номера порта, в программе 0x8080, сначала выделяем старший байт и

// смещаем его на 8 разрядов, записывая по адресу S0_PORT(0x0404)

SPI_Write(S0_PORT,((tcp_port & 0xFF00) >> 8 ));

// Далее выделяем младший байт и записываем его по адресу 0x0405

SPI_Write(S0_PORT + 1,(tcp_port & 0x00FF));

// Выполняем открытие сокета

SPI_Write(S0_CR,CR_OPEN);

// Ожидаем открытие сокета

while(SPI_Read(S0_CR)); SPI_Read(S0_SR) == SOCK_INIT;

После записи команды CR_OPEN (0x01) в регистр S0_CR сокета 0, W5100 автоматически очистит этот регистр. Поэтому с помощью цикла while(SPI_Read(S0_CR)) необходимо подождать его очистку. Регистр статуса S0_SR должен получить значение SOCK_INIT(0x13).

После открытия сокета необходимо выполнить прослушивание 80 порта. Для этого в регистр команд S0_CR необходимо отправить команду CR_LISTEN (0x02). Как и в предыдущем случае с помощью цикла while(SPI_Read(S0_CR)) необходимо подождать очистку регистра S0_CR, а регистр статуса S0_SR должен получить значение SOCK_LISTEN (0x14):

SPI_Write(S0_CR,CR_LISTEN);

while(SPI_Read(S0_CR)); if (SPI_Read(S0_SR) == SOCK_LISTEN)

Эти команды выполняются в функции listen(). После этих действий Wiznet W5100 готов принимать запросы от браузера клиента.

Согласно программе микроконтроллера, организован бесконечный цикл, в котором постоянно проверяются запросы со стороны клиента. Проверяется состояние регистра S0_SR. Если его значение соответствует SOCK_ESTABLISHED (0x17), то связь с клиентом установлена. Следующим действием является проверка размера считанных данных RX. Для этого выполняется чтение регистра S0_RX_RSX в функции recv_size():

uint16_t recv_size(void)

{return ((SPI_Read(S0_RX_RSR) & 0x00FF) << 8 )+SPI_Read(S0_RX_RSR + 1);}

Если полученные данные в буферной памяти RX существуют (recv_size()>0) то выполняется чтение содержимого буфера RX памяти, которая реализуется в функции recv(). Однако замечено, что при установлении соединения данные в буферной памяти могут отсутствовать и это приводит к «зависанию» сервера. В связи с этим в программе вводится цикл ожидания, и если после его выполнения значение recv_size() продолжает оставаться равным нулю, после небольшой задержки (0.5 - 1.0 секунды) инициируется принудительный разрыв соединения.

Перед чтением полученных буфером данных вначале необходимо рассчитать адрес памяти буфера, с которого необходимо выполнить чтение данных. Далее, полученные от клиента данные читаются с этого места. Предполагается, что буфер чтения для сокета 0 имеет размер 2048Байт (0x800). На рисунке 5 поясняется, как рассчитывается физический адрес.

Рис.5. Расчет физического адреса буфера RX памяти.

Для определения физического адреса в буфере приема RX необходимо считать значение регистра S0_RX_RD и с помощью битовой операции & наложить на него значение 0x7FF (размер для чтения буфера приема - 2048Байт нулевого сокета). К полученному значению добавить 0x6000 - начальный адрес буфера приема. В функции recv() это делается следующим образом:

// Чтение данных с регистра S0_RX_RD старшего и младшего байтов

ptr = SPI_Read(S0_RX_RD);

offaddr = (((ptr & 0x00FF) << 8 ) + SPI_Read(S0_RX_RD + 1));

// Чтение в цикле полученных данных из буфера RX с размещением

// их в массиве *buf

while(buflen) {

buflen--;

// Расчет физического адреса

realaddr=RXBUFADDR + (offaddr & RX_BUF_MASK);

*buf = SPI_Read(realaddr);

offaddr++;

buf++;

}

*buf='\0'; // Формирование конца строки

Окончательно в регистр команд S0_CR пересылается команда CR_RECV (0x40) для того, чтобы Wiznet W5100 завершил процесс приема:

// Пересылка команды CR_RECV

SPI_Write(S0_CR,CR_RECV);

_delay_us(5); // Ожидание конца приема

После изучения запроса клиента, HTTP - сервер пошлет ответ. Ответ рассматриваемого тут сервера состоит из HTML - текстовых страниц, изображений и показаний температурного датчика DS18B20. HTML - текст и изображения представлены в виде массивов, которые размещены в flash памяти микроконтроллера. Часть текстовых данных размещена в SRAM - памяти микроконтроллера и копируется в текстовый буфер, как показано ниже:

// Создание HTTP ответа

strcpy((char *)buf,("HTTP/1.0 200 OK\nContent-Type: text/html; charset=windows-

1251\n\n"));

strcat((char *)buf,("<!DOCTYPE HTML>\n<html><title>Web-server

ATmega1280+W5100</title><body>\n"));

strcat((char *)buf,("<h1>Сервер на ATmega1280+W5100</h1>\r\n"));

strcat((char *)buf,("<A href='t.htm'>Температура в помещении </a>"));

После копирования HTML ответа в буфер (buf), необходимо его содержимое передать клиенту. Это выполняется с помощью функции send(). До передачи данных необходимо проверить размер буфера передачи Wiznet W5100 посредством чтения регистра S0_TX_FSR. Его значение должно быть равно 2Кбайт (0x07FF):

// Определение размера буферного регистра передачи

txsize=SPI_Read(SO_TX_FSR);

txsize=(((txsize & 0x00FF) << 8 ) + SPI_Read(SO_TX_FSR + 1));

// Если размер его меньше, чем количество поступивших данных(buflen)

// то необходимо обождать хотя бы 1000мс, пока он не освободиться

timeout=0;

while (txsize < buflen) {

_delay_ms(1);

txsize=SPI_Read(SO_TX_FSR);

txsize=(((txsize & 0x00FF) << 8 ) + SPI_Read(SO_TX_FSR + 1));

if (timeout++ > 1000) {

// Если буфер не освободиться, то принудительно прервать соединение

disconnect(sock);

} }

Как в случае приема данных, необходимо рассчитать физический адрес в буфере TX, начиная с которого будут записываться туда передаваемые данные (см. рисунок 6):

Рис.6. Расчет физического адреса буфера TX

Для определения физического адреса в буфере передачи TX необходимо считать значение регистра S0_TX_TD и битовой операцией & наложить на него 0x7FF (размер буфера передачи - 2048 Байт нулевого сокета). К полученному значению добавить 0x4000 - начальный адрес буфера передачи. В функции send() это делается так:

// Чтение данных с регистра S0_TX_TD старшего и младшего байтов

ptr = SPI_Read(S0_TX_WR);

offaddr = (((ptr & 0x00FF) << 8 ) + SPI_Read(S0_TX_WR + 1));

// Запись в цикле переданных данных в буфер TX из массива *buf

while(buflen) {

buflen--;

// Расчет физического адреса

realaddr = TXBUFADDR + (offaddr & TX_BUF_MASK);

// Копирование данных в TX буфер W5100

SPI_Write(realaddr,*buf); offaddr++; buf++;}

После получения всех данных буфером TX памяти необходимо последний указатель записать обратно в регистр S0_TX_WR, чтобы с этого места помещать следующую порцию данных:

SPI_Write(S0_TX_WR,(offaddr & 0xFF00) >> 8 );

SPI_Write(S0_TX_WR + 1,(offaddr & 0x00FF));

Далее необходимо записать в регистр S0_CR команду CR_SEND (0x20), которая отправит данные в сеть из буфера.

SPI_Write(S0_CR,CR_SEND);

В соответствии с требованием протокола HTTP, после отправки HTML ответа клиенту, необходимо отключить и закрыть соединение с клиентом. Это выполняется с помощью функций disconnect() и close() соответственно:

// Посылка команды Disconnect

SPI_Write(S0_CR,CR_DISCON);

// Посылка команды Close

SPI_Write(S0_CR,CR_CLOSE);

В программе main() выполняется бесконечный цикл открытия и прослушивания нового запроса, который идет от клиента к серверу.

Ранее отмечалось, что рассмотренная программа, за основу которой взят код из источника [1] обладает недостатком - при подключении к серверу через Интернет сервер через короткий промежуток времени «виснет». Для выявления проблемы в разных участках программы выполнялась распечатка проходящих данных. Было обнаружено, что некоторые браузеры при работе с сервером через Интернет выполняют установление соединения при посылке нулевых запросов. Это приводит к зацикливанию сервера. На рисунке 7 показана распечатка нулевых длин запросов со стороны клиента в части программы, которая соответствует установленному соединению.

Рис.7. Распечатка нулевой длины запроса от браузера.

Для выхода из зацикливания в программе main() был установлен счетчик clo(см. текст программы). Если значение clo при нулевой длине сообщения, вычисленной функцией recv_size() устанавливалось более 5, то вызывалась функция disconnect() для разрыва соединения через экспериментально подобранную задержку.

3.Использование Flash памяти микроконтроллера для размещения текста и изображений.

Рассмотрим возможность размещения html - страниц во всей flash памяти микроконтроллера ATmega1280, используя контроллер Arduino mega и среду разработки AVR Studio 4 с компилятором WinAVR. Особенностью ATmega1280, ATmega2560 является то, что они 8-ми разрядные, поэтому при их программировании возникают сложности адресации к памяти за пределами 64Кбайт. Тем более не все компиляторы поддерживают обращение к памяти за область 64Кбайт. Для микроконтроллеров ATmega32, ATmega644 и др. аналогичных таких проблем не существует, т.к. их flash память не выходит за пределы 64Кбайт.

Размещение данных в flash памяти выполняется с помощью библиотеки AVR libc. Для подключения библиотеки необходимо в начале программы ее описать с помощью #include <avr/pgmspace.h>. HTML документ (текст и изображения) в программе должны быть представлены в виде массива байт, которые можно получить, например помощью программы makefsdata.exe[4]. Для размещения массива байт в flash из файла pgmspace.h можно воспользоваться следующими описаниями:

#define pgm_read_byte(address_short) pgm_read_byte_near(address_short)

#define pgm_read_byte_near(address_short) __LPM((uint16_t)(address_short))

- читает байт с flash памяти коротким адресом в проеделах 64КБайт

#define pgm_read_byte_far(address_long) __ELPM((uint32_t)(address_long))

- читает байт с flash памяти “дальним” адресом за пределами 64КБайт

#define __LPM(addr) __LPM_classic__(addr)

#define __ELPM(addr) __ELPM_classic__(addr)

Здесь __LPM_classic__(addr) - макрос, который предназначен для чтения байта с памяти программ, используя 16-и битный адрес (т.е. в пределах 64КБайт). Он выглядит следующим образом:

#define __LPM_classic__(addr)

(__extension__({ \

uint16_t __addr16 = (uint16_t)(addr); \

uint8_t __result; \

__asm__ \

( \

"lpm" "\n\t" \

"mov %0, r0" "\n\t" \

: "=r" (__result) \

: "z" (__addr16) \

: "r0" \

); \

__result; \

}))

__ELPM_classic__(addr) - макрос, который предназначен для чтения байта с памяти программ, используя 32-х битный адрес (т.е. за пределами 64КБайт). Он записан следующим образом:

#define __ELPM_classic__(addr)

(__extension__({ \

uint32_t __addr32 = (uint32_t)(addr); \

uint8_t __result; \

__asm__ \

( \

"out %2, %C1" "\n\t" \

"mov r31, %B1" "\n\t" \

"mov r30, %A1" "\n\t" \

"elpm" "\n\t" \

"mov %0, r0" "\n\t" \

: "=r" (__result) \

: "r" (__addr32), \

"I" (_SFR_IO_ADDR(RAMPZ)) \

: "r0", "r30", "r31" \

); \

__result; \

}))

В файле pgmspace.h, который включен в компилятор WinAVR модификации 2010-01-20, нет макроса для вычисления 32-х битного “дальнего” адреса (за пределами 64КБайт). Это может выполнить следующий макрос[5], который должен быть вставлен в программу сервера:

#define FAR(var) \

({ uint_farptr_t tmp; \

__asm__ ( \

"ldi %A0, lo8(%1)" "\n\t" \

"ldi %B0, hi8(%1)" "\n\t" \

"ldi %C0, hh8(%1)" \

: "=d" (tmp) \

: "i" (&(var))); \

tmp; \

})

При компиляции необходимо указать компоновщику, в каких сегментах необходимо разместить массивы данных. Для этого описываются сегменты в части flash памяти, где расположен код программы и следующий 64-х килобайтный блок:

byte tex[] __attribute__((section(".my_section"))) =

{0x3c,0x68,0x74,0x6d,0x6c,0x20,0x78,0x6d,0x6c,0x6e,0x73,0x3a,0x6f,…};

byte pic[] __attribute__((section(".far_section"))) =

{0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,…};

Впоследствии при компоновке необходимо воспользоваться опциями:

-Wl,--section-start=.my_section=0x2600 -Wl,--section-start=.far_section=0x10000

Секция .my_section будет располагать массив tex[] с начального адреса 0x2600, который должен следовать за кодом программы. Секция .far_section будет располагать массив pic[] с начального адреса 0x10000 в следующем блоке размером 64Кбайт. Опции устанавливаются, если в среде Atmel AVR Studio 4 перейти по ссылкам:

Project -> Configuration Options -> Custom Options -> [Linker Options]

Для прошивки микроконтроллера на плате Arduino mega используется программатор avrdude со своим конфигурационным файлом, которые заимствованы с программной среды Arduino:

avrdude -C avrdude.conf -patmega1280 -carduino -PCOM5 -b57400 -D -V -Uflash:w:w5100_mega.hex:i

В микроконтроллере atmega1280 должен быть bootloader (стандартный загрузчик для Arduino).

Как уже отмечалось, полный текст программы представлен в источнике[3].

Замеченные недостатки:

1.Из-за простоты сервера не желательно на одной html страничке размещать более одного изображения. На остальные изображения можно делать ссылки. Это связано с тем, что сервер может обслуживать только последовательные запросы со стороны браузера. Если выполняются параллельные запросы (быстрые браузеры), то все изображения на страничке просто не загружаются. Хорошо работают с этим сервером при наличии картинок браузеры Opera, Firefox. Плохо - Chrome, Яндех - браузер, Internet Explorer. Если любой браузер подключен через прокси - сервер (Squid), изображения на страничке загружаются.

2.При неудовлетворительном качестве Интернет-соединения при загрузке объемных страничек сервер часто сбрасывается. Поэтому html - странички должны быть небольшие.

Основным достоинством сервера является стабильность его работы (не виснет), относительная простота программы на Си. Код программы без данных занимает примерно 2.5-3.0 Кбайт.

Литература

1. R.W. Besinga. Integrating Wiznet W5100, WIZ811MJ network module with Atmel AVR Microcontroller. [Electronic resource]. - Mode of access: http://www.ermicro.com/blog/?p=1773, 2010.

2. Arduino. Официальный сайт. [Electronic resource]. - Mode of access: http://arduino.cc , 2014.

3. Мясищев А.А. Сервер на ATmega1280 + Wiznet W5100. Практика для студентов. [Electronic resource]. - Mode of access: http://webstm32.sytes.net/mega_t.html, 2014.

4. Мясищев А.А. Web - сервер на платах STM32F4Discovery и STM32F4DIS-BB для удаленного управления по TCP/IP сети. [Electronic resource]. - Mode of access: http://alex56ma.zapto.org/stm32_web/stm32_3.html, 2014.

5. AVR-GCC-Tutorial. [Electronic resource]. - Mode of access: http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Programmspeicher_.28Flash.29. 2010.

Размещено на Allbest.ru

...

Подобные документы

  • Представление данных в памяти компьютера. Обобщенные структуры и модели данных. Методы доступа к информации. Физическая организация системы управления базами данных, структура сервера. Архитектура "клиент-сервер". Создание базы данных с помощью "Денвер".

    курсовая работа [770,3 K], добавлен 17.11.2014

  • Определение, свойства и характеристики распределенных систем баз данных. Основная задача систем управления ими. Архитектура распределения СУБД. Сравнение технологий файлового сервера и "клиент-сервера". Стратегия распределения данных по узлам сети ЭВМ.

    курсовая работа [601,3 K], добавлен 24.05.2015

  • Спецификация организации службы Short Message Service. Алгоритм работы сервера и возможность расширения функциональных возможностей. Реализация проекта на языке высокого уровня С++ на платформе Linux. Расчет себестоимости и цены программного продукта.

    дипломная работа [168,6 K], добавлен 19.01.2014

  • Модификация системы управления пользователями прокси-сервера SQUID. Выбор средств разработки программного обеспечения. Структура базы данных MySQL. Построение web-интерфейса. Авторизация в системе управления пользователями, страница администрирования.

    курсовая работа [456,2 K], добавлен 23.07.2011

  • Подготовка прокси-сервера. Структура базы данных MySQL. Формат файла статистики "access.log". Контроль заблокированных пользователей. Построение web-интерфейса, структура. Авторизация в системе управления пользователями. Анализ полученных результатов.

    курсовая работа [815,4 K], добавлен 23.06.2011

  • Организация корпоративного файлового сервера, выполняющего функции прокси-сервера на базе ОС Linux. Процесс его реализации. Выбор оптимальной аппаратно-программной платформы. Расчёт сметы затрат на выполнение объёма работ по созданию FTP-сервера.

    дипломная работа [2,0 M], добавлен 06.07.2012

  • Объем двухпортовой памяти, расположенной на кристалле, для хранения программ и данных в процессорах ADSP-2106x. Метод двойного доступа к памяти. Кэш-команды и конфликты при обращении к данным по шине памяти. Пространство памяти многопроцессорной системы.

    реферат [28,1 K], добавлен 13.11.2009

  • Создание баз данных и таблиц. Ограничение доступа для пользователей. Хранимая процедура, доступная всем пользователям. Скрипты для проверки ограничений. Методы обеспечения безопасности сервера базы данных. Чтение, изменение и добавление данных.

    лабораторная работа [1,4 M], добавлен 23.07.2012

  • Технологии, используемые на стороне сервера: язык python, фреймворк Django, ORM, MVC, JSON, MySQL, веб-сервер Nginx, операционная система Linux. Разработка online хранилища данных. Программная реализация предметной области. Шаблоны вывода данных.

    дипломная работа [123,3 K], добавлен 25.04.2015

  • Установка сервера DNS. Его регулирование с помощью соответствующей оснастки Microsoft Management. Особенности начальной настройки DNS-сервера. Конфигурирование конкретной зоны, внесенной для управления ресурсными записями. Использование утилиты nslookup.

    презентация [241,8 K], добавлен 10.11.2013

  • Реализация телекоммуникационных услуг на предприятии для внутренних потребностей (интранет) и информационного взаимодействия с внешней средой (экстранет). Создание корпоративной сети передачи данных. Деление на подсети, оборудование, архитектура сервера.

    курсовая работа [850,4 K], добавлен 25.05.2015

  • История и основные сведения о сервере. Классификация и ресурсы серверов. Важность системы охлаждения для сервера. Выбор компонентов для сборки сервера. Основные неисправности и способы их устранения. Проведение технического обслуживания и ремонта сервера.

    дипломная работа [2,1 M], добавлен 24.06.2015

  • Установка, разработка конфигурации и дальнейшее администрирование FTP-сервера на системе типа UNIX. Настройка операционной системы и удаленного управления. Основные команды; соединение и передача данных. Аутентификация, способы доступа к FTP-серверу.

    курсовая работа [1,3 M], добавлен 02.04.2015

  • Рассмотрение архитектуры "файл-сервер" и двух- и трехуровневых архитектур "клиент-сервер". Модель сервера приложений и свойства "идеальной" системы управления распределенными базами данных. Способы распределения функций обработки логики запроса.

    презентация [60,2 K], добавлен 19.08.2013

  • Сравнение различных способов обхода данных. Заполнение массива для случайного обхода. Изучение понятия кэш-памяти, ее основных размеров и функций. Оптимальный и неоптимальный алгоритм умножения двух матриц с точки зрения порядка обхода данных в памяти.

    презентация [94,7 K], добавлен 02.06.2013

  • Улучшение параметров модулей памяти. Функционирование и взаимодействие операционной системы с оперативной памятью. Анализ основных типов, параметров оперативной памяти. Программная часть с обработкой выполнения команд и размещением в оперативной памяти.

    курсовая работа [99,5 K], добавлен 02.12.2009

  • Создание виртуальной машины для гостевой операционной системы Microsoft Windows Server 2003. Первоначальная настройка установленной операционной системы. Создание DHCP-сервера с диапазоном рабочих адресов. Настройка доменного имени для IP-адреса сервера.

    лабораторная работа [3,2 M], добавлен 20.12.2012

  • NIC (Network Interface Card) или сетевые адаптеры. Создание локальной сети и профиля. Выбор оборудования и операционной системы. Обжим проводов. Установка Windows 2003 Server, Traffic Inspector, DNS-сервера, DHCP-сервера. Применение маршрутизаторов.

    курсовая работа [8,8 M], добавлен 17.03.2014

  • Электронная почта – средство обмена информацией; администрирование почтового сервера. Протоколы принудительной доставки почты. Создание и настройка виртуального сервера, параметры его конфигурации. Управление входящими сообщениями и почтовыми ящиками.

    презентация [296,8 K], добавлен 10.11.2013

  • Характеристика категорий современных баз данных. Исследование особенностей централизованных и распределенных баз данных. Классификация систем управления базами данных по видам программ и применению. Управление буферами оперативной памяти и транзакциями.

    курсовая работа [45,2 K], добавлен 10.03.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.