12 KiB
PikaScript
跨平台的超轻量级嵌入式Python引擎
【声明】: PikaScript未与任何第三方机构达成合作,本开源项目遵守MIT开源协议。
1.简介
PikaScript是一个完全重写的超轻量级python引擎,零依赖,零配置,可以在少于4KB的RAM下运行(如stm32g030c8和stm32f103c8),极易部署和扩展,具有大量的中文文档和视频资料。
获取PikaScript:
使用Pika包管理器PikaPackage.exe
-
直接运行PikaPackage.exe, 自动下载并更新pikaScript主仓库(文件在当前磁盘的/tmp/pikaScript文件夹)
-
将requestment.txt放在PikaPackage.exe同一文件夹下, 运行pikaPackage.exe, 自动在当前目录下安装内核、预编译器与模块。
-
已发布的模块列表:packages.toml
快速上手
可使用仿真工程快速上手,无需硬件,也可以使用官方支持的开发板Pika派—Zero,上手即玩。
开发板基于STM32G030C8T6小资源MCU,仅64kB Flash,8kB RAM即可运行完整解释器,和完整的外设驱动(GPIO、TIME、IIC、RGB、KEY、LCD、RGB)。板载CH340 USB转串口芯片,Type-C接口,支持串口下载python脚本,板载4颗RGB灯,可选配LCD屏幕。
开发手册
点此进入文档中心
视频教程
点此进入视频中心
交流论坛
点此进入论坛
文件目录
src - 内核源码
bsp - 裸机芯片/板卡支持
port - 操作系统支持
document - 开发文档
examples - 示例脚本
package - 模块目录
pikaCompiler - 使用rust编写的预编译器
pikaPackageManager - 使用go编写的模块管理器
2.平台支持
MCU/Board | bsp | gpio | uart | pwm | adc | i2c | spi | rgb | lcd | arm-2d |
---|---|---|---|---|---|---|---|---|---|---|
PikaPi Zero | √ | √ | √ | √ | √ | √ | √ | √ | √ | |
stm32g030c8 | √ | √ | √ | √ | √ | √ | ||||
stm32g070cB | √ | √ | √ | √ | √ | |||||
stm32f103c8 | √ | √ | √ | √ | √ | |||||
ch32v103r8t6 | √ | √ | ||||||||
QEMU | √ | √ | ||||||||
cm32m101a | √ | |||||||||
w801 | √ | |||||||||
apm32f030r8 | √ | |||||||||
apm32e103vb | √ | |||||||||
bl-706 | √ |
3.特性
(1)运行环境
支持裸机运行,可运行于 RAM ≥ 4kB ,FLASH ≥ 32kB 的mcu中,如stm32g030, stm32f103c8t6,esp8266。
(2)开发环境
支持串口下载Python脚本。
支持Keil、IAR、rt-thread studio、segger embedded studio等IDE开发。
支持CMake、makeFile、Scons等构建工具
零依赖,零配置,开箱即用,极易集成进已有的C工程。
极易拓展自定义的C原生函数。
支持跨平台,可在linux环境开发内核。
(3)语法特性
使用python3标准语法的子集。
在编译时支持python类和方法定义,完整支持封装、继承、多态、模块功能 - 基于Pika预编译器。
在运行时支持python方法调用、变量定义、对象构造、对象释放、控制流(if\while) - 基于Pika运行时内核。
语法 | 编译时 | 运行时 |
---|---|---|
类定义 | √ | |
类继承 | √ | |
方法定义 | √ | √ |
方法重载 | √ | √ |
方法调用 | √ | √ |
模块导入 | √ | √ |
参数定义 | √ | √ |
参数赋值 | √ | √ |
对象新建 | √ | √ |
对象销毁 | √ | √ |
对象嵌套 | √ | √ |
操作符
+ | - | * | / | == | > | < | >= | <= | % | ** | // | != | & | >> | << | and | or | not | += | -= | *= | /= |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
控制流
if | while | for | else | elif | break | continue |
---|---|---|---|---|---|---|
√ | √ |
(4)源码规范
注重源码可读性,命名规范,标准统一,完全不使用宏,几乎不使用全局变量。
完整的googletest单元测试。
4.交流与技术支持:
微信交流群
群已经满啦,加我QQ拉你进群~ qq: 645275593
Tencent QQ: 645275593
Tencent QQ Group:
E-mail: 645275593@qq.com
5.贡献者
内容 | 贡献者 |
---|---|
基于QEMU的ARM-2D仿真工程 | liuduanfei |
捐赠:GD32E103TB芯片2片 | 信息牛(微信名) |
Rt-thread 支持包模板 | Meco Jianting Man |
捐赠:移远EC600S-CN 4G模块 | 移远模块 |
捐赠:博流BL706 开发板 | 博流智能 bouffalolab |
捐赠:中国移动CM32M101A 开发板 | 孟巍(微信名) |
捐赠:APM32F030R8 开发板 | 极海半导体 陈成 |
捐赠:APM32E103VB 开发板 | 极海半导体 陈成 |
捐赠:APEX-Link仿真器 | 极海半导体 陈成 |
源码格式化,增加git属性文件 | Meco Jianting Man |
demo/simulation-keil | 千帆(微信名) |
demo/stm32f103zet6/demo01-led-stm32f103zet6 | 甜航 |
demo/stm32f103zet6/demo02-led-stm32f103zet6_tworoot | 甜航 |
demo/stm32f407zgt/demo01-led-stm32f407vgt | 甜航 |
6.内核测试与开发
linux下测试pikascript内核(推荐ubuntu20.04):
step1: 拉取项目
git clone https://github.com/pikastech/pikascript
cd pikascript/src
step2: 编译项目
sh init.sh # 第一次编译前运行,之后就不用运行了
sh make.sh # 编译项目
step3: 运行单元测试
sh test.sh
step4: 运行基准测试
sh test-banchmark.sh
step5: 运行demo
./build/src/boot/demo06-pikamain/pikascript_demo06-pikamain
7.Demo展示
Demo 01 万物起源点个灯
Demo 02 串口测试
Demo 03 读个ADC试试
Demo 04 PWM输出
Demo 05 RGB流水灯
这几个Demo占用的RAM最大值只有3.56K,把1K的堆栈也算上就是4.56K,Flash最大占用是30.4K,以STM32F103C8T6的20K RAM和64K Flash为标准,RAM才用掉不到25%,Flash才用掉不到50%。
我们可以简单对比一下micropython的常用芯片STM32F405RG和这次跑PikaScript的芯片STM32G070CB
RAM资源对比
Flash资源对比
参考价对比(以2021年9月11日立创商城10片售价为参考)
拓展能力如何呢?
除了设备驱动之外,为mcu开发自定义的python脚本绑定在pikascript的开发框架下非常轻松,下面两个Demo就是自定义的C模块拓展,这个Demo基于ARM-2D图像驱动库开发了一些python脚本接口。