当前位置: 首页 > news >正文

北京企业建站团队深圳做h5网站的公司

北京企业建站团队,深圳做h5网站的公司,东西湖做网站,无线网被附近多个文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么#xff1f; cJSON开源库地址#xff1a; cJSON 一、堆内存不足 1.1 问… 文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么 cJSON开源库地址 cJSON 一、堆内存不足 1.1 问题描述 这是大家遇到最多的问题之一在Keil5中给STM32F103ZET6默认分配的堆大小是0x200在数据量比较大的时候容易出现内存溢出错误。如果数据量不大那么无所谓但是数据量大了就到出现堆内存爆满。 1.2 解决办法 修改堆大小找到.s文件再找到堆大小将0x200修改为0xf00这个数根据需求定。 二、内存泄露 2.1 忘记Delete 在使用cJSON_Parse()函数解析json数据后我们需要释放掉这个函数所申请的内存因为设计到json嵌套的问题所以需要使用cJSON库中的释放函数cJSON_Delete()函数 使用示例 rootcJSON_Parse(data); if(root ! NULL) {/*对root进行进一步解析*/cJSON_Delete(root); } 2.2 忘记Free 在github主页可以看到这段话使用cJSON_Print()这个函数打印json数据会申请一块内存在使用完这个函数后你有义务释放掉这个函数所申请的内存。 使用示例 char *json_string cJSON_Print(item); if (json_string) {printf(%s\n, json_string);free(json_string);//1.5版本以上也可以使用以下函数进行释放//cJSON_free(json_string);}2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题) 由于return造成的惨痛的教训 *有问题的代码 // //函 数 名pid_parameter_change //功 能接收字符串格式化为JSON格式解析其中pid数据并修改对应pid结构体 //输入参数字符串指针pid结构体指针 //返 回 值0表示解析成功1表示解析错误 // uint8_t pid_parameter_change(const char *data,PID *pid) {cJSON *rootNULL;cJSON *kpNULL,*kiNULL,*kdNULL;float p,i,d;rootcJSON_Parse(data);if(root!NULL){/* 解析Kp */kpcJSON_GetObjectItem(root,kp);if(kp NULL) return 1;else pcJSON_GetNumberValue(kp);/* 解析Ki */kicJSON_GetObjectItem(root,ki);if(ki NULL) return 1;else icJSON_GetNumberValue(ki);/* 解析Kd */kdcJSON_GetObjectItem(root,kd);if(kd NULL) return 1;else dcJSON_GetNumberValue(kd);/* 修改PID参数 */pid-Kpp;pid-Kii;pid-Kdd;printf(%p\r\n,root);cJSON_Delete(root);rootNULL,kpNULL,kiNULL,kdNULL;return 0;}else{cJSON_Delete(root);rootNULL;return 1; //root数据JSON格式化失败} }*修改后的代码 // //函 数 名pid_parameter_change //功 能接收字符串格式化为JSON格式解析其中pid数据并修改对应pid结构体 //输入参数字符串指针pid结构体指针 //返 回 值0表示解析成功1表示解析错误 // uint8_t pid_parameter_change(const char *data,PID *pid) {cJSON *rootNULL;cJSON *kpNULL,*kiNULL,*kdNULL;float p,i,d;if(data[0] { data[UART1_Rx_cnt-3] } ){rootcJSON_Parse(data);if(root){/* 解析Kp */kpcJSON_GetObjectItem(root,kp);if(kp NULL) { cJSON_Delete(root);return 1;}else pcJSON_GetNumberValue(kp);/* 解析Ki */kicJSON_GetObjectItem(root,ki);if(ki NULL) { cJSON_Delete(root);return 1;}else icJSON_GetNumberValue(ki);/* 解析Kd */kdcJSON_GetObjectItem(root,kd);if(kd NULL) { cJSON_Delete(root);return 1;}else dcJSON_GetNumberValue(kd);/* 修改PID参数 */pid-Kpp;pid-Kii;pid-Kdd;/*删除JSON否则可能会发送内存泄露*/cJSON_Delete(root);rootNULL,kpNULL,kiNULL,kdNULL; // 释放掉的内存指向NULL避免产生野指针return 0;}else{/*删除JSON否则可能会发送内存泄露*/cJSON_Delete(root);rootNULL;return 1; //root数据JSON格式化失败} }else{return 1;} }问题分析 这个问题的根源是由于串口接收到的数据不全导致的同时也有我代码不严谨的问题。 在有问题的那个代码中使用cJSON_Parse()成功解析出数据使得代码进入了if语句中 if(root) 进入if语句后再次判断json对象是否有ki这个元素 这个时候出现了问题由于串口接收缺少了ki中的i这个字符使得if语句判断结果未false直接return了。 if(ki NULL) . 注意return之前我没有使用cJSON_Delete()删除root所以出现了内存泄露 写代码的时候没考虑到cJSON_Parse()成功后解析不出json对象中的元素的问题 2.4 内存泄露在Cortex-M3内核会发生什么 未完待续…
http://www.pierceye.com/news/801520/

相关文章:

  • dedecms小说网站模板自动生成网站地图的工具
  • 中国比较好的设计网站php网站怎么做静态化
  • Dedecms手机网站源码wordpress小程序制作
  • 成都网站建设备案重庆找网站推广
  • 商务网站建设的调研wordpress 视频 全屏
  • 网站策划案例广州高端网站定制开发价格
  • 大连网站制作优选ls15227微信公众号小程序搭建
  • 个人空间网站建设报告网站建设培训哪个好
  • wap微信网站模板在线网络培训平台
  • asp网站怎么做三语网络推广计划书格式
  • 徽州网站建设企业网站备案域名信息
  • 广州建设信息网官方网站火车头采集wordpress发布
  • 易记域名网站大全火车票网站建设多少
  • 怎么将网站权重提上去怎样在网站图片做超级链接
  • 网站建设需求分析报告功能百度官方电话24小时
  • 扬州市城市建设监察支队网站做空比特币网站
  • 石家庄做网站 vtkj网站空间怎样设置用户名和密码
  • 自考网页制作与网站建设网站虚拟主机建设
  • 手机网站建站视频教程阿里云虚拟主机与网站吗
  • 孝感做招聘信息的网站鹏翔科技 网站建设
  • 阿里云 建设网站怎么样长春网站建设翻译
  • 网站空间位置是什么枝江企业网站
  • 网站到期查询固定ip做网站和域名区别
  • 北京专业网站制作大概费用红色网站建设的比较好的高校
  • 廊坊网站的优化html5网站地址
  • 少儿图书销售网站开发背景网络个性化定制
  • 网站制作价格情况微信输入法使用方法
  • 首饰网站建设策划案我的主页制作代码
  • 网站专题页面模板科技有限公司可以做网站建设吗
  • 物流企业网站建设特色吉林智能网站建设价格