PikaScript是一个完全重写的超轻量级python引擎,具有完整的解释器,字节码和虚拟机架构,可以在少于4KB的RAM下运行,用于小资源嵌入式系统。相比同类产品,如MicroPython,LuaOS等,资源占用减少85%以上。入选2021年度 Gitee最有价值开源项目,加入RT-Thread嵌入式实时操作系统编程语言类软件包。
下面是一些例程Demo,截取自宣传用的公众号文章,表述略显浮夸(捂脸)
————————————分割线————————————
我就想用单片机跑个Python,得用linux虚拟机+交叉编译工具链+命令行编译micropython固件,还得用DfuSe工具烧录固件,烧录完还不能用C的调试器来调试。
我想拓展个自己的C模块,还要学着用一些完全看不懂的宏函数,还得手动注册,还得编写makeFile,编译完照样不能调试C。
我穷,买不起STM32F4,想买个STM32F103C8T6的micropython开发板,淘宝一搜,好像没有。
现在C8T6贵了,我还想用F0,用G0,能行吗?
好像,给G0移植micropython,不是很容易。
那?有没有另一种玩法?
换句话说,我想用Keil开发,用Keil调试,我还想用最便宜的单片机。
这,能玩Python吗?
要不,试试PikaScript?
啥是PikaScript?
PikaScript可以为资源受限的mcu提供极易部署和拓展的Python脚本支持。
PikaScript支持裸机运行,最低可运行于 RAM ≥ 4kB ,FLASH ≥ 32kB 的mcu中,推荐配置为 RAM ≥ 10kB, FLASH ≥ 64kB,像是stm32f103c8t6、stm32g070RBT6这些完全没有压力,甚至已经满足了推荐配置。
而且支持Keil、IAR、rt-thread studio、segger embedded studio等IDE开发,零依赖,零配置,开箱即用,极易集成进已有的C工程。
说了这么多,刘华强就有疑问了,你说这脚本,保熟吗?
我这开水果脚本摊儿的,能买你生脚本蛋子?
这就挑点儿Demo给哥儿几个瞧瞧。
这可都是STM32G070RBT6的Demo。
Demo 01 万物起源点个灯
看看这脚本,可都是如假包换的Python3标准语法。
这灯不就闪起来了吗。
Demo 02 串口测试
开个串口,读俩字符试试
非常顺滑
Demo 03 读个ADC试试
同样几行脚本搞定。
这是输出的结果。
这几个Demo占用的RAM最大值只有3.56K,把1K的堆栈也算上就是4.56K,Flash最大占用是30.4K,以STM32F103C8T6的20K RAM和64K Flash为标准,RAM才用掉不到25%,Flash才用掉不到50%,简直是资源多到不知道咋霍霍。
同样跑Python,我们可以简单对比一下micropython的常用芯片STM32F405RG和这次跑PikaScript的芯片STM32G070CB
RAM资源对比
Flash资源对比
参考价对比(以2021年9月11日立创商城10片售价为参考)
拓展能力如何呢?
除了设备驱动之外,为mcu开发自定义的python脚本绑定在pikascript的开发框架下非常轻松,下面两个Demo就是自定义的C模块拓展,这个Demo基于ARM-2D图像驱动库开发了一些python脚本接口。
几个小方块~
几个旋转太阳~
那,PikaScript是开源的吗?
当然,这个就是PikaScript的github主页:
https://github.com/pikasTech/pikascript
还有gitee主页
https://gitee.com/Lyon1998/pikascript
开发难不难?
PikaScript为开发者准备了丰富的Demo和由浅入深的开发指南,指南还会持续完善和维护。 image
可以商用吗?
当然!PikaScript采用MIT协议,允许修改和商用,但是要注意保留原作者的署名。
最近编辑记录 lyon1998 (2021-12-01 15:43:03)
离线
python代码还是要预编译的 不是直接解释的 不是脱____么
最近编辑记录 哇酷小二 (2021-12-01 17:08:54)
离线
python代码还是要预编译的 不是直接解释的 不是脱____么
需要预编译的是c模块,python脚本可以直接运行,也支持交互式运行
离线
群友前来膜拜,楼主出个视频解释解释语法分析啊!
最近编辑记录 Chin (2021-12-01 17:22:53)
离线
群友前来膜拜,楼主出个视频解释解释语法分析啊!
语法分析是递归生成AST,等周末可以简单介绍一下~
离线
晚上花了三个小时点灯,点LCD 试了一下,感觉挺好,Python在这里就是个胶水,把基层外设模块粘连起来
离线
晚上花了三个小时点灯,点LCD 试了一下,感觉挺好,Python在这里就是个胶水,把基层外设模块粘连起来
感谢大佬趟坑(捂脸)
如果不是串口的dtr有坑,应该半个小时就搞定了。
离线
不错,可以玩一玩
离线
micropython 可以直接插USB识别为U盘,把代码拷贝进去就行,不知道PikaScript支不支持(如果同样在F405上面跑)
目前支持的形式是通过串口助手发送main.py文件。发送完就能运行。
离线
好东西!就是不知道完成度如何,比如哪些Python3语法是支持的,哪些不支持,有什么差异。
另外,绑定C库的教程有没有
离线
好东西!就是不知道完成度如何,比如哪些Python3语法是支持的,哪些不支持,有什么差异。
另外,绑定C库的教程有没有
目前支持下面这些语法特性
下面这个是绑定C模块的教程
还有两个视频
离线
@lyon1998
通过串口发送文件到FLASH再运行多少还是有些不方便,比如我需要发送一张屏幕的图片到FLASH,速度就比较慢。
不过这个项目真的很棒,我现在用micropython确实有遇到要编译C模块的时候,自己写C模块更加不方便。
嗯嗯,USB驱动做好之后也可以像mpy那样拖拽,最后给解释器一个字符串形式的python脚本就可以了。
离线
楼主技艺牛逼!
离线
厉害,,赞!!
离线
@lyon1998
Control flow支持的比较少,别的都很全了。期望Control flow能完善一点,可用性就高了。
一直打算在bootloader里搞个脚本,这个就很合适
离线
出错时的trace有吗?
对了,如果能实现调试器就好了,micropython没有调试器太痛苦。靠一次一次加打印来调试,关键每次都要上传脚本很麻烦
离线
@lyon1998
Control flow支持的比较少,别的都很全了。期望Control flow能完善一点,可用性就高了。一直打算在bootloader里搞个脚本,这个就很合适
Control flow正在施工~
离线
出错时的trace有吗?
对了,如果能实现调试器就好了,micropython没有调试器太痛苦。靠一次一次加打印来调试,关键每次都要上传脚本很麻烦
调试的话目前还是依靠交互式运行,或者就直接用keil等ide调试固件。
出错的trace的话目前支持主动抛出异常,还有就是会报告出错的指令
离线
@lyon1998
期待,我现在在micropython上跑LVGL,可以实时画界面看效果还是不错的。F4现在确实挺贵,哪天有空试试PikaScript!
期待大佬的LVGL哈哈,目前我在和ARM-2D的作者王桑合作。
顺便给ARM-2D打个广告,ARM-2D是由ARM官方支持,完全开源的用于小资源嵌入式系统的最新GUI技术,比LVGL资源更小,只需要2Kb内存,20Kb 左右flash即可运行,具有图形加速、部分缓冲、脏矩阵加速刷新、透明度、抗锯齿、旋转等等强大的图像处理能力。
下面是ARM-2D的github主页:
https://github.com/ARM-software/EndpointAI/tree/master/Kernels/Research/Arm-2D
PikaScript还有一个和ARM2D的联合仿真工程,可以基于QEMU进行GUI仿真
离线
运行速度怎么样?可以跟lua比吗?
离线
运行速度怎么样?可以跟lua比吗?
还没有具体的对比数据,目前主要运行在g030等lua还不能移植的小资源mcu
离线
离线
挺有意思,语法支持的完整度咋样?
只针对小资源的芯片吧?
离线
挺有意思,语法支持的完整度咋样?
只针对小资源的芯片吧?
https://gitee.com/Lyon1998/pikascript#3%E8%AF%AD%E6%B3%95%E7%89%B9%E6%80%A7
支持了一些基本语法,可以在这里看到最新的情况。
不只是小资源的芯片,所有的芯片理论上都可以,另外还有rtt软件包,能跑rtt的都一键支持。
平台支持列表可以在这里看到
https://gitee.com/Lyon1998/pikascript#2%E5%B9%B3%E5%8F%B0%E6%94%AF%E6%8C%81%E5%88%97%E8%A1%A8
离线
@lyon1998
好的,我看看咋移植的。我看了一下语法,确实有一些还需要完善,不知道性能咋样
最近编辑记录 vsf (2021-12-21 00:15:08)
离线
@lyon1998
好的,我看看咋移植的。我看了一下语法,确实有一些还需要完善,不知道性能咋样
运行速度不如mpy,因为是体积优化优先的。
下面是移植文档,不过我看到大佬已经跑起来了哈哈!大佬NB
离线
这个 "method no found",每次看到都有点别扭,因为python里边都是Not Found,感觉有点中式英语的感觉。这个地方能不能改成 method not found。
离线
不错,晚上试试,
文件上传建议弄个TFTP服务器,上传下载都方便。
离线
这个 "method no found",每次看到都有点别扭,因为python里边都是Not Found,感觉有点中式英语的感觉。这个地方能不能改成 method not found。
动图是很早期的了,现在和 python 的报错类似
>>> te()
NameError: name 'te' is not defined
-> RUN te (#1)
>>>
离线
不错,晚上试试,
文件上传建议弄个TFTP服务器,上传下载都方便。
板子里装了tftp服务器就行
离线