micropython适配
源码仓库:
https://github.com/embeddedboys/lv_micropython
本文将记录micropython的移植过程,由于我们是第一次接触micropython的移植,所以第一版的移植就是瞎搞,然后后面重构,进行了标准化,我们将开发记录保存在此处,供以后参考。
本文以lvgl v8版本为例进行说明,文档中提及的修改可能不够全面,用户可以再翻看下git提交记录。
如何编写一个micropython模块#
其实整个移植过程主要是为运行的脚本提供对应的模块,我们提供了一个名为 led 的模块来帮助理解模块的编写,源码位于:lv_micropython/ports/rp2/led.c
它可以在py脚本中这样调用
第一版移植#
我们将所有的文件都放到了ports/rp2
下,具体改动可以查看这一次提交0f1ab6be40860df717dce0be66e5eb9368b4d1b4
这样虽然方便,但是当我们有更多的板子需要适配时,就会变得混乱,而且对rp2的cmakelist改动太多,最主要的原因还是放错了地方,模块的编写应该在lib/lv_bindings
下
标准化#
我们对 micropython 和 lv_binding_micropython 都进行了修改,所以在此分开说明。 在查看源码时,先切换到 release/v8
分支。
lv_binding_micropython
作为git module位于 micropython
工程的 lib/lv_bindings
micropython#
https://github.com/embeddedboys/lv_micropython
1. 修改 mpy工程的 MICROPY_GC_HEAP_SIZE,从预分配改为根据使用情况在ld文件中确定#
好像是GC申请的太大,申请显示FB的时候内存爆了,时间过了太久我已经忘记当时的具体原因了。
mpy后面的新版本已经解决了这个问题。
2. 关闭 ports/rp2/Makefile 中的cmake cache机制#
因为我们要给多个板子适配,启用cache机制会导致之前的配置依然生效
3. 修改 ports/rp2/CMakeLists.txt ,引入我们需要的宏及文件#
4. 提供一个build脚本,用来编译固件#
因为编译mpy涉及的步骤比较多,所以写到脚本里方便些,在make的最后一步传入 DISP_BOARD 参数即可调整移植的显示拓展板,默认值是 PICO_DM_QD3503728
lv_binding_micropython#
https://github.com/embeddedboys/lv_binding_micropython
1. 修改lv_conf.h配置文件,将 LV_COLOR_DEPTH hardcode 为 16,虽然可以在CMakeLists.txt中添加宏,但是目前我们没这样做。#
2. 在 driver/rp2 下创建一个名为 pio 的目录,其中放置 pio 相关的驱动,例如 pio_i80,这些文件都是从 C 工程中直接拿过来的,跟micropython工程没有关系,所以不作说明。#
3. 在 driver/rp2 下创建板级目录 PICO_DM_QD3503728,目录文件如下#
2.1 board.cmake#
这个文件里定义了 c 文件中需要的宏,例如引脚定义,是否启用PIO、DMA,分辨率等,需要单独说明的是
在这里添加需要的pio文件进编译系统。
2.2 ft6236.c#
这个文件实现了一个ft6236的模块,提供了两个函数,一个初始化函数,一个读取触摸函数。
2.3 ili9488.c
这个文件实现了一个 ili9488 的驱动,提供初始化、销毁、刷新、fb申请函数
然后就可以像 ili9488_test.py 中那样引用这两个模块,注册到lvgl的回调函数里。