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

网站建设定制开发湖南城乡建设部网站首页

网站建设定制开发,湖南城乡建设部网站首页,删除wordpress缓存文件,建设网站企业网上银行刚入行单片机开发,赶鸭子上架,简单开聊,纯粹是做一个记录, 总体来说,问题本身比较低端,但是在缺乏调试手段(Keil的没有),不熟悉代码,碰到这种问题还真不是一…

刚入行单片机开发,赶鸭子上架,简单开聊,纯粹是做一个记录,

总体来说,问题本身比较低端,但是在缺乏调试手段(Keil的没有),不熟悉代码,碰到这种问题还真不是一时半会可以搞定。

简单描述,串口上看到单板启动后,出现如下错误。

free memory: memory[0x60001470], block[0x60001458] 
((header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC) assertion failed at function:rt_memheap_free, line number:515

一个典型的内存释放时,发现魔术字不对的问题。

由于地址看起来正常,野指针访问的可能性有点大

0x60000000开口的512K,实际就是外部RAM,当前单片机STM32F407,自带128K RAM

#define STM32_SRAM_SIZE           128

#define STM32_SRAM_END            (0x20000000 + STM32_SRAM_SIZE * 1024)

设计上,增加了512K 外设RAM

#define STM32_ESRAM_START          0x60000000

#define STM32_ESRAM_SIZE           512

#define STM32_ESRAM_END            (0x60000000 + STM32_ESRAM_SIZE * 1024)

想要得到足够的信息,还得打开日志开关,

#ifndef RT_DEBUG_MEMHEAP

#define RT_DEBUG_MEMHEAP               1

#endif

于是差不多有刷屏的打印,好在问题出在单板初始化阶段,眼里尚能抵达。

allocate 72 on heap:heapSRAMsplit: block[0x60001454] nextm[0x6007ffe8] prevm[0x6000142c] to new[0x600014b4]
new ptr: next_free 0x20009568, prev_free 0x20009568
alloc mem: memory[0x6000146c], heap[0x60001454], size: 72 -->这里0x6000146c - 0x60001454 = 24 字节,就是内存管理头大小。
free memory: memory[0x60001358], block[0x60001340]

/*** memory item on the heap*/
struct rt_memheap_item
{rt_uint32_t             magic;                      /**< magic number for memheap */struct rt_memheap      *pool_ptr;                   /**< point of pool */struct rt_memheap_item *next;                       /**< next memheap item */struct rt_memheap_item *prev;                       /**< prev memheap item */struct rt_memheap_item *next_free;                  /**< next free memheap item */struct rt_memheap_item *prev_free;                  /**< prev free memheap item */
};

跟踪alloc+free的配对流程,对照assert前的地址,差不多能够确定可疑点。

merge: right node 0x600013d4, next_free 0x600014b4, prev_free 0x20009568
insert to free list: next_free 0x600014b4, prev_free 0x20009568
free memory: memory[0x60001470], block[0x60001458] --> 实际上应该是0x60001454,指针偏移了4字节。
((header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC) assertion failed at function:rt_memheap_free, line number:515
 

笔者想偷懒,结果没有成功,方法是替换assert,代码替换为除零错误,来激发cmbacktrace,这样就可以拿到调用栈,可惜总是不成功,刚入行,还不知道多少坑要填。

最后老老实实走读代码,非常费眼神,有调试器的话,其实就分分钟的事。

碰到的问题,其实不仅仅如此,初始化过程中还存在着一个小内存操作,从片外拷贝到片内,然后crash了,代码走读看起来没有问题,尚不知道原因。

规避方法为,对于该模块内部,所有的内存申请和释放,用8字节对齐方式。

void cJSON_free(void *ptr)
{/* free a RT_NULL pointer */if (ptr == RT_NULL)return ;rt_free_align(ptr);
}
void* cJSON_malloc(rt_size_t size)
{return rt_malloc_align(size, 8);
}

http://www.dtcms.com/wzjs/816671.html

相关文章:

  • 门户网站有什么特点wordpress xmlrpc
  • 蚂蚁网站建设游戏试玩平台代理
  • 营销型网站建设的目标是最简洁wordpress主题
  • app开发网站模板深圳展厅设计
  • seo建站是什么意思潍坊做网站哪家好
  • 商城网站建设平台网站策划书主题
  • 网站应包括的基本功能和高级功能自己网站上做淘宝搜索
  • 工商局网站怎么做股东实名认证网站建设价格由什么决定
  • 象山县住房建设局网站网站域名如何管理
  • 设备做外贸哪个网站好临沂市建设官方网站
  • 吉林建设厅网站首页电脑平面设计培训班多少钱
  • 松江新城投资建设有限公司网站泰州北京网站建设
  • 女子医院网站设计怎么做政协网站信息化建设的作用
  • 用ip地址做网站做内衣的网站好
  • 网上购物的网站有哪些昆明做网站建设怎么样
  • 当当网站建设优点网站开发中网页之间的连接形式
  • 上海做高端网站the7 wordpress 下载
  • 大连网站建设找哪家河南化工厂
  • 天津网站建设品牌推广wordpress交互插件
  • 找小网站的关键词网络营销软文范例大全800
  • 工业设计网站有那些做网站过程
  • 做音乐网站代码想百度搜到网站新域名怎么做
  • 网站搭建详细教程网站收录提交入口怎么做
  • 网站商城微信支付接口网站开发 都包含什么语言
  • 谁会制作网站做qq空间的网站
  • 做微信公众号还是网站SEO参与网站建设注意
  • 网站推广工具有如何建立公司邮箱
  • 东莞建站网站建设产品推广wordpress另一项更新
  • 响应式环保网站模板php网站开发常用的插件
  • 极速彩票网站建设水文化建设网站