<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html;
      charset=iso-8859-2">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">Tak jsem zjistil, ze klicove je pouzit<br>
      tcp_nagle_disable(pcb);<br>
      Nyni to zase zdrzuje PC nez odpovi ACK, jdu zkoumat dal...<br>
      <br>
      Dne 07.10.2017 v 11:31 Jaroslav Buchta napsal(a):<br>
    </div>
    <blockquote type="cite"
      cite="mid:573b179a-ec92-e34b-df7a-6c12ec60f3b2@hascomp.cz">Zdravim,
      <br>
      <br>
      mam problem s implementaci subj, pouziva HAL, vse nakonfigurovano
      pokusne v prazdnem projektu.
      <br>
      <br>
      Aplikace pouze odesila data po pripojeni klienta, prenosova
      rychlost je zoufala, asi 1kB/s.... Netusi nekdo, v cem muze byt
      problem? Asi malo nejakych bufferu? Ale experimenty nikam nevedly.
      <br>
      <br>
      Pres switch to chodi asi 3x rychleji nez primo pripojene k PC, asi
      to servisni komunikace nejak zahlti? Nebo delam neco spatne?
      <br>
      <br>
      Sledovana komunikace ale vypada plynula bez komplikaci, .123 je
      PC, .9 STM, viz priloha
      <br>
      <br>
      <br>
      Vypis dulezite casti programu:
      <br>
      <br>
      /* USER CODE BEGIN 4 */
      <br>
      static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t
      err);
      <br>
      static err_t echo_recvd(void * arg, struct tcp_pcb * tpcb, struct
      pbuf * p, err_t err);
      <br>
      static err_t echo_sent(void * arg, struct tcp_pcb * tpcb, u16_t
      len);
      <br>
      static void echo_err(void * arg, err_t err);
      <br>
      <br>
      static struct tcp_pcb *pcbListened = NULL;
      <br>
      static struct tcp_pcb *pcbAccepted = NULL;
      <br>
      static int connCount;
      <br>
      static osSemaphoreId transferSemphHandle = NULL;
      <br>
      <br>
      static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t
      err)
      <br>
      {
      <br>
          LWIP_UNUSED_ARG(arg);
      <br>
          LWIP_UNUSED_ARG(err);
      <br>
          if (pcbListened == NULL) return ERR_ARG;
      <br>
          if (connCount >= 1)
      <br>
          {
      <br>
              tcp_abort(pcb);
      <br>
              return ERR_ABRT;
      <br>
          }
      <br>
          connCount++;
      <br>
          tcp_arg(pcb, NULL);
      <br>
          tcp_recv(pcb, echo_recvd);
      <br>
          tcp_sent(pcb, echo_sent);
      <br>
          tcp_err(pcb, echo_err);
      <br>
          //      tcp_setprio(pcb, TCP_PRIO_MIN);
      <br>
          tcp_accepted(pcbListened);
      <br>
          pcbAccepted = pcb;
      <br>
          return ERR_OK;
      <br>
      }
      <br>
      <br>
      <br>
      static err_t echo_recvd(void * arg, struct tcp_pcb * tpcb, struct
      pbuf * p, err_t err)
      <br>
      {
      <br>
          if (p == NULL)
      <br>
          {   // EOF signal, connection closed
      <br>
              tcp_close(tpcb);
      <br>
              pcbAccepted = NULL;
      <br>
              connCount--;
      <br>
              if (arg != NULL)
      <br>
              {
      <br>
                  //            mbsDescFree((MBS_Descriptor *)arg);
      <br>
              }
      <br>
          }
      <br>
          else
      <br>
          {
      <br>
              tcp_recved(tpcb, p->tot_len);
      <br>
              //        DBGUSART_Format("MBS-> Received %08x, %d
      B"DBGSTRNL, (uint32_t)tpcb, p->tot_len);
      <br>
              uint8_t *pd = (uint8_t *)p->payload;
      <br>
              uint16_t len = p->len;
      <br>
              uint8_t exc = 0;
      <br>
      <br>
              if (p != NULL) pbuf_free(p);
      <br>
          }
      <br>
          return ERR_OK;
      <br>
      }
      <br>
      <br>
      uint8_t bufSend[1024];
      <br>
      uint8_t sendPcs = 0;
      <br>
      <br>
      static err_t echo_sent(void * arg, struct tcp_pcb * tpcb, u16_t
      len)
      <br>
      {
      <br>
          osSemaphoreRelease(transferSemphHandle);
      <br>
          //TerminalFormatNl("MBS-> Sent %08x, %d B", (uint32_t)tpcb,
      (uint32_t)len);
      <br>
          //osMutexRelease(transferMutexHandle);
      <br>
          HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
      <br>
          return ERR_OK;
      <br>
      }
      <br>
      <br>
      static void echo_err(void * arg, err_t err)
      <br>
      {
      <br>
      <br>
      }
      <br>
      <br>
      <br>
      <br>
      /* USER CODE END 4 */
      <br>
      <br>
      /* StartDefaultTask function */
      <br>
      void StartDefaultTask(void const * argument)
      <br>
      {
      <br>
        /* init code for LWIP */
      <br>
        MX_LWIP_Init();
      <br>
      <br>
        /* USER CODE BEGIN 5 */
      <br>
          osSemaphoreDef(transferSemph);
      <br>
          transferSemphHandle =
      osSemaphoreCreate(osSemaphore(transferSemph), 1);
      <br>
      <br>
          struct tcp_pcb *pcb = tcp_new();
      <br>
          if (pcb == NULL) Error_Handler();
      <br>
          err_t err = tcp_bind(pcb, IP_ADDR_ANY, 52222);
      <br>
          if (err != ERR_OK) Error_Handler();
      <br>
          pcb = tcp_listen(pcb);
      <br>
          if (pcb == NULL) Error_Handler();
      <br>
          tcp_accept(pcb, echo_accept);
      <br>
          pcbListened = pcb;
      <br>
      <br>
          uint32_t tckLed = 0;
      <br>
      <br>
          /* Infinite loop */
      <br>
          for(;;)
      <br>
          {
      <br>
              uint32_t tck = osKernelSysTick();
      <br>
              if (tck-tckLed>250)
      <br>
              {
      <br>
                  tckLed = tck;
      <br>
                  HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
      <br>
              }
      <br>
              osSemaphoreWait(transferSemphHandle, 50);
      <br>
              if (connCount != 0)
      <br>
              {
      <br>
                  err_t e =  tcp_write(pcbAccepted, bufSend,
      sizeof(bufSend), TCP_WRITE_FLAG_MORE);
      <br>
                  if (e == ERR_OK)
      <br>
                  {
      <br>
                      HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin,
      GPIO_PIN_SET);
      <br>
                  }
      <br>
                  else
      <br>
                  {
      <br>
      <br>
                  }
      <br>
              }
      <br>
          }
      <br>
        /* USER CODE END 5 */
      <br>
      }
      <br>
      <br>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
HW-list mailing list  -  sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>