Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一款自研Python解释器

一款自研Python解释器

作者头像
芯动大师
发布于 2025-05-19 09:39:40
发布于 2025-05-19 09:39:40
820
举报
文章被收录于专栏:防止网络攻击防止网络攻击

项目简介:

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提供的开源平台,PikaScript刚刚被Gitee评委大佬们选入GVP——最有价值开源项目,所以如果你现在打开Gitee首页,大概率可以看到PikaScript的金色牌牌。

PikaScript还入选了rt-thread软件包,rt-thread真的是非常有活力的开源社区。

PikaScript严苛的依赖管理策略,使得部署非常轻松,这是跨平台,易部署的特点。但是单纯的易部署并没有什么用,如果难以拓展功能,就只是一个花瓶而已。我们知道在MCU开发领域,一直是C语言的天下,C语言的生态占据MCU开发的80%以上,大部分MCU都有厂家提供的C语言开发套件,因此MCU平台的Python解释器,最重要的拓展手段,就是绑定C语言的原生库,将C语言库绑定为Python模块,这通常被称为Python的C模块。为MicroPython绑定C语言模块与通用的CPython类似,需要将C库编译为静态库,再进行链接,链接时需要手动注册许多全局表,且制作C模块的过程中需要使用大量linux平***有的工具,这对于以Windows平台开发为主的MCU工程师来说,门槛很高。而PikaScript可以在MCU工程师熟悉的Windos平台完成C模块的开发,通过自研的模块预编译器,能够自动完成模块的注册工作,C模块的开发者需要提供的仅仅是一个用Python写成的模块的调用API而已,预编译器会自动将这个Python文件预编译为C文件,完成模块的链接和注册。而只要使用正确的命名,原生的C的函数就能够被自动注册进模块中,供解释器调用,也不需要编译静态库。让PikaScript在CH32V103跑起来,意思也就是开发一个能在CH32V103运行的PikaScript固件。我们先看一下一个PikaScript固件有哪些部分。

在图中标注黄色的部分是我们需要制作的,而绿色部分是跨平台的,我们只需要拉取源码进行编译即可,不需要修改。从下往上看,首先是需要一份PikaScript的BSP,BSP也就是板级支持包,这通常只要将厂商提供的MCU的标准库稍加整理即可获得。然后是PikaScript的启动器,这包含了固件入口main.c,以及基本的设备初始化代码,包括对printf的支持。有了BSP和启动器,就已经可以运行PikaScript的固件了,只不过还只能使用PikaScript提供的标准库功能和Python的基本语法,还不能使用MCU上搭载的外设资源。为了使用CH32V103的外设资源,我们还需要开发CH32V103的驱动模块,在这个项目中,我们开发了GPIO的驱动模块和基于rt-thread tick定时器的延时模块。最上层的就是我们要运行的Python脚本了,模块预编译器也可以处理Python脚本,根据脚本中导入的模块来自动裁剪固件,在脚本中没有import的固件会被自动裁剪掉,我们可以在main.py中选择要加入固件的模块,以及编写系统初始化后最先运行的Python脚本,将其烧录进固件中。

2.制作BSP和启动器——先跑起来再说

BSP通常是用芯片的原厂提供的例程制作的,在这个项目中,我们就使用CH32V103的官方例程中的uart_printf和MounRiver River Studio生成的rt-thread模板来制作。完成了对rt-thread模板的一些剪裁之后,再加入printf的初始化函数,对项目稍作整理,BSP部分就完成了。PikaScript的启动器的制作也比较简单,在main.c中添加#include “pikaScript.h”并调用pikaScriptInit()函数即可启动PikaScript。pikaScript.h和pikaScriptInit()都是由预编译器自动生成的,在制作启动器之前,需要拉取PikaScript的源码。PikaScript官方(其实就是我自己)提供了一个包管理工具,只需要编写requestment.txt,就可以从gitee中自动拉取相应版本的源码和模块。在拉取内核源码时,预编译器也会自动被拉取下来,我们在main.py中写入import PikaStdLib,然后用我们使用拉取下来的预编译器进行预编译,就能得到pikaScriptInit()函数了。包管理工具不仅可以拉取内核,还可以拉取模块,也就是说我们自己制作的CH32V103的驱动模块,也可以挂到PikaScript模块库中,进行自动拉取。

BSP和启动器的制作我录制了一个视频教程,想要了解细节或者想自己制作BSP的大佬可以看视频了解。PikaPython 中级 RISC-V部署Python引擎PikaScript CH32V103R8_哔哩哔哩_bilibili

3.制作CH32V103的驱动模块

接下来我们制作CH32V103的驱动模块,使得CH32V103上面的外设资源能够被Python脚本调用到。在这个项目中,我们制作了一个PikaScript的标准设备驱动,什么是标准设备驱动呢?我们先从其他的脚本技术说起,比如MicroPython,并没有统一的外设调用API,这使得用户在使用不同的平台时,都需要重新学习API,比如下面这个是MicroPython在STM32F4平台驱动GPIO的代码。

这个是ESP8266的

可以明显看到在选择pin的管脚时,一个用的是字符串,而另一个用的是整型数,驱动的API标准很混乱。有没有什么办法,能够统一外设的API,使得用户只需要熟悉一套API,就能够在任意平台通用呢?方法是有的,就是PikaStdDevice标准设备驱动模块!

PikaStdDevice是一个抽象的设备驱动模块,定义了所有的用户API,而各个平台的驱动模块只要从PikaStdDevice继承,就能够获得一模一样的用户API,而PikaStdDevice内部会间接调用平台驱动,通过多态特性重写底层的平台驱动,就可以在不同的平台工作了!以GPIO模块为例,以下是PikaStdDevice定义的用户API。

以下是PikaStdDevice需要重写的平台驱动

而我们要制作的CH32V103的GPIO模块,就从标准驱动模块中继承。

通过这个方法,我们就可以让STM32的驱动模块、CH32的驱动模块、ESP32的驱动模块有着一模一样的用户API!用户只要熟悉了一套API,就可以轻松使用支持了PikaScript标准驱动模块的所有平台!这才是真正的跨平台!下面是部分被注册在驱动模块里面C原生驱动函数。

驱动模块的开发,我也制作了两个视频,供想要了解细节的大佬们参考。

PikaPython 中级 驱动模块开发01 最简单的模块_哔哩哔哩_bilibili

https://www.bilibili.com/video/BV1Jr4y117Z8

4.支持交互式运行

PikaScript不依赖文件系统,只要传入字符串就可以运行,所以只要制作支持字符串读取的串口驱动,就可以支持交互式运行了!下面是本项目中支持交互式运行的驱动代码。

5.main.py初始化脚本

最后我们编写一段用Python写成的初始化脚本,在固件启动后运行,初始化GPIO,并且获得一个系统对象,用于提供延时功能。在初始化结束后,led闪烁10次,并打印hello pikascript!编写好初始化脚本后,用预编译器就可以集成在固件中了。

下面是预编译器生成的初始化函数。

项目地址:PikaScript-CH32V103参赛项目仓库:

李昂/ch32v103-pika

PikaScript总仓库:

pikapython: PikaPython 是一个完全重写的超轻量级python引擎,零依赖,零配置,可以在少于4KB的RAM下运行(如stm32g030c8和stm32f103c8),极易部署和扩展

GitHub - pikasTech/PikaPython: An ultra-lightweight Python interpreter that runs with only 4KB of RAM, zero dependencies. It is ready to use out of the box without any configuration required and easy to extend with C. Similar project: MicroPython, JerryScript.

演示效果:在演示视频中,演示了PikaScript的启动和交互式运行,包括:1.测试了PikaScript的Python脚本交互式运行功能。2.使用led对象的high()方法和low()方法,控制IO的电平,进而控制LED灯3.测试了PikaScript解释器对Python变量的动态创建的支持。4.测试了PikaScript对Python标准库函数print的支持,包括打印整型数和字符串数。5.测试了PikaScript解释器对运算符以及组合运算的支持。6.测试了PikaScript解释器对条件运算符的支持和对控制流的支持。7.测试了PikaScript对多行Python脚本交互式运行的支持。8.测试了sys对象的delay()系统方法,该方法基于rt-thread延时函数,验证了与rt-thread操作系统的兼容性。9.循环打印1-1000整型数,测试了脚本的运行速度。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一款自研Python解释器
PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。 入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入式实时操作系统编程语言类软件包。 在CH32V103 RISC-V开发板上完成了PikaScript的部署,并为CH32V103提交了PikaSciprt标准BSP和驱动模块包,并完成了交互式运行的驱动。
芯动大师
2024/04/15
1430
嵌入式行业中,哪款RTOS商业应用最广泛?
在嵌入式行业中,商用RTOS的选择高度依赖于应用场景、实时性需求、生态支持及成本等因素。
不脱发的程序猿
2025/03/03
2710
嵌入式行业中,哪款RTOS商业应用最广泛?
教你动手移植RT-Thread到国产MCU
摘要 现在芯片价格不断上涨,国内很多厂商也在不断的找替换方案。以ST为例,一个芯片涨了十几倍。蛋疼。。。。 最近刚好有机会拿到国产芯片MCU--兆易创新的评估板(GD32350R)。板载资源如下: 硬件描述芯片型号GD32F350R8T6CPUARM Cortex M4主频108M片内SRAM16K片内FLASH64K下载器GD-Link 拿到这个板子,首先肯定是去看看RT-THREAD是否已经包含这个BSP了,答案:没有这个GD32F350系列的BSP。那必须把他移植个RTT,然后PR一个BSP上去才
Rice加饭
2022/05/10
1.4K0
教你动手移植RT-Thread到国产MCU
在 RISC-V 芯片 GD32V 上运行 RT-Thread
去年九月份的时候 RT-Thread 的 Andy Chen 组织定做了一块 GD32V 开发板,托 Andy 的福,我也搭车买了一块。
HackforFun
2020/04/27
1.3K0
STM32通用Bootloader——FOTA
固件升级,通常称为 OTA(Over the Air)升级或者 FOTA(Firmware Over-The-Air)升级,即固件通过空中下载进行升级的技术。
AIoT-KK
2020/07/13
6.9K0
STM32通用Bootloader——FOTA
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS简介
全志T113-i是一款双核Cortex-A7国产工业级处理器平台,并内置玄铁C906 RISC-V和HiFi4 DSP双副核心,可流畅运行Linux系统与Qt界面,并已适配OpenWRT系统、Preempt Linux系统。
阿志小管家
2024/11/19
5090
全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS简介
中科蓝讯AB32VG1 RISC-V开发板来了!
近日,国内领先的自主物联网操作系统(RT-Thread)厂商睿赛德科技联合其高级会员国内领先RISC-V物联网芯片公司中科蓝讯正式发布基于AB32VG1 RISC-V评估板,AB32VG1评估板原生搭载RT-Thread物联网操作系统,基于RT-Thread Studio提供SDK,并配备了数百页开发实践指南,践行为开发者提供易获取、易用的RISC-V开发平台的初心。
杨源鑫
2021/07/07
1.3K0
中科蓝讯AB32VG1 RISC-V开发板来了!
千呼万唤始出来——uFUN开发板2.0开箱评测
今年3月,我参与了面包板社区组织的第一批uFUN开发板评测活动,并有幸能获得试用机会,那是我第一次了解到uFUN这个项目及背后的故事,4月份,uFUN 2.0版本来了,收到了张工送的一块样板,后来又收到一块量产板,非常感谢。其实开发板很早就收到了,也玩了一段时间,早就计划着写一篇开箱评测,正好最近面包板正在开展新版uFUN的评测活动,我也来参与一下,写写停停,终于写完了,以下内容仅仅是我个人的观点,有错误的地方欢迎各位朋友指正、互相交流学习!
单片机点灯小能手
2020/07/17
9310
千呼万唤始出来——uFUN开发板2.0开箱评测
沁恒RISC-V开发板CH32V103-EVT评测
从2014年起,中国的互联网圈把10月24日定为程序员节,到今年2021年已经是第1000个程序员节了。祝各位开发者节日快乐!
单片机点灯小能手
2021/10/26
2.6K0
沁恒RISC-V开发板CH32V103-EVT评测
rt-thread
在嵌入式系统与物联网(IoT)领域,实时操作系统(RTOS)是不可或缺的核心技术之一。RT-Thread 是一个功能强大且开源的 RTOS,专注于为物联网设备和嵌入式应用提供灵活的开发支持。它具有模块化设计、高性能和广泛的硬件兼容性,是开发者构建智能设备的理想选择。
阿超
2025/04/27
1820
RT-Thread 的 CPU 固件移植理解
在嵌入式领域有多重不同的 CPU 架构,我们知道 RT-Thread 是支持不同架构的嵌入式操作系统,我们先来大概看一下 RT-Thread 的架构。
苏州程序大白
2022/04/14
1K0
RT-Thread 的 CPU 固件移植理解
基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0工业评估板——Linux应用开发手册
本文主要介绍TL3562-MiniEVM评估板的AMP(Asymmetric Multi-processing)开发案例,适用开发环境如下:
创龙科技Tronlong
2025/04/16
1350
基于瑞芯微RK3562 四核 ARM Cortex-A53 + 单核 ARM Cortex-M0工业评估板——Linux应用开发手册
芯昇科技CM32M433R-START开箱评测
中国移动芯昇科技发布CM32M4xxR,该芯片基于RISC-V内核的MCU,性能主要对标Cortex-M4。如今RISC-V架构的通用MCU在市场上也并不少见,但是该芯片也有其自己的特点,在探索应用领域方面也有自己独特的设计。
bigmagic
2022/04/15
1.1K0
芯昇科技CM32M433R-START开箱评测
如何移植RTT微内核到树莓派3B
作者是第一次接触微内核,目前也没有深入去了解。很高兴参与RTT在树莓派上搭建的微内核的体验版。这篇文章描述如何移植,以及体验。该工程我目前在ubuntu16.04和ubuntu18.04上编译运行都没问题。
Rice加饭
2022/05/10
7680
如何移植RTT微内核到树莓派3B
熊谱翔:2019,RT-Thread加油
以前RT-Thread给大家停留的一个印象是:文档少,书籍少,上手比较难。2018年我们将解决此问题作为首要任务之一,撰写补充了数以百计的学习文档,对RT-Thread的文档中心架构进行大幅调整,最终形成了较为完善、科学合理、广受开发者好评的文档体系;而书籍上,野火基于对RT-Thread的认可,给予了非常得力和及时的支持,撰写出版了《RT-Thread内核实现与应用开发实战指南——基于STM32》;RT-Thread官方团队也在加班加点撰写更为系统的《实时嵌入式系统:RT-Thread设计与实现》;南京工业大学孙冬梅教授则针对龙芯编写了《实时嵌入式系统RT-Thread应用与开发——基于国产龙芯处理器》。后面两本应该会在今年出版出来。
刘盼
2019/03/15
9190
riscv32 qemu rt-thread的最小移植实现(1)
本文主要梳理riscv32在qemu的移植过程,将通过几天时间将其整理和最小系统的bring up。为了保证代码的可维护性,所有修改符合rt-thread bsp制作规范。目标就是riscv32 qemu 上运行rt-thread。以RT-Thread v4.0.3 released为工程代码的基线,进行开发移植工作。
bigmagic
2021/02/08
1.6K0
RTT 全志D1s RDC2022纪念版开发板开箱使用分享与折腾记录
原文链接:https://bbs.aw-ol.com/topic/3021/ 作者@caoxuetian
阿志小管家
2024/02/02
7150
RTT 全志D1s RDC2022纪念版开发板开箱使用分享与折腾记录
【嵌入式】嵌入式系统可以用哪些编程语言实现(系统全面讲解)
嵌入式系统(Embedded System)是一种以应用为中心、以计算机技术为基础、可裁剪的软件和硬件结合系统。它不具备像普通电脑那样的通用性,而是为了完成某项特定任务而存在。
LuckiBit
2025/04/11
2480
【嵌入式】嵌入式系统可以用哪些编程语言实现(系统全面讲解)
RT-Thread 移植到GD32F150系列mcu
https://www.rt-thread.org/page/download.html
ManInRoad
2021/10/20
1.1K0
RT-Thread 移植到GD32F150系列mcu
TPYBoard:一款可以发挥无限创意的MicroPython开发板
今天给大家带来一款MicroPython开发板的拆解和测评。所谓MicroPython也就是运行在单片机上的Python。Python在国外是一门非常热门的编程语言,近些年在国内也被发掘与追捧, Python的开放、简洁、黏合正符合了现发展阶段对大数据分析、可视化、各种平台程序协作产生了快速的促进作用。自Python3的发布到现在已有五六年的时间,从刚发布的反对声音到慢慢被接受与喜欢经过了太漫长的时间,然而可能也与国情与发展需求有着相当的关系。总之,越来越多人开始使用Python。
阿莉埃蒂
2019/03/06
1.9K0
TPYBoard:一款可以发挥无限创意的MicroPython开发板
推荐阅读
相关推荐
一款自研Python解释器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档