STM32F767 ethernet rychlost
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Sobota Říjen 7 11:50:36 CEST 2017
Tak jsem zjistil, ze klicove je pouzit
tcp_nagle_disable(pcb);
Nyni to zase zdrzuje PC nez odpovi ACK, jdu zkoumat dal...
Dne 07.10.2017 v 11:31 Jaroslav Buchta napsal(a):
> Zdravim,
>
> mam problem s implementaci subj, pouziva HAL, vse nakonfigurovano
> pokusne v prazdnem projektu.
>
> 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.
>
> Pres switch to chodi asi 3x rychleji nez primo pripojene k PC, asi to
> servisni komunikace nejak zahlti? Nebo delam neco spatne?
>
> Sledovana komunikace ale vypada plynula bez komplikaci, .123 je PC, .9
> STM, viz priloha
>
>
> Vypis dulezite casti programu:
>
> /* USER CODE BEGIN 4 */
> static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err);
> static err_t echo_recvd(void * arg, struct tcp_pcb * tpcb, struct pbuf
> * p, err_t err);
> static err_t echo_sent(void * arg, struct tcp_pcb * tpcb, u16_t len);
> static void echo_err(void * arg, err_t err);
>
> static struct tcp_pcb *pcbListened = NULL;
> static struct tcp_pcb *pcbAccepted = NULL;
> static int connCount;
> static osSemaphoreId transferSemphHandle = NULL;
>
> static err_t echo_accept(void *arg, struct tcp_pcb *pcb, err_t err)
> {
> LWIP_UNUSED_ARG(arg);
> LWIP_UNUSED_ARG(err);
> if (pcbListened == NULL) return ERR_ARG;
> if (connCount >= 1)
> {
> tcp_abort(pcb);
> return ERR_ABRT;
> }
> connCount++;
> tcp_arg(pcb, NULL);
> tcp_recv(pcb, echo_recvd);
> tcp_sent(pcb, echo_sent);
> tcp_err(pcb, echo_err);
> // tcp_setprio(pcb, TCP_PRIO_MIN);
> tcp_accepted(pcbListened);
> pcbAccepted = pcb;
> return ERR_OK;
> }
>
>
> static err_t echo_recvd(void * arg, struct tcp_pcb * tpcb, struct pbuf
> * p, err_t err)
> {
> if (p == NULL)
> { // EOF signal, connection closed
> tcp_close(tpcb);
> pcbAccepted = NULL;
> connCount--;
> if (arg != NULL)
> {
> // mbsDescFree((MBS_Descriptor *)arg);
> }
> }
> else
> {
> tcp_recved(tpcb, p->tot_len);
> // DBGUSART_Format("MBS-> Received %08x, %d B"DBGSTRNL,
> (uint32_t)tpcb, p->tot_len);
> uint8_t *pd = (uint8_t *)p->payload;
> uint16_t len = p->len;
> uint8_t exc = 0;
>
> if (p != NULL) pbuf_free(p);
> }
> return ERR_OK;
> }
>
> uint8_t bufSend[1024];
> uint8_t sendPcs = 0;
>
> static err_t echo_sent(void * arg, struct tcp_pcb * tpcb, u16_t len)
> {
> osSemaphoreRelease(transferSemphHandle);
> //TerminalFormatNl("MBS-> Sent %08x, %d B", (uint32_t)tpcb,
> (uint32_t)len);
> //osMutexRelease(transferMutexHandle);
> HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_RESET);
> return ERR_OK;
> }
>
> static void echo_err(void * arg, err_t err)
> {
>
> }
>
>
>
> /* USER CODE END 4 */
>
> /* StartDefaultTask function */
> void StartDefaultTask(void const * argument)
> {
> /* init code for LWIP */
> MX_LWIP_Init();
>
> /* USER CODE BEGIN 5 */
> osSemaphoreDef(transferSemph);
> transferSemphHandle =
> osSemaphoreCreate(osSemaphore(transferSemph), 1);
>
> struct tcp_pcb *pcb = tcp_new();
> if (pcb == NULL) Error_Handler();
> err_t err = tcp_bind(pcb, IP_ADDR_ANY, 52222);
> if (err != ERR_OK) Error_Handler();
> pcb = tcp_listen(pcb);
> if (pcb == NULL) Error_Handler();
> tcp_accept(pcb, echo_accept);
> pcbListened = pcb;
>
> uint32_t tckLed = 0;
>
> /* Infinite loop */
> for(;;)
> {
> uint32_t tck = osKernelSysTick();
> if (tck-tckLed>250)
> {
> tckLed = tck;
> HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
> }
> osSemaphoreWait(transferSemphHandle, 50);
> if (connCount != 0)
> {
> err_t e = tcp_write(pcbAccepted, bufSend,
> sizeof(bufSend), TCP_WRITE_FLAG_MORE);
> if (e == ERR_OK)
> {
> HAL_GPIO_WritePin(LD3_GPIO_Port, LD3_Pin, GPIO_PIN_SET);
> }
> else
> {
>
> }
> }
> }
> /* USER CODE END 5 */
> }
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20171007/bd11fccd/attachment.html>
Další informace o konferenci Hw-list