15. 模块裁剪
PikaScript模块,除了PikaStdLib标准库之外,其他所有的模块都支持一键裁剪
如下图中的CH32V103驱动模块,不需要的模块可以直接裁剪掉,那如果一个模块中有几个类是需要用的,可以按类进行精细裁剪吗,这也是可以的,后面会介绍。
15.1. 按照模块进行裁剪
按照模块进行裁剪非常简单,只要在main.py中删除import语句即可,没有被导入的模块会被预编译器自动裁剪。 以stm32g030c8的工程为例,默认的main.py是如下所示:
第一行是导入基础对象,基础对象由内核提供,不占用模块空间,不用裁剪。 第二行是标准库,不能裁剪。 而第三行STM32G0芯片模块和第四行PikaPiZero开发板的板上资源模块都是可以裁剪的。 编译运行,看到代码体积是48k+3k,51K左右。 image.png 取消导入PikaPiZero模块
再进行预编译和编译后的结果: 可以看到代码体积减少了到了46K,说明模块裁剪成功。 image.png 再取消导入STM32G0模块
代码体积减少到了36K image.png
15.2. 按照类进行裁剪
使用模块的继承功能,就可以按照类进行精细裁剪。 在main.py中直接导入的模块,处于运行时随时可用状态,因此所有的类都会被添加进工程。 而被其他文件间接导入的模块,预编译能够判断哪些是不会被用到的,因此只有用到的类会被添加进工程。 这样,我们就可以新建一个模块,从需要用到的模块里面继承所需的类,再只导入新建的模块,就可以裁剪掉模块里不需要用到的类了。
例如,STM32G0中有GPIO、Time、ADC、UART、PWM、IIC、lowLevel7个类,而我只用到了GPIO这个类。
就可以新建一个myDevice模块,然后从STM32G0中只继承GPIO类。
然后将main.py中import STM32G0改为 import myDevice
可以看到,和使用完整的STM32G0模块相比,代码体积减少到了43K image.png