# C 模块裁剪 PikaPython 模块,除了 PikaStdLib 标准库之外,其他所有的**模块都支持一键裁剪** 如下图中的 CH32V103 驱动模块,不需要的模块可以直接裁剪掉,那如果一个模块中有几个类是需要用的,可以按类进行精细裁剪吗,这也是可以的,后面会介绍。 ![](assets/1638631568309-cbc19553-75be-4915-900a-72fe700b4d16.png) ### 按照模块进行裁剪 按照模块进行裁剪非常简单,只要在 main.py 中删除 import 语句即可,没有被导入的模块会被预编译器自动裁剪。 以 stm32g030c8 的工程为例,默认的 main.py 是如下所示: ![](assets/1639281734520-d63c222e-6c15-46f6-9349-2aae5e3a22a1.png) 第一行是导入基础对象,基础对象由内核提供,不占用模块空间,不用裁剪。 第二行是标准库,不能裁剪。 而第三行 STM32G0 芯片模块和第四行 PikaPiZero 开发板的板上资源模块都是可以裁剪的。 编译运行,看到代码体积是 48k+3k,**51K**左右。 ![image.png](assets/1639281670087-0edcd6a5-c1ec-4eb7-aa13-b4af6f856774.png) 取消导入 PikaPiZero 模块 ![](assets/1639281716434-51e185a4-bbbc-4fe6-8867-9834b0973da1.png) 再进行预编译和编译后的结果: 可以看到代码体积减少了到了 **46K**,说明模块裁剪成功。 ![image.png](assets/1639281815845-56657902-ab07-409e-9a3f-f0197370c37c.png) 再取消导入 STM32G0 模块 ![](assets/1639281843772-333666fe-d348-4616-8f39-5ab63500e3c7.png) 代码体积减少到了 **36K** ![image.png](assets/1639281899582-c0e013e7-9e75-4faf-8c68-d6c2193a030f.png) ### **按照类进行裁剪** 使用模块的**继承**功能,就可以按照类进行精细裁剪。 在 main.py 中**直接导入**的模块,处于**运行时随时可用**状态,因此**所有的**类都会被添加进工程。 而被其他文件**间接导入**的模块,预编译**能够判断哪些是不会被用到的**,因此只有**用到的**类会被添加进工程。 这样,我们就可以**新建一个模块**,从需要用到的模块里面**继承**所需的类,再只导入新建的模块,就可以裁剪掉模块里不需要用到的类了。 例如,STM32G0 中有 GPIO、Time、ADC、UART、PWM、IIC、lowLevel 7 个类,而我只用到了 GPIO 这个类。 ![](assets/1639282316919-0450c010-004a-4d84-891a-14a6d0537e11.png) 就可以新建一个 myDevice 模块,然后从 STM32G0 中只继承 GPIO 类。 ![](assets/1639282420803-e73a65a4-2cd2-4bec-bb88-2cb2eae8cede.png) 然后将 main.py 中 import STM32G0 改为 import myDevice ![](assets/1639282444794-6ca987a5-05f6-4377-af99-718985fae914.png) 可以看到,和使用完整的 STM32G0 模块相比,代码体积减少到了 **43K** ![](assets/1639282647369-def83056-27c9-4d35-82f8-2720d9ae0767.png)