<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: MQX: Stack Ethernet: Send/Received blocked? in MQX Software Solutions</title>
    <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-Stack-Ethernet-Send-Received-blocked/m-p/484411#M15884</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I found the problem&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In fact, my modbus application could use some interface via SPI.&lt;/P&gt;&lt;P&gt;Then The SPI access was done via the same file on many task. In my case, one task was preempted by other. twice done SPI access.&lt;/P&gt;&lt;P&gt;When bug occurs, it caused by a task pre empted while SPI communication was in progress and the new task done also an access.&lt;/P&gt;&lt;P&gt;This should cause problem on Interrupt managment and then blocked some action like Ethernet...&lt;/P&gt;&lt;P&gt;:smileydevil:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 18 Mar 2016 09:47:09 GMT</pubDate>
    <dc:creator>arnogir</dc:creator>
    <dc:date>2016-03-18T09:47:09Z</dc:date>
    <item>
      <title>MQX: Stack Ethernet: Send/Received blocked?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-Stack-Ethernet-Send-Received-blocked/m-p/484410#M15883</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm using MQX 4.2 on a Kinetis K60.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In normal case, all work correctly: Ethernet Modbus is received, managed and response is done.&lt;/P&gt;&lt;P&gt;But sometime, When request is done so fast, at a moment, is blocked. Response is not done to a request, and new request not unblock the recv task.&lt;/P&gt;&lt;P&gt;Bellow is an extract of my code:&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Initialization in a main task:&lt;/P&gt;&lt;PRE class="c++" name="code"&gt;/* Allocates resources that RTCS needs and creates TCP/IP task. */ RTCS_create(); /* Read Board ID Number in NV Memory and then Get Mac Address */ ENET_get_mac_address(DV_ETH_ENET_DEVICE, MACLowAddress, DV_Eth_MacAddress); /* Initializes the Ethernet device, adds network interface, and sets up the IPCFG context for it. */ ipcfg_init_device(DV_ETH_ENET_DEVICE, DV_Eth_MacAddress); Error = ipcfg_bind_staticip(DV_ETH_ENET_DEVICE, &amp;amp;DV_Eth_IpData);&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; DV_Eth_TCPSocketAddr.sin_family&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = AF_INET; DV_Eth_TCPSocketAddr.sin_port&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = DV_Eth_iGetTCPRxTxPort(); DV_Eth_TCPSocketAddr.sin_addr.s_addr&amp;nbsp; = INADDR_ANY;&amp;nbsp; /* Create TCP socket */ DV_Eth_TCPSocketID = socket(PF_INET, SOCK_STREAM, 0); /* Bind TCP socket */ bind(DV_Eth_TCPSocketID, &amp;amp;DV_Eth_TCPSocketAddr, sizeof(DV_Eth_TCPSocketAddr)); /* Listen on TCP port */ listen(DV_Eth_TCPSocketID, 0);&amp;nbsp; DV_Eth_TCPClientSocketID = accept(DV_Eth_TCPSocketID, &amp;amp;DV_Eth_TCPClientSocketAddr, &amp;amp;DV_Eth_TCPClientSocketAddrLen);&amp;nbsp;&amp;nbsp; /* Set socket options */ Option = TRUE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setsockopt(DV_Eth_TCPClientSocketID, SOL_TCP, OPT_SEND_NOWAIT, &amp;amp;Option, sizeof(Option)); setsockopt(DV_Eth_TCPClientSocketID, SOL_TCP, OPT_SEND_PUSH, &amp;amp;Option, sizeof(Option));&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In a receive task, which is always in blocked state and run as soon as satagram is received:&lt;/P&gt;&lt;PRE class="c++" name="code"&gt;Task: while(1) {&amp;nbsp; ReadSize = recv(DV_Eth_TCPClientSocketID, BufferPtr, BufferSize, 0);&amp;nbsp;&amp;nbsp; /* Applciation data managment (Ethernet Modbus) */&amp;nbsp; Note : This part can call DV_Eth_SendMsg to make a ModBus response&amp;nbsp; [...] }&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;internal function DV_Eth_SendMsg:&lt;/P&gt;&lt;PRE class="c++" name="code"&gt;uint32_t DV_Eth_SendMsg(uint8_t *BufferPtr, uint32_t BufferSize) {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; int32_t WriteSize = 0; &amp;nbsp; WriteSize = send(DV_Eth_TCPClientSocketID, BufferPtr, BufferSize, 0);&amp;nbsp;&amp;nbsp; &amp;nbsp; return((uint32_t)WriteSize); }&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Bellow is WireShark trace:&lt;/P&gt;&lt;BLOCKQUOTE class="jive-quote"&gt;&lt;P&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Computer is 192.168.1.150&lt;BR /&gt;&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Target Kinetis K60 with MQX is 192.168.1.156&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 8pt;"&gt;No.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Time&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Protocol Length Info&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="color: #5ee697;"&gt;&lt;EM style="font-size: 8pt;"&gt;Computer done a Modbus request to the target:&lt;/EM&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15602 2016-03-16 17:22:02.537174&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modbus/TCP 66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query: Trans:&amp;nbsp; 3367; Unit:&amp;nbsp;&amp;nbsp; 0, Func:&amp;nbsp;&amp;nbsp; 3: Read Holding Registers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15603 2016-03-16 17:22:02.537504&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 502 → 57053 [PSH, ACK] Seq=68344 Ack=56683 Win=3178 Len=0&lt;/SPAN&gt;&lt;BR /&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Target make a response : Ok&lt;/EM&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15604 2016-03-16 17:22:02.545654&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modbus/TCP 81&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Response: Trans:&amp;nbsp; 3367; Unit:&amp;nbsp;&amp;nbsp; 0, Func:&amp;nbsp;&amp;nbsp; 3: Read Holding Registers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15605 2016-03-16 17:22:02.545747&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 54&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 57053 → 502 [ACK] Seq=56683 Ack=68371 Win=63492 Len=0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Computer done a Modbus request to the target:&amp;nbsp; &lt;/EM&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15606 2016-03-16 17:22:02.583458&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modbus/TCP 66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query: Trans:&amp;nbsp; 3367; Unit:&amp;nbsp;&amp;nbsp; 0, Func:&amp;nbsp;&amp;nbsp; 3: Read Holding Registers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15607 2016-03-16 17:22:02.583966&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 502 → 57053 [PSH, ACK] Seq=68371 Ack=56695 Win=3166 Len=0&lt;/SPAN&gt;&lt;BR /&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Target ACK the request, but my applciation Recv Task is always blocked necause wait datagram, So No Target response !!!!! NOK !!!!!&lt;/EM&gt;&lt;/P&gt;&lt;P&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Computer done a newly Modbus request to the target: &lt;/EM&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15608 2016-03-16 17:22:02.619075&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Modbus/TCP 66&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Query: Trans:&amp;nbsp; 3367; Unit:&amp;nbsp;&amp;nbsp; 0, Func:&amp;nbsp;&amp;nbsp; 3: Read Holding Registers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN style="font-size: 8pt;"&gt;15609 2016-03-16 17:22:02.619584&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.156&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.1.150&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCP&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 60&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 502 → 57053 [PSH, ACK] Seq=68371 Ack=56707 Win=3154 Len=0&lt;/SPAN&gt;&lt;BR /&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Target ACK the request, but no response&lt;/EM&gt;&lt;BR /&gt;&lt;EM style="color: #5ee697; font-size: 8pt;"&gt;Etc...&lt;/EM&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;P&gt;In parrallale I have a task which detect cable deconnect:&lt;/P&gt;&lt;P&gt;(simplified code):&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class="c++" name="code"&gt;if (ipcfg_get_link_active(DV_ETH_ENET_DEVICE) == FALSE) {&amp;nbsp; printf("Cable disconnected\n");&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("\nWaiting for ethernet cable plug in ...\n");&amp;nbsp; /* Close TCP socket */&amp;nbsp; DV_Eth_iTCPState = DV_ETH_TCP_WAIT_CONNECT;&amp;nbsp; DV_Eth_iCloseSocket(DV_Eth_TCPClientSocketID);&amp;nbsp; ....&amp;nbsp;&amp;nbsp;&amp;nbsp; if (ipcfg_get_link_active(DV_ETH_ENET_DEVICE) == TRUE)&amp;nbsp;&amp;nbsp; { &amp;nbsp; /* Wait new connection */ &amp;nbsp; DV_Eth_TCPClientSocketID = accept(DV_Eth_TCPSocketID, &amp;amp;DV_Eth_TCPClientSocketAddr, &amp;amp;DV_Eth_TCPClientSocketAddrLen);&amp;nbsp;&amp;nbsp; &amp;nbsp; /* Set socket options */ &amp;nbsp; Option = TRUE;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; setsockopt(DV_Eth_TCPClientSocketID, SOL_TCP, OPT_SEND_NOWAIT, &amp;amp;Option, sizeof(Option)); &amp;nbsp; setsockopt(DV_Eth_TCPClientSocketID, SOL_TCP, OPT_SEND_PUSH, &amp;amp;Option, sizeof(Option));&amp;nbsp; } }&lt;/PRE&gt;&lt;DIV style="display:none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if I made a cable deconnection/deconnection, socket is reinitialized, but problem still present. Is is mandatory to Reset the µC to make a new MQX init.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is somebody has an Idea, what can I read to try to found where come from my problem? Is any internal MQX status or flag to read can help me to found where the problem come from?&lt;/P&gt;&lt;P&gt;I have a problem in my code?&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank&lt;SPAN aria-label="Happy" class="emoticon_happy emoticon-inline" style="height:16px;width:16px;"&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;(Note :&amp;nbsp;&amp;nbsp; complete source code is provided with this post)&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Original Attachment has been moved to: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-338737" rel="nofollow noopener noreferrer" target="_blank"&gt;DV_Eth.c.zip&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 17 Mar 2016 07:15:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-Stack-Ethernet-Send-Received-blocked/m-p/484410#M15883</guid>
      <dc:creator>arnogir</dc:creator>
      <dc:date>2016-03-17T07:15:27Z</dc:date>
    </item>
    <item>
      <title>Re: MQX: Stack Ethernet: Send/Received blocked?</title>
      <link>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-Stack-Ethernet-Send-Received-blocked/m-p/484411#M15884</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I found the problem&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In fact, my modbus application could use some interface via SPI.&lt;/P&gt;&lt;P&gt;Then The SPI access was done via the same file on many task. In my case, one task was preempted by other. twice done SPI access.&lt;/P&gt;&lt;P&gt;When bug occurs, it caused by a task pre empted while SPI communication was in progress and the new task done also an access.&lt;/P&gt;&lt;P&gt;This should cause problem on Interrupt managment and then blocked some action like Ethernet...&lt;/P&gt;&lt;P&gt;:smileydevil:&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 18 Mar 2016 09:47:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MQX-Software-Solutions/MQX-Stack-Ethernet-Send-Received-blocked/m-p/484411#M15884</guid>
      <dc:creator>arnogir</dc:creator>
      <dc:date>2016-03-18T09:47:09Z</dc:date>
    </item>
  </channel>
</rss>

