一款自研Python解释器

项目简介:

PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。 入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入式实时操作系统编程语言类软件包。 在CH32V103 RISC-V开发板上完成了PikaScript的部署,并为CH32V103提交了PikaSciprt标准BSP和驱动模块包,并完成了交互式运行的驱动。

硬件说明:

RT-Thread使用情况概述:整个方案涉及的技术栈有:RT-Thread线程和定时器, 编译原理、字节码设计、虚拟机设计、PikaScript部署技术和驱动模块开发技术等等。通过这个作品,扩充了PikaScript的BSP支持列表,验证了PikaScript和rt-thread的兼容性,验证了PikaScript在小容量(64Kb)RISC-V架构的部署能力和兼容性。内核部分:使用了线程、定时器 。

软件包:PikaScript软件包硬件使用了RTT大赛提供的CH32V103开发板,使用了板上的LED资源用于指示脚本运行状态,为GPIO硬件开发了Python脚本模块,用于测试脚本驱动拓展功能。

软件说明:

0.摘要PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入式实时操作系统编程语言类软件包。本项目在CH32V103 RISC-V开发板上完成了PikaScript的部署,为CH32V103提交了PikaSciprt标准BSP和驱动模块包,并完成了交互式运行的驱动。

1.方案选型——CH32V103运行Python脚本,并不好办

首先我们需要选择一个能够在CH32上运行的嵌入式Python解释器。能够在flash为64Kb的RISC-V MCU上部署Python解释器,需要有极小的编译体积,还不能依赖于ARM架构的独享技术。首先排除通用Python解释器CPython,不说CPython需要依赖linux,单是体积就可以排除。其次在嵌入式领域大火的MicroPython技术是有可能选用的备选项,但是MicroPython在ARM平台需要最少128Kb的体积,而RISC-V平台的GCC编译器优化成熟度不如ARM平台,所以编译体积只会更大不会更小,所以MicroPython不能在本次的CH32V103平台部署。好了,不卖关子了,能够在CH32V103平台部署的Python解释器,只有我目前在开发的PikaScript超轻量级Python解释器,(如果还有其他方案,请批评指正,我麻溜修改)。虽然相对于MicroPython,PikaScript没有那么完整的标准库支持,但基本的运行时对象、控制流、交互式运行都是可以实现的,且PikaScript的跨平台能力非常好,在极限的依赖管理策略下,PikaScript只依赖LibC,在任何平台都几乎没有依赖缺失问题,或许还能够运行在FPGA软核中(理论上可行,未验证)。另外感谢Gitee提供的开源平台

相关推荐

  1. 文理解Python的全局解释锁(GIL)

    2024-04-13 10:22:05       52 阅读
  2. 20高级 Python 装饰

    2024-04-13 10:22:05       29 阅读
  3. 2. 使用 Python 解释

    2024-04-13 10:22:05       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 10:22:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 10:22:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 10:22:05       82 阅读
  4. Python语言-面向对象

    2024-04-13 10:22:05       91 阅读

热门阅读

  1. 【Django】必须登陆才能访问功能实现

    2024-04-13 10:22:05       39 阅读
  2. 【Vue 自定义事件】

    2024-04-13 10:22:05       35 阅读
  3. c语言中三个open,fopen,popen的区别

    2024-04-13 10:22:05       43 阅读
  4. 事件冒泡、事件捕获、事件委托

    2024-04-13 10:22:05       39 阅读
  5. 实现卡片中每一条数据key的右对齐

    2024-04-13 10:22:05       37 阅读
  6. FastAPI 是干啥的

    2024-04-13 10:22:05       37 阅读
  7. 使用React Context的一些优化建议

    2024-04-13 10:22:05       34 阅读
  8. 自定义注解加反射实现数据类型转换

    2024-04-13 10:22:05       33 阅读
  9. 博客永久链接与计数

    2024-04-13 10:22:05       35 阅读
  10. Android8.1 MTK平台 修改蓝牙默认名称

    2024-04-13 10:22:05       36 阅读
  11. q @ k运算及att = (q @ k.transpose(-2, -1))含义

    2024-04-13 10:22:05       33 阅读
  12. lambda表达式

    2024-04-13 10:22:05       36 阅读
  13. [yotroy.cool]记一次将SSH公钥添加到GitHub

    2024-04-13 10:22:05       29 阅读
  14. 学习笔记——一些数据转换脚本(Python)

    2024-04-13 10:22:05       31 阅读
  15. 面经学习(湖北航信实习)

    2024-04-13 10:22:05       32 阅读