本帖最后由 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。
|