KDocs 研发资料库
  • 屏融合应用方案入口汇总
  • JL701N穿戴客述问题FAQ
  • JL701N穿戴类补丁list
  • 手表软件调试
  • JL701手表硬件设计注意事项 总结
  • 手表烧录_升级工具说明
  • 手表量产相关
  • 生产烧录KEY及代码和升级代码
  • AC695N系列手表SDK开发指南
  • JL7012A手表-SDK入门指南V1.0
  • 穿戴手表JL701N-入门到进阶开发指导
  • 彩屏充电仓JL701N LVGL入门到进阶指导文档
  • AC695N手表软硬件问题整理
  • JL701N手表软硬件问题整理
  • 701n手表SDK共性问题汇总
  • UI效果参考demo文档
  • 屏幕触摸驱动相关参考
  • 穿戴类支付宝支付流程
  • AC701N_PMU_介绍
  • 经典蓝牙相关接口说明
  • music应用详细设计说明书
  • music_player接口设计说明文档
  • PO声测试以及处理方法
  • DAC性能测试指南
  • 杰理串口升级规范
  • AC696N串口升级说明
  • AC695N系列手表UI开发指南
  • AC695N添加升级UI说明文档.
  • UI布局工具使用说明
  • UI接口设计说明书
  • UI工具快速使用说明
  • 701N_UI编辑工具用户手册
  • UI工程源文件升级工具使用说明
  • 701N屏幕驱动配置说明
  • JL701N 2D图形硬件加速接口使用说明
  • JL701_watch常用例子参考
  • JL_WATCH_SDK UI相关工具使用文档
  • 智能手表音频 设计调试手册 V1.2
  • AC695X_AC696X_AD697X 常见通话问题处理参考资料
  • 701手表 PCBA产测工具使用说明书 V1.0
  • 杰理定频问题排查2021.1.26
  • BQB5.4 20231007
  • 各类概率性死机调试解决指南
  • 不开机问题处理汇总(仅供参考)
  • 蓝牙搜索不到问题处理汇总(仅供参考)
  • 样机发烫(仅供参考)
  • 蓝牙音乐卡顿问题处理汇总(仅供参考)
  • 充电问题处理汇总(仅供参考)
  • 触摸问题处理汇总(仅供参考)
  • 功耗调试指导
  • JL701N穿戴客述问题FAQ
  • 701N 开发板新屏幕驱动修改
  • AC701 nandflash A8图片显示问题
  • 支付宝乘车码接入资料
  • 多国语言及字库使用指南
  • 查看C程序Flash 和RAM 资源占用说明文档
  • 701N_SDK3.0.1_OPUS_OGG 编解码
  • 蓝牙在线调eq说明
  • BR EDR BLE 蓝牙性能测试配置方法_
  • BLE-HID
  • BLE-HID 调试文档
  • 【问题】701v301外置flash播放wts提示音
  • 本地录音开启及调试
  • 死机分析
  • 表盘传输APP层的压缩算法
  • 功能模版:JL701_V301_UI资源使用FAT文件系统demo
  • JL7013+4G CAT1 参考设计原理图
  • 吾爱4G模组+JL701接口说明
  • (电脑一拖多)手表升级dongle工具使用补充说明
  • 蓝牙接口使用说明
  • ble 开发流程
  • 彩屏仓功耗优化
  • 彩屏仓补丁list
  • 更新字库步骤
  • 支付宝硬件接入资料

概率撞指针死机补丁

📎 原始文档:https://www.kdocs.cn/l/cjkH6JZ5YiwH 概率撞指针死机补丁

  1. 补丁文件链接: 彩屏仓SDK_V200_撞指针补丁(2024_06_25).7z

  2. 适用版本: 彩屏仓sdk v200

  3. 问题说明: 调用lv_obj_is_valid后无法判断控件句柄是否存在而导致其他操作越界。lv_obj_is_valid接口并不可靠,后续sdk均不使用该接口,也不建议用户使用该接口。若想要判断当前控件是否被加载,在不动态增删控件的情况下,可以将父控件是否为空,作为控件未被加载与否的依据,动态增删的情况下,可以将当前控件是否为空来判断控件未被加载与否,前提是调用lv_obj_del后对指针置NULL。打上该补丁后会将sdk中的lv_obj_is_valid接口去掉,同时用户需要注意自己是否有用到该接口,如有请去掉。

  4. 补丁包说明: image 解压后能看到文件如下,包括补丁文件和一个.patch文件,若有使用git对项目进行管理,且git仓库建立在\ac701n_watch_release_v2.2.0\code\sdk路径下,可以将soc.patch拷贝到.git同级目录,进入git bash输入git apply pointer.patch自动打补丁,如下:
    image 若并未使用git进行项目管理,本补丁包提供具体差分修改,此时可以根据补丁包里面的补丁文件,通过对比工具将修改同步过去。

  5. 主要修改内容: 注意:
    该章节只是把关键修改列出,以及对部分修改进行说明,以方便用户打补丁后进行review,不代表在这里会放出全部修改!!!故请勿把此章节内容当成完整补丁去进行修改,若要按照完整补丁进行修改,还请参考第四章的指示去完成。

原因分析:

lvgl的控件创建基本都存在malloc申请内存的操作,并且释放控件时会存在free操作,那么有可能存在A控件创建时申请到0xaabb(举个例子),再将A控件释放,创建控件B,而B同样申请到0xaabb的情况,该情况下我们称为“撞指针”。那么在这种情况下,我们用lv_obj_is_valid(Obj_A)来判断是否被创建则不靠谱,因为此时该接口判断的0xaabb地址实际上是说明B控件被创建,而不是A控件被创建,故直接直接换另一种相对可靠的方式去操作,即使用父控件的句柄进行判断,但这种做法的成立的前提是,在删除控件时需要手动置NULL,以及不动态创建子控件。

  1. 将lv_obj_is_valid接口去掉 image 这里只是以壁纸为例,举个例子,用户需要把自己用到的lv_obj_is_valid接口全部去掉。

  2. lv_obj_del后主动置NULL image 同理,这里也只是举个例子,用户需要将自己所有lv_obj_del后添加主动置NULL的操作。

  3. 添加电源检测接口 image 避免直接寻址时异常。

  4. 去掉电源检测接口的static imageimage