lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [lwip-users] LWIP client code causes hard fault error


From: Sanchayan
Subject: Re: [lwip-users] LWIP client code causes hard fault error
Date: Tue, 26 Jun 2012 17:24:39 +0530
User-agent: Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20120614 Thunderbird/13.0.1

Hello,

Yes, i did get such faults. To trace the cause of a hard fault, refer to the Technical Reference Manual.

Here is a link for some help. http://coherentmusings.wordpress.com/2012/06/11/debugging-a-hard-fault-in-arm-cortex-m3s/

I use to get a bus fault generally once in a few hours or so. But, my problem started occurring after i incorporated firmware update over Ethernet functionality in my code. I had no problems with sending or receiving data. I wrote a bus fault handler in which i do a software reset of the system.


On 26-06-2012 17:14, shettys wrote:
Yes i am using the arm cortex m3. Did you have such problems ?


Sanchayan wrote:
Hello,

Which processor are you using?

Are you using ARM Cortex M3?


On 26-06-2012 16:23, shettys wrote:
Hello,

Could somebody please help me with my problem in setting up a TCP client.
The code is as posted below.
I call the TCPConnection_start before i go into the main loop, which
initializes the connection. Then i call the TCP_send periodically( to
send
some ADC values).
When my server opens a connection on Port 7 and I run my program it works
fine and the ADC values are sent. However sometimes it just goes into a
hard
fault handler. Could someone please let me know where i am wrong?

void TCPConnection_start(void)
{
    struct ip_addr DestIPaddr;
/* create new tcp pcb */
    pcb = tcp_new();
    if (pcb != NULL)
    {
      IP4_ADDR( &DestIPaddr, DEST_IP_ADDR0, DEST_IP_ADDR1, DEST_IP_ADDR2,
DEST_IP_ADDR3 );
/* connect to destination address/port */
      tcp_connect(pcb,&DestIPaddr,DEST_PORT,TCPConnection_Established);
    }
}

/**
    * @brief Function called when TCP connection established
    * @param tpcb: pointer on the connection contol block
    * @param err: when connection correctly established err should be
ERR_OK
    * @retval err_t: returned error
    */
static err_t TCPConnection_Established(void *arg, struct tcp_pcb *pcb,
err_t
err)
{
    if (err == ERR_OK)
    {
    /* allocate structure es to maintain tcp connection informations */
      es = (struct echoclient *)mem_malloc(sizeof(struct echoclient));
if (es != NULL)
      {
          es->state = ES_CONNECTED;
        es->pcb = pcb;
         }
     }
}


void TCP_send(void)
{
        uint32_t (*ptr)[3]; // pointer to the   ADC_TDstamped_SRAM array.
        #ifdef UserButton_InteruptFor_ADCConversion
        sprintf((char*)data, "Potentiometer value is, %d\n",
ADC3ConvertedValue);

        /* allocate pbuf */
        es->p_tx = pbuf_alloc(PBUF_TRANSPORT, strlen((char*)data) ,
PBUF_POOL);
if (es->p_tx)
        {
/* copy data to pbuf */
          pbuf_take(es->p_tx, (char*)data, strlen((char*)data));
/* send data */
                TCPData_send(pcb,es);
        }
}

/**
    * @brief function used to send data
    * @param  tpcb: tcp control block
    * @param  es: pointer on structure of type echoclient containing info
on
data
    *             to be sent
    * @retval None
    */
static void TCPData_send(struct tcp_pcb *pcb, struct echoclient * es)
{
    struct pbuf *ptr;
    err_t wr_err = ERR_OK;
while ((wr_err == ERR_OK) &&
           (es->p_tx != NULL) &&
           (es->p_tx->len <= tcp_sndbuf(pcb)))
    {
/* get pointer on pbuf from es structure */
      ptr = es->p_tx;

      /* enqueue data for transmission */
      wr_err = tcp_write(pcb, ptr->payload, ptr->len, 1);
if (wr_err == ERR_OK)
      {
        /* continue with next pbuf in chain (if any) */
        es->p_tx = ptr->next;
if(es->p_tx != NULL)
        {
          /* increment reference count for es->p */
          pbuf_ref(es->p_tx);
        }
/* free pbuf: will free pbufs up to es->p (because es->p has a
reference count > 0) */
        pbuf_free(ptr);
     }
     else if(wr_err == ERR_MEM)
     {
        /* we are low on memory, try later, defer to poll */
       es->p_tx = ptr;
     }
     else
     {
      }
    }
}



Disclaimer: This message (including any attachments) contains confidential
information and is intended solely for the use of the individual or entity
to whom they are addressed. If you are not the intended recipient you are
notified that disclosing, copying, distributing or taking any action based
on the contents of this information is strictly prohibited. If you have
received this email in error please notify address@hidden Please note
that any views or opinions presented in this email are solely those of the
author and do not necessarily represent those of Godrej & Boyce Mfg. Co.
Ltd. group of companies. The recipient should check this email and any
attachments for the presence of viruses. Godrej & Boyce Mfg. Co. Ltd.
group of companies accepts no liability for any damage caused by any virus
transmitted by this email.


_______________________________________________
lwip-users mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/lwip-users






Disclaimer: This message (including any attachments) contains confidential information and is intended solely for the use of the individual or entity to whom they are addressed. If you are not the intended recipient you are notified that disclosing, copying, distributing or taking any action based on the contents of this information is strictly prohibited. If you have received this email in error please notify address@hidden Please note that any views or opinions presented in this email are solely those of the author and do not necessarily represent those of Godrej & Boyce Mfg. Co. Ltd. group of companies. The recipient should check this email and any attachments for the presence of viruses. Godrej & Boyce Mfg. Co. Ltd. group of companies accepts no liability for any damage caused by any virus transmitted by this email.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]