AnsweredAssumed Answered

TCP/IP Task Out of Memory   Error

Question asked by Jaime Rodriguez on Jul 3, 2009
Latest reply on Jul 14, 2009 by Craig Honegger

Hi, I am customizing the web_hvac application provided by freescale. I have change a webpage in order to type a text in a field, and then click on a button to send that text to the microcontroller. Then I store that information into flash. Problem arrives when I click the button and the function executes.

The following mistake comes:


TCP/IP, Task ID 0x10005, TD 0x20006a34
Task Error Code Out of Memory(0x4), State Rx Msg Blocked, timeout


I am not sure that this will get solve by adding more stack to TCP/IP task, and that is I the reason I am also posting the function I am using to resolve the click on the button. This function is based on functions provided by freescale, therefore I dont know if the problem is the function.



int cgi_clave_ingresar(HTTPD_SESSION_STRUCT *session) {
uint_32  len = 0,index=0;
char     clave[100];
boolean  bParams = FALSE;
char buffer[100];
uint_8 MensajeCan[8], i;
    RTC_TIME_STRUCT time_rtc;
html_head(session->sock,"HVAC Settings response");

httpd_sendstr(session->sock, "<BODY>\n");

httpd_sendstr(session->sock, "<br><br>\n");

if (session->request.content_len) {
     len = session->request.content_len;
     len = httpd_read(session, buffer, (int)((len > sizeof(buffer)) ? sizeof(buffer) : len));
     buffer[len] = 0;
     session->request.content_len -= len;
     len = 0;
  if (httpd_get_varval(session, buffer, "clave", clave, sizeof(clave))) {
   bParams =  TRUE;
        if(PasswordIn[0] == 0x03){
              printf("El sistema esta bloqueado por intentos fallidos, espere un tiempo\n");
        if(Password[0] == clave[0] && Password[1] == clave[1] && Password[2] == clave[2] &&
             Password[3] == clave[3] && Password[4] == clave[4] && Password[5] == clave[5]){ //Si el password es correcto lo almacena para las demas tareas.
          for(i = 0 ; i <= 5; i++){
               WriteByte(clave[i], PASSWORD_IN + i);
                  MensajeCan[ i+1 ] = clave[i];
             MensajeCan[ 0 ] = WR_PASSWORD_IN;
             FifoInsertDataCAN(MensajeCan, GRYPHON_BROADCAST );
             switch(PasswordIn[0]){ //se utiliza el mismo arreglo de chars para guardar la cantidad de intentos
                       printf("Primer Intento, la palabra clave es incorrecta\n");
                       WriteByte(0x01, PASSWORD_IN) ;
                       //PasswordIn[0] = 0x01;
                       printf("Segundo Intento, la palabra clave es incorrecta\n");
                       WriteByte(0x02, PASSWORD_IN) ;
                       //PasswordIn[0] = 0x02;
                       printf("Tercer Intento, la palabra clave es incorrecta\n");
                       printf("No se pueden realizar mas intentos\n");
                       WriteByte(0x03, PASSWORD_IN) ;
                       //PasswordIn[0] = 0x03;
                       _rtc_get_time (&time_rtc);
                       WriteByte(time_rtc.minutes, PASSWORD_IN + 1);
                       //PasswordIn[1] = time_rtc.minutes; //Tambien se almacena el minuto
                       break; //del tercer intento fallido

   "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"
   "<meta http-equiv=\"REFRESH\" content=\"0;url=hvac.html\"></HEAD>"

if (!bParams) {
  httpd_sendstr(session->sock, "No parameters received.<br>\n");

return session->request.content_len;


I dont know what is going on. Functions write byte use _lwmem_alloc so the buffer to write in flash should not be included in the stack provided for the task. Besides, when I add breakpoints to this function ( cgi_clave_ingresar)the error doesnt come always in the same line.        0_o


Thanks for your help