mbed webserver由于memcpy而崩溃

时间:2014-11-19 10:22:49

标签: c arrays microcontroller memcpy mbed

我使用FRDM-K64F微控制器使用C语言创建网络服务器。我的网络服务器提供了一个带有一些文本框和显示信息的网页。我的下一个挑战是存储用户提供的IP地址和位srte​​ams。

我创建了两个全局数组ipaddr [3] [17]和bits [3] [17]来存储位和ipaddresses,我现在想要增加数组的大小,但我观察到如果我增加了大小数组甚至ipaddr [4] [17],它崩溃了我的网络服务器。以下是将用户提供的字符串复制到数组的代码。

void testFunc(char * str)
{    
    char *ht="://";  
    char *ur="/cgi-bin/ext/e_alarm.cgi?zone=0";   
    char *ip;  //ip address to be stored from the user

    ip = new char[15];

    char *pch; //use for tokenizing the string
    char *htt; //combining the strings
    char *b; //bits to be stored from the user

    b = new char [6];

    if(strstr(str,"trigger") != NULL)
    { 
        //ip1="http://192.168.0.233/cgi-bin/ext/e_alarm.cgi?zone=0";
        RED_ON; GREEN_OFF; BLUE_OFF; 

        pch = strtok (str,"&=");

        ip = pch;

        pch = strtok (NULL, "&=");
        pch = strtok (NULL, "&=");

        b = pch;

        pch = strtok (NULL, "=");

        htt = pch;

        strcat(htt, ht); 

        strcat(htt, ip);  
        strcat(htt, ur);  

        printf("htt is %s \n",htt);

        memcpy(ipaddr[counter], ip, strlen(ip));
        memcpy(bits[counter], b, strlen(b));

        counter++;
        printf("\n");

        for (int k = 0; k < counter; k++) 
        {
            printf("IP ADDRESSES:  %s", ipaddr[k]);
            printf("...Bits %s \n", bits[k]);
        }
    }   
}

其中str是用户提供的数据,然后我使用一些标记化技术来提取ip和位。 当用户按下按钮程序调用此功能时,奇怪的是我的Web服务器在获取IP地址后崩溃,当我将assign ip放入浏览器的url时,它在刷新几次后崩溃。如果我删除memcpy函数它工作正常或如果我减少gloabally声明数组的大小,即ipaddr和位[3] [17],它也可以正常工作。

另一方面,我使用74KB的闪存和54 KB的RAM,其中MBED微控制器的总内存为1MB闪存和512KB RAM。

0 个答案:

没有答案