我使用FRDM-K64F微控制器使用C语言创建网络服务器。我的网络服务器提供了一个带有一些文本框和显示信息的网页。我的下一个挑战是存储用户提供的IP地址和位srteams。
我创建了两个全局数组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。