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

Micropython RPI-PICO 随记-LVGL实战3 综合调试

内容简介

  • 这一篇是综合调试,主要包括服务层调试,显示层联调,以及问题备忘

服务层调试

  • 做BS系统习惯了,发现在单片机内存、存储捉真见肘的条件下,真是害死自己。我一共分了几个部分,1、驱动层,放到lib文件夹下;2、功能层,包括网络处理、文件处理、外控处理、算法处理等;3、服务层,业务处理;4、显示层,调用服务层与操作者互动。
  • 这个服务层的调试还是比较顺利的,各种操作都是基于理想情况,不用考虑过多的问题,灯亮了,数记了,上传成功了就算通过了。有个卡点是处理报警事件(灯闪蜂鸣),这个需要单独主线程调度。
  • 在事件处理过程中,看了眼内存不停的减少,增加了垃圾回收,效果稳定
gc.collect()

显示层调试

  • 这层的调试就要了命了,引入包、编写完代码执行,直接就内存爆了(开机内存只有205kb!)。使用了mpy,效果一般,最后采用的策略是,找到内存占用大户(服务层、lvgl显示屏初始化这两个是大头),调整加载顺序并立即回收,最后调试,内存稳定还剩下21kb。我的顺序是:引业务相关包,服务层初始化,引lvgl包相关包,初始化lvgl,加载屏幕,加载字体。如何找内存大户?代码如下:
import gc

print("开机内存:", gc.mem_free() / 1024, "KB")
  • 不影响主线程操作,使用lvgl自带的定时器:
timer1 = lv.timer_create_basic()
timer1.set_period(1000)
timer1.set_repeat_count(-1)
timer1.set_cb(lambda t: getTime(timer1))
  • 因为加入了人机互动,各种问题就来了,没反应、乱码、显示组件颜色等等,依次解决就好,重要的问题的主线程执行过程中的事件调度问题,要拆分好哪些是实时的,哪些是定时,对于定时的采用定时器就可以了,但对于实时性的就需要谨慎对待的,可能需要一杆子直接看到驱动层里边有没有sleep、wait、timeout之类的,这些容易引起连锁反应,比如设置的看门狗超时时间是2秒,超时没有及时喂狗,那程序就崩了。
  • 这里遇到最棘手的问题是,音频模块一播放,屏幕就闪烁,调试了一下午,最后发现是接地问题,我是引出了一根接地线,接入了一个面包板的接地,然后用一根线连接另一个面包板的接地。解决方式是,从电源引出两组电源与接地,分别接这两个面包板,音频模块接A面包板,屏幕模块接B面包板就解决了。

问题备忘

  • 树莓派 pio 编程速度慢问题

http://www.kler.cn/a/550373.html

相关文章:

  • Java中CompletableFuture异步工具类
  • 微信云开发小程序音频播放踩坑记录 - 从熄屏播放到iOS静音
  • 碰一碰发视频@技术原理与实现开发步骤
  • 在docker中部署fastdfs一些思考
  • 2步破解官方sublime4最新版本 4192
  • Dest1ny漏洞库: 美团代付微信小程序系统任意文件读取漏洞
  • 基于 Python typing 模块的类型标注
  • 力扣hot100_矩阵_python版本
  • ORB-SLAM3的源码学习:TwoViewReconstruction通过两幅图像来实现重建
  • 2024Selenium自动化常见问题及解决方式!
  • 【云原生】最新版Kubernetes集群基于Containerd部署
  • STM32 PWM脉冲宽度调制介绍
  • 又是阿里云npm install报错:ENOENT: no such file or directory, open ‘/root/package.json‘
  • Kubernetes控制平面组件:etcd常用配置参数
  • 抢占川南数字枢纽高地:树莓集团将翠屏区位优势转为产业胜势
  • JavaScript数组-数组的概念
  • Blackbox.AI:高效智能的生产力工具新选择
  • Web项目测试专题(七)安全性测试
  • (四)Axure学习图文教程
  • 如何提高网站在百度中的权重?