• 正文
  • 相关推荐
申请入驻 产业图谱

使用cc和对应skills实现MicroPython代码优化

04/29 11:37
964
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

这份指南会手把手教你,用 Claude Code 的自动化工具,实现 MicroPython 代码提示执行速度或减小内存占用。

Skill 源代码地址:https://github.com/FreakStudioCN/MicroPython_Skills

零、前置知识

一、前置安装

1.1 claude code 安装

关于 claude code 安装可以查看下面的文档:用 Claude 对 MicroPython 代码进行 AI 审查:零基础手把手教你

1.2 安装 Skill

下面,我们主要用到**/upy-opt-driver  /upy-slim-driver** :

/upy-opt-driver — 驱动性能优化:

    • 已规范化的驱动文件,按 GraftSense 性能优化指南改写,聚焦执行速度提升。

/upy-slim-driver

    — 驱动内存优化:

      已规范化的驱动文件,按 GraftSense 内存最小化指南改写,聚焦 RAM 占用降低。

    1.3.1 远程安装(国内不推荐)

    打开终端,复制下面这串命令,回车执行,把所有自动化工具一次性装完(只需要装一次):

    npx skillfish add FreakStudioCN/MicroPython_Skills upy-norm-driver
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-norm-main
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-gen-main
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-gen-readme
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-gen-pkg
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-norm-pkg
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-opt-driver
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-slim-driver
    npx skillfish add FreakStudioCN/MicroPython_Skills upy-pack-driver
    
    或
    
    for skill in upy-norm-driver upy-norm-main upy-gen-main upy-gen-readme 
                 upy-gen-pkg upy-norm-pkg upy-opt-driver upy-slim-driver upy-pack-driver; do
      npx skillfish add FreakStudioCN/MicroPython_Skills $skill
    done
    

    安装过程会自动下载工具,等终端提示安装完成就可以了。

    1.3.2 本地安装(国内推荐)

    克隆本仓库(或直接下载 ZIP 解压):

    git clone https://github.com/FreakStudioCN/MicroPython_Skills.git
    

    将 skill 目录复制到 Claude Code 的 skills 目录,本地 skills 目录固定为 ~/.claude/skills/,根据操作系统展开如下:

    macOS / Linux

    # 安装单个 skill
    cp -r MicroPython_Skills/upy-norm-driver ~/.claude/skills/
    
    # 安装全部 skill(在克隆目录内执行)
    cd MicroPython_Skills
    for skill in upy-norm-driver upy-norm-main upy-gen-main upy-gen-readme 
                 upy-gen-pkg upy-norm-pkg upy-opt-driver upy-slim-driver upy-pack-driver; do
      cp -r $skill ~/.claude/skills/
    done
    

    Windows(PowerShell**)**:

    # 安装单个 skill
    Copy-Item -Recurse MicroPython_Skillsupy-norm-driver $env:USERPROFILE.claudeskills
    
    # 安装全部 skill(在克隆目录内执行)
    cd MicroPython_Skills
    $skills = @("upy-norm-driver","upy-norm-main","upy-gen-main","upy-gen-readme",
    "upy-gen-pkg","upy-norm-pkg","upy-opt-driver","upy-slim-driver","upy-pack-driver")
    foreach ($skillin$skills) {
      Copy-Item -Recurse $skill$env:USERPROFILE.claudeskills
    }
    

    重启 Claude Code,skills 即生效。

    1.3 小白必看:避坑指南

    路径里绝对不能有中文 / 空格!

    比如 G:我的驱动 会导致命令出错,改成 G:my_drivers所有确认命令都复制终端里的提示!

    不要自己打字,比如「确认写入原文件 G:mpr121_projectmpr121.py」,直接复制粘贴最保险,避免打错字

    不要中途关掉终端!

    每个步骤都要等它跑完,出现「确认写入 / 继续?」的提示再操作

    出错了怎么办?

    如果中途想改之前的步骤,输入 重做当前步骤,工具会重新跑这一步,不会影响已经做好的文件

    文件权限问题?

      •  Windows 用户如果提示权限不足,把文件夹放到 D 盘 / G 盘,不要放到桌面或系统文件夹里,右键文件夹「属性 - 安全」,给当前用户加上「完全控制」权限

    依赖库找不到?

    如果你的驱动用到了第三方库,工具会自动帮你查找 upypi 上的包,如果找不到会标注出来,你可以手动去 upypi 确认包名,修改 package.json 里的依赖即可

    打包失败?

       检查文件夹里的文件是否齐全:必须有驱动文件、main.py、README.md、package.json,缺失的话要先完成对应的步骤

    1.4 示例文件

    下面是两个有待优化的文件:

    signal_filter.py 信号

    main.py测试脚本:

      生成 200 个模拟采样数据,调用 SignalFilter 进行批量处理、滤波、统计分析,循环内字符串拼接打印结果。

    查看原文档下载:https://f1829ryac0m.feishu.cn/wiki/HnyXwwPCXiHucgkhodzcZ9pfnTe?from=from_copylink

    二、完整操作步骤

    2.1 原始代码测试

    这里,我们将先运行未优化的 main.py 和 signal_filter.py,获取性能基准数据。

    将 main.py 和 signal_filter.py 上传到你的 MicroPython 设备(如 ESP32-S3),通过 Thonny 或串口工具运行程序。

    运行结果如下:

    >>>%Run-c$EDITOR_CONTENT
    
    MPY:softreboot
    FreakStudio:TestingSignalFilterdriver
    Generated200testsamples
    ==========PerformanceReport==========
    Time:32827us(32ms)
    Memory used:55552bytes
    Memory free:8259328bytes
    Statistics:min=5max=509avg=165.0
    Error codes: [1, 2, 3, 16, 17, 18, 32, 33]
    ==========PerformanceReport==========
    Time:34846us(34ms)
    Memory used:4016 bytes
    Memory free:8308000bytes
    Statistics:min=5max=509avg=165.0
    Error codes: [1, 2, 3, 16, 17, 18, 32, 33]
    ==========PerformanceReport==========
    Time:34627us(34ms)
    Memory used:4000 bytes
    Memory free:8308016bytes
    Statistics:min=5max=509avg=165.0
    Error codes: [1, 2, 3, 16, 17, 18, 32, 33]
    ==========PerformanceReport==========
    Time:34757us(34ms)
    Memory used:4000 bytes
    Memory free:8308016bytes
    Statistics:min=5max=509avg=165.0
    Error codes: [1, 2, 3, 16, 17, 18, 32, 33]
    Programinterruptedbyuser
    Cleaningupresources...
    Programexited
    >>>
    

    我们可以看到:

    基础测试数据:生成测试样本数:200 个信号统计值(固定):最小值 = 5,最大值 = 509,平均值 = 165.0错误码(固定):[1, 2, 3, 16, 17, 18, 32, 33]

    执行耗时数据:首次处理耗时:32827 us (32 ms)后续稳定耗时:34627~34846 us (34 ms)平均运行耗时:≈34 ms

    内存占用数据:首次内存使用:55552 字节稳定后内存使用:4000~4016 字节首次空闲内存:8259328 字节稳定后空闲内存:8308000~8308016 字节

    2.2 使用 upy-opt-driver 进行性能优化

    我们先通过 upy-opt-driver,聚焦执行速度提升,解决上述耗时瓶颈。

    打开你的 MicroPython 项目目录,在里面运行终端,并且输入 claude:

    然后输入下面的命令:

    /upy-opt-driver 【你需要优化的py文件目录】
    

    我们这里输入的是:

    /upy-opt-driver G:bmp280
    

    这里,我们直接复制指令**:**

    确认对全部文件执行优化
    

    工具会输出一份结构化的优化报告,包含每个文件的优化项、优先级和提速说明,例如:

    检查无误后,复制指令**:**

    确认写入原文件
    

    点击回车:

    将工具生成的优化代码上传到设备中,开始测试:

    如果报错,将报错信息返回给 claude code

    必要时,我们可以人工介入,说明哪些地方需要修改:

    也可以让 claude code 通过 mpremote 连接对应单片机的 COM 接口自动 Debug

    我们可以看到,它可以读取 REPL 中输出信息,自动 Debug

    我们可以看到调试成功:

    输出结果如下:

    FreakStudio:TestingSignalFilterdriver
    Generated200testsamples
    ==========PerformanceReport==========
    Time:31800us(31ms)
    Memory used:45904bytes
    Memory free:8268880bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:31698us(31ms)
    Memory used:45872bytes
    Memory free:8267712bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:32567us(32ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:31703us(31ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:32019us(32ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:32098us(32ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:31692us(31ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:31836us(31ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:32134us(32ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:32370us(32ms)
    Memory used:45872bytes
    Memory free:8267696bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    (24s·timeout30s)
    

    我们可以看到:

    测试样本:200 个

    执行耗时:31692~32567 us(31~32 ms),平均 32 ms

    内存占用:使用 45872~45904 字节,空闲 8267696~8268880 字节

    数据统计:最小值 5,最大值 509,平均值 165

    错误码:b'x01x02x03x10x11x12 !'

    2.3 使用 upy-slim-driver 进行内存优化

    输入下面的命令:

    /upy-slim-driver 【你需要优化的py文件目录】
    

    我们这里输入的是:

    /upy-slim-driver G:bmp280
    

    接着,复制命令:

    确认对全部文件执行内存优化
    

    检查无误后,复制命令:

    确认写入并继续下一个文件?
    

    检查无误后,复制命令:

    确认写入?
    

    将工具生成的优化代码上传到设备中,开始测试:

    输出如下:

    >>>%Run-c$EDITOR_CONTENT
    
    MPY:softreboot
    FreakStudio:TestingSignalFilterdriver
    Generated200testsamples
    ==========PerformanceReport==========
    Time:22184us(22ms)
    Memory used:26704bytes
    Memory free:8288032bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22347us(22ms)
    Memory used:26672bytes
    Memory free:8286896bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22346us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22336us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22351us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22350us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22344us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22347us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22350us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22347us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22349us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    ==========PerformanceReport==========
    Time:22340us(22ms)
    Memory used:26672bytes
    Memory free:8286864bytes
    Statistics:min=5max=509avg=165
    Error codes:b'x01x02x03x10x11x12!'
    

    数据总结如下:

    测试样本:200 个

    执行耗时:22184~22351 us,稳定运行 22 ms

    内存占用:使用 26672~26704 字节,空闲 8286864~8288032 字节

    数据统计:最小值 5,最大值 509,平均值 165

    错误码:b'x01x02x03x10x11x12 !'

    2.4 优化前后对比测试

    统一基准:200 组测试样本,信号统计结果一致(最小值 5、最大值 509、平均值 165)

    三、进阶优化技巧

    3.1 upy-opt-driver(性能优化)

    3.2 upy-slim-driver(内存优化)

    四、避坑指南

    4.1 upy-opt-driver(性能优化)

    4.2 upy-slim-driver(内存优化)

    原文链接:https://f1829ryac0m.feishu.cn/wiki/HnyXwwPCXiHucgkhodzcZ9pfnTe?from=from_copylink

    相关推荐