Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

TCPIP програма връща допълнителна информация?!
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=11194
Страница 1 от 1

Автор:  stoyanoff [ Пет Мар 15, 2013 2:16 pm ]
Заглавие:  TCPIP програма връща допълнителна информация?!

Здравейте! Имам контролер (18F66J60), на който съм заредил пример ex13b.c от TCPIP стака. Ето функцията, която изпраща информация:
Код:
int8 TCPConnectedTask(TCP_SOCKET socket, int8 which) {
   char c;
   static int8 counter[NUM_LISTEN_SOCKETS];
   static int8 button1_held[NUM_LISTEN_SOCKETS];
   char str[20];
   int8 i=0;

   if (TCPIsGetReady(socket)) {
      while (TCPGet(socket, &c)) {
         lcd_str[which][i++]=c;
         if (i>=20) {i=19;}
         lcd_str[which][i]=0;
      }
   }

//when button 1 is pressed: send message over TCP
//when button 2 is pressed: disconnect socket
   if (BUTTON1_PRESSED() && !button1_held[which] && TCPIsPutReady(socket)) {
      button1_held[which]=TRUE;
      sprintf(str,"BUTTON C=%U",counter[which]++);
      TCPPutArray(socket,str,strlen(str));
      TCPFlush(socket);
   }
   if (!BUTTON1_PRESSED()) {
      button1_held[which]=FALSE;
   }
  #if defined(BUTTON2_PRESSED())
   if (BUTTON2_PRESSED()) {
      return(TRUE);
   }
  #endif
   return(FALSE);
}

Когато се свържа към контролера през Телнет, си ми връща BUTTON C=0 и след това 10тина реда символи(глупости).
Преправих програмата като зададох статичен текст, който да връща:
Код:
int8 TCPConnectedTask(TCP_SOCKET socket) {
   char c;
   static int8 counter;
   char str[13]="Hello server";
   static int8 button1_held;

   if (TCPIsGetReady(socket)) {
      while (TCPGet(socket, &c)) {
      }
   }

   if (TCPIsPutReady(socket)) {
      TCPPutArray(socket,str,strlen(str));
      TCPFlush(socket);
   }
   return(TRUE);
}

и отново имам Hello server и после пак 10тина реда глупости и disconnect.
Някаква идея от къде идват тези допълнителните работи? Никъде другаде в програмата не се изпращат данни!
Благодаря!

Автор:  MYXATA [ Пет Мар 15, 2013 2:38 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

нулирай си стринговете, или по-точно почвай да пишеш от позиция "0".
това е най-често срещаното "нещо ми праща допълнителни символи без да ги пращам" :)

Автор:  stoyanoff [ Пет Мар 15, 2013 3:09 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Не те разбрах! Стрингът ми не се променя в хода на програмата:
Код:
char str[13]="Hello server";

Пробвах различни комбинации, както и глобална константа:
Код:
char str[13]="Hello server/r/n";

и т. нат.
Погледни в прикачения файл какво получавам на компа...

Прикачени файлове:
for mcu.jpg
for mcu.jpg [ 92.62 KiB | Прегледано 1638 пъти ]

Автор:  @@@ [ Чет Мар 21, 2013 11:57 am ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Пробвай с TCPPutArray( socket,str, sizeof str ); вместо strlen. Иначе игнорираш последния нулев байт.

PS: Написаното "/r/n" надявам се е грешка в бързането, а не дълбоко убеждение.

Автор:  Реконструктор [ Чет Мар 21, 2013 4:13 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Като начало, махни strlen и забий директно 12 на негово място.

Автор:  michev [ Чет Мар 21, 2013 4:50 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Нямаш терминация на стирнг-а (последния възможен символ да е \0) затова поинтъра отива да цикли из остатъка от програмата ти и праща "глупости"
Код:
char str[]="Hello server\r\n\0";

Автор:  stoyanoff [ Чет Мар 21, 2013 7:06 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Благодаря за отговорите! Вече пробвах тези варианти, които казвате, но оказа се, че проблемът не е в мен. От разработчика на стака получих по-нова версия, в която са коригирали проблема!

Автор:  Реконструктор [ Чет Мар 21, 2013 7:07 pm ]
Заглавие:  Re: TCPIP програма връща допълнителна информация?!

Не е задължително да се слага терминатор, даже е вредно, щото компилатора си го слага сам.
Нормалните компилатори, де. :)

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/