OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4002|回复: 4

接收串口数据运行多次后内存溢出!求解,功能代码如下

[复制链接]

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2011-8-2
在线时间
33 小时
发表于 2016-6-29 13:19:55 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 Fi_Sun 于 2016-6-29 13:21 编辑

现象是接收到第一次数据的时候内存不明显变化,第二次接收数据的时候,内存变为占用1%,第三次变为2%以此类推下去,结果连续接收到一定次数后,内存就占用满了,程序死机,该段程序在UCOSII里面运行的!有哪位同志遇到这样的问题希望能给个解决问题的思路,谢谢!
[mw_shl_code=c,true]const unsigned char *month[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
void RcvDate()
{
          char t,*buffer,*time,*first,*second,*value1,*value2,m[3];
                USART1_GetRcvData(buffer, USART1_GetRcvNum());
          USART1_Clear();
          buffer =  mymalloc(600);
                printf("\r\n½óêÕμ½μÄêy¾YÎa£o%s\r\n\r\nêy¾Y3¤¶èÎa£o%d\r\n",buffer,strlen(buffer));
    if((NULL != strstr(buffer, "HTTP/1.1 200 OK")))//
                {   
                   time = mymalloc(30);
                         time = (char *)(strstr(buffer, "Date: ")+strlen("Date: "));
                         get_info.w_year = (time[12]-0x30)*1000+(time[13]-0x30)*100+(time[14]-0x30)*10+(time[15]-0x30);
                         for(t = 0;t<3;t++)//&#209;-&#187;·&#182;áè&#161;3&#246;&#212;&#194;·Yμ&#196;D&#197;&#207;¢
                         {
                                        m[t] = time[8+t];//×a′&#230;è&#235;&#214;D&#188;&#228;±&#228;á&#191;
                         }
                         for(t = 0;t<12;t++)//ó&#235;êy×é&#214;Dμ&#196;êy&#190;Y&#209;-&#187;·&#198;¥&#197;&#228;
                         {
                                  if((NULL != strstr(month[t],m)))//è&#231;1&#251;&#198;¥&#197;&#228;3é1|
                                        {
                                                break;//ì&#248;3&#246;&#209;-&#187;·
                                        }
                         }
                         t = t+1;//μ&#195;μ&#189;μ&#196;êy&#190;Y&#188;ó1&#212;òμ&#195;μ&#189;êμ&#188;êμ&#196;&#212;&#194;·Yêy&#190;Y
                         printf("\r\n&#189;óê&#213;μ&#189;μ&#196;&#212;&#194;·Y&#206;a£o%d\r\n\r\n",t);
                   get_info.w_month = t;//&#189;&#171;&#212;&#194;·Yêy&#190;Y′&#230;è&#235;&#189;á11ì&#229;±&#228;á&#191;
                         get_info.w_date= (time[5]-0x30)*10+(time[6]-0x30);
                         get_info.hour= (time[17]-0x30)*10+(time[18]-0x30);
                         get_info.min= (time[20]-0x30)*10+(time[21]-0x30);
                         get_info.sec= (time[23]-0x30)*10+(time[24]-0x30);
                         time[29] = '\0';
                         printf("\r\n&#189;óê&#213;μ&#189;μ&#196;ê±&#188;&#228;êy&#190;Y£o%s\r\n\r\n",time);
                         first = (char *)(strstr((time+30), "\"value\"\:")+strlen("\"value\"\:"));
                         printf("\r\n&#189;óê&#213;μ&#189;μ&#196;ê±&#188;&#228;êy&#190;Y£o%s\r\n\r\n",first);
                        value1 = mymalloc(10);
                        for(t = 0;*first!='}';t++)//êy×&#214;&#197;D&#182;&#207;} è&#231;1&#251;ê&#199;×&#214;·&#251;′&#174;&#197;D&#182;&#207;&#161;°
                         {
         value1[t] =*first;
         first++;                                 
                         }
                         value1[++t] = '\0';
                        get_info.value1 = atoi(value1);//32&#206;&#187;3¤&#213;&#251;Díêy&#190;Y
                        printf("\r\n&#189;óê&#213;μ&#189;μ&#196;êy&#214;μ&#206;a£o%d\r\n\r\n",get_info.value1);
                        first = (char *)(first+9);//êy×&#214;&#188;ó9  ×&#214;·&#251;′&#174;&#188;ó10
                        for(t = 0;*first!='"';t++)
                        {
         get_info.id1[t] =*first;
         first++;                                 
                        }
                        get_info.id1[++t] = '\0';
                        printf("\r\n&#189;óê&#213;μ&#189;μ&#196;IDo&#197;&#206;a£o%s\r\n\r\n", get_info.id1);
                        second = (char *)(strstr((first+10), "\"value\"\:")+strlen("\"value\"\:"));//×&#214;·&#251;ààDí &#188;ó1   ·&#199;×&#214;·&#251;ààDí2&#187;&#188;ó
                        value2 = mymalloc(10);
                        for(t = 0;*second!='}';t++)//êy×&#214;&#197;D&#182;&#207;} è&#231;1&#251;ê&#199;×&#214;·&#251;′&#174;&#197;D&#182;&#207;&#161;°
                         {
         value2[t] =*second;
         second++;                                 
                         }
                         value2[++t] = '\0';
                         get_info.value2 = atoi(value2);//32&#206;&#187;3¤&#213;&#251;Díêy&#190;Y
                        printf("\r\n&#189;óê&#213;μ&#189;μ&#196;êy&#214;μ&#206;a£o%d\r\n\r\n",get_info.value2);
                        second = (char *)(second+9);//êy×&#214;&#188;ó9 ×&#214;·&#251;′&#174;&#188;ó10
                        for(t = 0;*second!='"';t++)
                        {
         get_info.id2[t] =*second;
         second++;                                 
                        }
                        get_info.id2[++t] = '\0';
                        printf("\r\n&#189;óê&#213;μ&#189;μ&#196;IDo&#197;&#206;a£o%s\r\n\r\n", get_info.id2);
                }
                myfree(time);
                myfree(first);
                myfree(second);
                myfree(value1);
                myfree(value2);
                myfree(buffer);
                clear_buffer(buffer);
}
[/mw_shl_code]

我只希望我一直能保持着满腔的热情去玩!!!!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-7-2 21:26:18 | 显示全部楼层
回复

使用道具 举报

37

主题

68

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
金钱
402
注册时间
2015-12-31
在线时间
108 小时
发表于 2016-7-4 15:45:15 | 显示全部楼层
这个内存占有1%、2%如何查看的?请指教
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2011-8-2
在线时间
33 小时
 楼主| 发表于 2016-7-4 19:22:52 | 显示全部楼层
正点原子 发表于 2016-7-2 21:26
说明你malloc后没有free

该段程序得后面我调用了free函数了  参考的是MINI板的程序
我只希望我一直能保持着满腔的热情去玩!!!!
回复

使用道具 举报

7

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
146
金钱
146
注册时间
2011-8-2
在线时间
33 小时
 楼主| 发表于 2016-7-4 19:23:40 | 显示全部楼层
suntree 发表于 2016-7-4 15:45
这个内存占有1%、2%如何查看的?请指教

正点原子力的内存管理的程序中有个可调用的参数,然后printf输出就行了
我只希望我一直能保持着满腔的热情去玩!!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-11 08:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表