14 KiB
PikaScript
跨平台的超轻量级嵌入式 Python 引擎
论坛 | 文档中心 | 视频 | 开发板 | BSP | 包管理器 | RT-Thread 软件包 | 参与贡献 | 商业合作
1.简介
PikaScript 是一个完全重写的超轻量级 python 引擎,零依赖,零配置,可以在少于 4KB 的 RAM 下运行(如 stm32g030c8 和 stm32f103c8 ),极易部署和扩展,具有大量的中文文档和视频资料。
PikaScript 具有框架式C模块开发工具,只要用 Python 写好调用 API ,就能够自动连接到C模块,非常方便快捷。不用手动处理任何全局表、宏定义、等等。
PikaScript 也支持 MDK、iar、RT-studio 等常见 ide 开发,能够轻松地调试C模块。
获取 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、UART、ADC、PWM、RGB、KEY、LCD)。板载 CH340 USB 转串口芯片,Type-C 接口,支持串口下载 python 脚本,板载4颗 RGB 灯,可选配LCD屏幕。
开发手册
点此进入文档中心
视频教程
点此进入视频中心
交流论坛
点此进入论坛
文件目录
src - 内核源码
bsp - 裸机芯片/板卡支持
port - 操作系统支持
document - 开发文档
examples - 示例脚本
package - 模块目录
pikaCompiler - 使用 rust 编写的预编译器
pikaPackageManager - 使用 go 编写的模块管理器
2.平台支持列表
MCU support
MCU | bsp | gpio | uart | pwm | adc | i2c |
---|---|---|---|---|---|---|
stm32g030c8 | √ | √ | √ | √ | √ | √ |
stm32g070cB | √ | √ | √ | √ | √ | √ |
stm32f103c8 | √ | √ | √ | √ | √ | √ |
stm32f103rb | √ | √ | √ | √ | √ | √ |
stm32f103rc | √ | √ | √ | √ | √ | √ |
ch32v103r8t6 | √ | √ | ||||
cm32m101a | √ | |||||
w801 | √ | √ | ||||
w806 | √ | √ | ||||
apm32f030r8 | √ | |||||
apm32e103vb | √ | |||||
bl-706 | √ | |||||
Raspberry Pico | √ | |||||
ESP32C3 | √ |
Board support
Board | bsp | gpio | uart | pwm | adc | i2c | rgb | lcd | arm-2d |
---|---|---|---|---|---|---|---|---|---|
Pika-Pi-Zero | √ | √ | √ | √ | √ | √ | √ | √ | √ |
Board | bsp | arm-2d |
---|---|---|
QEMU-arm2d | √ | √ |
Board | bsp | LED | KEY |
---|---|---|---|
SmartLoong | √ | √ | √ |
OS support
OS | port | GPIO | TIME |
---|---|---|---|
rt-thread | √ | √ | √ |
vsf | √ | √ |
OS | port | Google Test | Benchmark |
---|---|---|---|
linux | √ | √ | √ |
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 |
---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | √ | √ |
数据结构
string | list | dict |
---|---|---|
√ | √ | √ |
(4)源码规范
注重源码可读性,命名规范,标准统一,完全不使用宏,几乎不使用全局变量。
完整的 googletest 单元测试。
4.交流与技术支持:
微信交流群
群已经满啦,加我QQ拉你进群~ qq: 645275593
Tencent QQ:
645275593
Tencent QQ Group:
E-mail:
5.贡献者
内容 | 贡献者 |
---|---|
PikaVM 优化 | GorgonMeducer |
W801Device package | 刘延(微信名) |
W806 bsp | 刘延(微信名) |
捐赠:ESP32C3 5pic,调试器 | 启明云端 沧御 |
捐赠:LS1C101芯片10pic, LS1c101开发板,调试器 | 龙芯俱乐部 石南 |
PikaVSF OS package | versaloon |
ESP32C3 BSP | 沧御 |
捐赠:ESP32开发板、墨水屏*4 | name(微信名) |
捐赠:智龙开发板 | 龙芯俱乐部 石南 |
package/STM32F1 | sjy |
package/STM32F103RBBooter | sjy |
bsp/stm32f103rb | sjy |
基于 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/port/linux
step2: 编译项目
sh install_dependency.sh # 安装依赖,第一次用时运行
sh init.sh # 第一次编译前运行,之后就不用运行了
sh make.sh # 编译项目
step3: 运行单元测试
sh gtest.sh
step4: 运行基准测试
sh ci_benchmark.sh
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 脚本接口。