打印
[APM32F4]

APM32F407 移植 python 虚拟机 PikaPython(一)

[复制链接]
854|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hexbei|  楼主 | 2024-3-8 15:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hexbei 于 2024-3-8 15:47 编辑

python 大家都知道,是一门跨平台的脚本语言,可以动态加载执行未编译的源码,也可以通过命令行交互式运行指令。嵌入式领域,用得多的脚本语言是 lua,而如 MicroPython 这种嵌入式的 python 实现,因为资源占用较多、运行速度慢,往往只在比较高端的处理器上使用。

不过近年来出现了一款国产的嵌入式 python 虚拟机,资源占用竟然可以做到比 lua 还小?它就是本文要介绍的 PikaPython。

PikaPython 是一个完全重写的超轻量级 python 引擎,零依赖,零配置,可以在 Flash ≤ 64KB,RAM≤ 4KB 的平台下运行,极易部署和扩展,具有大量的中文文档和视频资料。

下面就以极海 APM32F407VG 单片机平台为例介绍如何移植 PikaPython。



移植

PikaPython 可以直接在裸机上移植,用官方的生成器工具也能快速创建工程(http://pikascript.com/)。但如果想要在操作系统环境下运行,推荐搭配 RT-Thread 使用。

1. 首先下载安装 RT-Thread Studio (https://www.rt-thread.org/studio.html)。安装完成之后打开,在SDK Manager里安装系统版本 4.1.x 和 APM32F4 的包。









2. 基于芯片型号 APM32F407VG,新建RT-Thread项目





控制台串口是 RT-Thread 和 PikaPython 使用的调试终端,这里用了默认的UART1,可以根据项目情况选别的模块和引脚。



3. 打开 RT-Thread Settings,添加 PikaScript 软件包



如图搜索并打开 PikaScript的开关





4. 编译整个工程



更新软件包的过程可能会有点久





编译成功,这样 RT-Thread 和 PikaPython 的工程就创建好了。



调试

5. 在下方的终端选项卡,点击图标启动串口终端



串口线 RX、TX 连接到开发板 PA9、PA10,参数如图设置





6. 复位运行开发板,可以看到串口输出启动信息,不断打印 Hello,说明 RT-Thread 运行成功。





7. 接下来去掉 main 函数的循环打印,方便接下来调试 PikaPython







8. 编译工程,复位运行后在终端输入 pika,并回车,即可进入 PikaPython 的交互式命令行界面







9. 移植成功。下面是在 pika 命令行做的一些简单测试

python 风格的变量定义,和交互式获取表达式结果:



PikaPython 自带模块的一些类方法测试:



其中 mem 和 thread 变量分别是 pikaRTThread.Thread 和 PikaStdLib.MemChecker 这两个类的实例。在工程目录下 packages\pikascript-latest\main.py 文件中可以找到定义。这个文件是 PikaPython 的默认启动脚本,在第一次进入命令行时运行。



资源占用

10. 打开 RT-Thread Studio 的构建配置




优化等级选 -Os,勾上 -ffunction-sections 和 -fdata-sections 选项



重新编译工程,可以看到 Flash 占用 120 KB 多,静态内存占用 5.38 KB。



当然,这里是算上了 RT-Thread 本身的资源占用。如果裸机移植 PikaPython 可以做到更小,Flash占用可以控制在 90 KB以下,静态内存占用在 4 KB 以下。相比 MicroPython 甚至 lua,已经是很小的开销了。



以上就是在 APM32F407VG 上 PikaPython 的简单移植。下一篇我们来讲下如何用 PikaPython 操作 GPIO。


使用特权

评论回复
沙发
惠小柴| | 2024-3-14 11:26 | 只看该作者
大佬牛X

使用特权

评论回复
板凳
kai迪皮| | 2024-3-15 10:31 | 只看该作者

厉害,学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

20

帖子

2

粉丝