0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

flashDB/Easyflash触发GC导致系统卡死的解决方法分享

冬至子 来源:用户名由3_15位 作者:用户名由3_15位 2023-10-16 14:56 次阅读

使用情况

芯片:SMT32F429
操作系统:RTT 5.0.0
文件系统:littlefs + romfs
flashdb:kvdb + 文件模式 使用

使用场景

分配5个扇区情况

创建一个线程,1秒写入一次当前时间戳至kvdb数据库中

发现如果分配五个扇区,前四个扇区都可以正常读写。

当五个扇区都写满的时候,需要搬运数据到第0扇区去。

日志如下,没有空扇区了。

The remain empty sector is 1, GC threshold is 1.

这个日志已出现,系统就会卡死,看门狗复位

尝试debug调试,总是调到没有使用的函数里面,函数地址0x00000xx开头。

解决方法

经过不断尝试,ps打印当前线程状态时,发现时间戳保存线程的最大使用率高达81%.一般来说都要控制在75%左右合适。

分析是不是应该堆栈不够导致系统卡死

将该线程从2048改为4096后,不会出现卡死问题了。线程的最大使用率变为51%

分析

flshdb在扇区都满的情况下,会进行Collect操作。这个操作是在当前线程完成的,会增加占用率。

然而这个运行操作并不是会频繁出现的,所以很难判断到是堆栈不够导致的问题。

建议

能否增加一个异步模式来专门执行gc与Collect操作?

就像ulog的异步线程的方式那样。

写入数据库并不要求实时性,只需要确保数据的准确就好了。

异步方式需要一个缓冲区,缓冲区满了才能传入数据,可能导致缓冲区未满时掉电,导致数据缺失了一部分。

但是这个情况,可以添加一个函数,立刻刷新缓冲区。然后给用户使用。 用户自己实现掉电保存与硬件。所以可以增加一个异步线程的选项,提供用户使用。看用户是选择实时,还是效率。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 看门狗
    +关注

    关注

    10

    文章

    559

    浏览量

    70733
  • STM32F429
    +关注

    关注

    0

    文章

    40

    浏览量

    10643
  • RTThread
    +关注

    关注

    8

    文章

    132

    浏览量

    40803
收藏 人收藏

    评论

    相关推荐

    外部中断误触发的原因分析和解决方法

    今天在写外部中断的程序的时候,发现中断特别容易受到干扰,我把手放在对应的中断引脚上,中断就一直触发,没有停过。经过一天的学习,找到了几个解决方法,所以写了这篇笔记。如果你的中断也时不时会误触发,可以对照找一下原因。
    的头像 发表于 11-23 17:09 3096次阅读
    外部中断误<b class='flag-5'>触发</b>的原因分析和<b class='flag-5'>解决方法</b>

    一种优雅解决MySQL驱动中虚引用导致GC耗时较长问题的方法

    NonRegisteringDriver 类有个虚引用集合 connectionPhantomRefs 用于存储所有的数据库连接,NonRegisteringDriver.trackConnection 方法负责把新创建的连接放入集合,虚引用随着时间积累越来越多,导致
    的头像 发表于 12-20 09:52 879次阅读

    接地网阻值偏大的原因及解决方法

    不足:   土壤湿度也是影响接地网阻值的重要因素之一。如果土壤湿度不足,那么就会导致土壤电阻增加,从而使得整个接地系统的电阻增加。   解决方法:增加土壤湿度或者采取其他措施来减小土壤电阻。   3
    发表于 06-17 09:19

    CC2640的SPI使用导致程序卡死

    CC2640的SPI使用,是参照这个网址中的方法做来的,发现使用TLwrite就会导致程序卡死,不使用TLwrite不卡死,请问是什么原因?方法
    发表于 03-22 14:37

    请问为什么AM3352 SD卡 mmcblk0: retrying using single block read导致系统卡死

    本帖最后由 一只耳朵怪 于 2018-6-21 09:00 编辑 开发过程中发现,人为割断data[3]模拟sd卡接触不良现象,导致系统卡死。log中会出现mmcblk0: retrying
    发表于 06-21 04:56

    EasyFlash 1CR墨盒的资料分享

    些情况下,原始的 EasyFlash1 是可行的方法EasyFlash 1CR是来自 Commodore 64/128 的墨盒,其功能与Thomas Giesel 的 EasyFlash
    发表于 06-29 06:23

    SPI Flash使用flashdb无法进行读写操作怎么办

    有用过 flashdb 的吗, 我这初始化啥的都好着的, 只有上电的适合能读到数据,完事儿就卡死
    发表于 09-29 11:25

    RK3399系统经常卡死的问题及其解决方法

    Platform: RK3399OS: Android 8.1现象:RK3399系统经常卡死问题11.RK3399死机并且看门狗无法正常工作,芯片温度一直上升解决方法:增加官方推荐的过热复位电路
    发表于 11-16 17:09

    flashDB / Easyflash触发GC导致系统卡死解决方法分享

    is 1, GC threshold is 1.这个日志已出现,系统就会卡死,看门狗复位尝试debug调试,总是调到没有使用的函数里面,函数地址0x00000xx开头。解决方法经过不
    发表于 11-21 15:04

    ISP串口下载时卡死解决方法

    根据问题复现时的现象以及代码调试,确定为卡死在 windows 操作系统的 USB 转串口设备的驱动中,也就是 USB 转串口设备出了问题。卡死时使用 USB 转串口设备,USB 转串口芯片为
    发表于 10-18 07:38

    光驱读盘能力差的解决方法一则

    光驱读盘能力差的解决方法一则 光驱使用久了就会出现有的光盘能读,有的光盘不能读,或是有的光盘读到一半就出现卡死的现象,
    发表于 02-24 13:38 765次阅读

    导致开关电源啸叫的六种情况及解决方法

    导致开关电源啸叫的六种情况及解决方法(深圳市中远通电源技术开发有限公司怎么样)-导致开关电源啸叫的六种情况及解决方法
    发表于 09-24 17:14 58次下载
    <b class='flag-5'>导致</b>开关电源啸叫的六种情况及<b class='flag-5'>解决方法</b>

    Systick_Handler B.卡死处理方法

    Systick_Handler B.卡死处理方法注:鄙人在学习国产GD32芯片和STM32芯片做嵌入式时候出现过单片机卡死在*.s启动文件Systick_Handler B.处现做系列总结
    发表于 12-03 15:21 21次下载
    Systick_Handler   B.<b class='flag-5'>卡死</b>处理<b class='flag-5'>方法</b>

    舵机使用外部电源供电导致舵机不转或者向一个方向转动直到卡死的原因和解决方法

    ,弄弄电源,C,干脆不转了。有问题,一定有问题。百度、搜狗、找到啦。问题原因外接电源时的接线图如下,导致没有共地,解决方法既然原因时没有共地那么就让它们共地好了我是这么解决的:PS:搞...
    发表于 01-06 16:40 1次下载
    舵机使用外部电源供电<b class='flag-5'>导致</b>舵机不转或者向一个方向转动直到<b class='flag-5'>卡死</b>的原因和<b class='flag-5'>解决方法</b>

    导致MySQL索引失效的情况以及相应的解决方法

    导致MySQL索引失效的情况以及相应的解决方法  MySQL索引的目的是提高查询效率,但有些情况下索引可能会失效,导致查询变慢或效果不如预期。下面将详细介绍导致MySQL索引失效的情况
    的头像 发表于 12-28 10:01 729次阅读