Проблемы при программировании AVR на Си

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 15:18

alexsis_76 писал(а):
А можно и мне архив с исходником, а то у меня теже проблемы
с чем
Как я понял, вы ссылались на какой-то архив(не исходники MegaD), где можно посмотреть работу веб клиента..

alexsis_76

Re: Проблемы при программировании AVR на Си

Сообщение alexsis_76 » 06 апр 2015, 16:03

в этой теме речь шла об устройстве netalarm , стек там точно такой же как и в megad, в варианте с картой совсем другое, а что именно не идет?

ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 16:23

alexsis_76 писал(а):в этой теме речь шла об устройстве netalarm , стек там точно такой же как и в megad, в варианте с картой совсем другое, а что именно не идет?
Есть задача: нужно кардинально переделять megad. Я взял за основу тот проект, что и Андрей брал. Все было нормально, пока не стала необходимость отправлять данные на сервер. Как я понял, изначально в исходном проекте не было поддержки веб клиента. Начал вытягивать функции с рабочего проекта Андрея, тоже заштопорился на функции client_browse_url - компилятор выдает ошибку, что функция не объявлена, но делал и по вашим рекомендациях, но так и понял почему не идет! Закинул эту идею, думаю возьму за основу проект Андрея - взял, сейчас хочу просто отправить что-то на сервер, все лишнее в главном цикле затер, осталось только вот что:

Код: Выделить всё

while(1)
	{
		plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
		buf[BUFFER_SIZE]='\0';
		//--- dat_p=packetloop_icmp_tcp(buf,plen);
		dat_p=packetloop_arp_icmp_tcp(buf,plen);
		
		
		
		 
		if ((PINC & (1<<5)) != 0)
		{
			 uint8_t _eth_addr[4];
			 _sip_addr[0]=192;
			 _sip_addr[1]=168;
			 _sip_addr[2]=1;
			 _sip_addr[3]=2;
			 
			  
			 get_mac_with_arp(_sip_addr,TRANS_NUM_WEBMAC,&arpresolver_result_callback2);

			 arp_timeout = 5000;
			 while(get_mac_with_arp_wait() && arp_timeout > 0 )
			 {
				 // to process the ARP reply we must call the packetloop
				 plen=enc28j60PacketReceive(BUFFER_SIZE, buf);
				 packetloop_arp_icmp_tcp(buf,plen);
				 arp_timeout--;
			 }
			 
			 
			 
			
			 
		 uint8_t www_gwmac2[6] = {0x54,0x55,0xc0,0xa8,0x00,0x0e};
			uint16_t _na_port = 80;
			
		client_browse_url(PSTR("/"),"rom.php","192.168.1.2",&browserresult_callback_empty, _eth_addr, www_gwmac2, _na_port);
		
		// PORTC|= (1<<4);			
			
		}//else PORTC&= ~(1<<4);
		
		
			
		SENDTCP:

                LEDON;
                www_server_reply(buf,plen); // send data
		LEDOFF;

		if ( reset_flag == 1 )
		RESET();

		if ( reset_flag == 2 )
		Bootloader();

		continue;

		UDP:
		continue;
	}
Но, не судьба, опять что-то я накосячил.. Компилиться, но ничего не отправляется... :(

alexsis_76

Re: Проблемы при программировании AVR на Си

Сообщение alexsis_76 » 06 апр 2015, 17:31

ну да в исходном вроде бы нет
оригинальная client_browser_url отличается от той что у вас сейчас гляну
Последний раз редактировалось alexsis_76 06 апр 2015, 17:39, всего редактировалось 1 раз.

ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 17:37

alexsis_76 писал(а):ну да в исходном вроде бы нет
Чего именно нет?
Как я думал, что этот кусок кода должет отправлять (вызывать страницу) на сервере.

alexsis_76

Re: Проблемы при программировании AVR на Си

Сообщение alexsis_76 » 06 апр 2015, 17:40

для атмега 8 для клиента не хватает памяти,потому и нет
сейчас посмотрим кто и куда должен отправлять
во первых вы должны определить browserresult_callback_empty
вот она void browserresult_callback_empty(uint ... g2 = -1; }
во вторых определить

Код: Выделить всё

client_ifconfig(myip,netmask);
определить

Код: Выделить всё

_na_port
в данном случае 80
и
www_gwmac2
куда будете слать
Последний раз редактировалось alexsis_76 06 апр 2015, 17:53, всего редактировалось 4 раза.

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Проблемы при программировании AVR на Си

Сообщение Urbas81 » 06 апр 2015, 17:42

Я год назад парился с той же проблемой :D , мне тогда alexsis_76 прислал свой исходник, отправлять то у меня просто строки получилось, но вот то что хотел так и не реализовал, забросил. И как раз сегодня решил опять вернуться к этому вопросу, и наконец получилось то что хотел. Вся запара в том что библиотеки немного отличаются та что используется в Megad и которая Tuxsgraphics изначально. Надо лезть в файл ip_arp_udp_tcp.c и там смотреть типы переменных и все отличия. Как раз сегодня я этим и занимался. Ну и надо объявить в файле ip_config.h define WWW_client

ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 17:49

Urbas81 писал(а):Я год назад парился с той же проблемой :D , мне тогда alexsis_76 прислал свой исходник, отправлять то у меня просто строки получилось, но вот то что хотел так и не реализовал, забросил. И как раз сегодня решил опять вернуться к этому вопросу, и наконец получилось то что хотел. Вся запара в том что библиотеки немного отличаются та что используется в Megad и которая Tuxsgraphics изначально. Надо лезть в файл ip_arp_udp_tcp.c и там смотреть типы переменных и все отличия. Как раз сегодня я этим и занимался. Ну и надо объявить в файле ip_config.h define WWW_client
С горя, я уже взял последний исходник Андрея.

ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 17:51

alexsis_76 писал(а):для атмега 8 для клиента не хватает памяти,потому и нет
сейчас посмотрим кто и куда должен отправлять
во первых вы должны определить browserresult_callback_empty
вот она void browserresult_callback_empty(uint ... g2 = -1; }
во вторых определить

Код: Выделить всё

client_ifconfig(myip,netmask);
определить

Код: Выделить всё

_na_port
в данном случае 80
У меня мега 328p. Все функции и начало функции маин до главного цикла - не изменены!

Urbas81
Сообщения: 313
Зарегистрирован: 28 авг 2012, 14:22

Re: Проблемы при программировании AVR на Си

Сообщение Urbas81 » 06 апр 2015, 17:51

Да и еще, при отладке использовал Wiresharck, без него б тяжко было.

alexsis_76

Re: Проблемы при программировании AVR на Си

Сообщение alexsis_76 » 06 апр 2015, 17:58

ну тогда посмотрите варезшарком что отправляет
если ошибок нет client_browse_url должна отработать может шлет не то и не туда , естественно сервер не видит
вот взгляните когда то упражнялся там тоже есть client_browse_url правда в обертке
eth_clock-1.0.rar
(54.14 КБ) 337 скачиваний
правда оно под мега32

ROM
Сообщения: 63
Зарегистрирован: 15 май 2013, 12:44

Re: Проблемы при программировании AVR на Си

Сообщение ROM » 06 апр 2015, 18:34

alexsis_76 писал(а):ну тогда посмотрите варезшарком что отправляет
если ошибок нет client_browse_url должна отработать может шлет не то и не туда , естественно сервер не видит
вот взгляните когда то упражнялся там тоже есть client_browse_url правда в обертке
eth_clock-1.0.rar
правда оно под мега32
Спасибо оргомное! Все с коментариями! Оч. интересно!
Вот нашел туже функцию
client_browse_url(PSTR("/www/test.php?"),display_string,PSTR("alex_test"),&browserresult_callback);// передаем

Подскажите пожалуйста, за что отвечають параметры в моей функции:
client_browse_url(PSTR("/rom.php"),"","192.168.1.2",&browserresult_callback_empty, _eth_addr, www_gwmac2, _na_port);
1)имя страницы на сервере
2) параметры вызываемой страницы
3)адрес самого сервера
4)Функция, куда возвращается ответ от сервера
5)???
6)как я понял, прокси-сервер, если нет что туде пишем?
7) порт, у меня 80!

alexsis_76

Re: Проблемы при программировании AVR на Си

Сообщение alexsis_76 » 06 апр 2015, 19:03

изначатьно она имела такой вид
// call this function externally like this:
//
// Declare a callback function: void browserresult(uint8_t statuscode,uint16_t datapos,uint16_t len){...your code}
// client_browser_url(PSTR("/cgi-bin/checkip"),NULL,PSTR("tuxgraphics.org"),&browserresult);
// urlbuf_varpart is a pointer to a string buffer that contains the second
// non constant part of the url. You must keep this buffer allocated until the
// callback function is executed or until you can be sure that the server side
// has timed out.
// hoststr is the name of the host. This is needed because many sites host several
// sites on the same physical machine with only one IP address. The web server needs
// to know to which site you want to go.
// statuscode is zero if the answer from the web server is 200 OK (e.g HTTP/1.1 200 OK)
// statuscode==1 means there is a valid tcp data but not a "200 OK"
// answer. Any other statuscode than 0 and 1 is a total communication failure.

//
void client_browse_url(prog_char *urlbuf, char *urlbuf_varpart, prog_char *hoststr,void (*callback)(uint8_t,uint16_t,uint16_t))
{
client_urlbuf=urlbuf;
client_urlbuf_var=urlbuf_varpart;
client_hoststr=hoststr;
browsertype=0;
client_browser_callback=callback;
www_fd=client_tcp_req(&www_client_internal_result_callback,&www_client_internal_datafill_callback,80);
}
1 указатель на скрипт обработчика
2 строка параметров которые вы хотите передать скрипту
3 имя хоста
4 функция обратного вызова(определяется пользователем)позволяет выполнить какие нибудь действия может быть пустой ,но присутствовать должна
к оригиналу андрей добавил еще несколько параметров
_eth_addr ip адрес
www_gwmac2 мас целевого хоста(видимо в данном случае шлюза , послали а он пускай сам разбирается)
порт назначения
щас гляну как client_browse_url работает
изначально работала следующим образом сначала делалось
client_arp_whohas(buf,gwip);
арп запрос на ап шлюза
затем сохраняли результат резольвинга ап адреса(мак шлюза)
затем посылали на адрес шлюза а он пересылал куда нужно
_eth_addr ip адрес вот это не могу понять как используется возможно нужно для работы с подсетями

Ответить