forked from xuos/xiuos
|
|
||
|---|---|---|
| .. | ||
| pikascript-api | ||
| pikascript-core | ||
| pikascript-lib/PikaStdLib | ||
| Kconfig | ||
| Makefile | ||
| PikaDebug.pyi | ||
| PikaObj.pyi | ||
| PikaStdData.pyi | ||
| PikaStdLib.pyi | ||
| PikaStdTask.pyi | ||
| README.md | ||
| builtins.pyi | ||
| main.py | ||
| pikaPackage.exe | ||
| requestment.txt | ||
| rust-msc-latest-win10.exe | ||
README.md
PikaPython 移植到 XiUOS
本文档描述了如何将 PikaPython 嵌入式 Python 解释器移植到 XiUOS 操作系统。
概述
PikaPython 是一个专为嵌入式系统设计的轻量级 Python 解释器,具有以下特点:
- 内存占用小(ARM 内核至少 64KB Flash + 8KB RAM)
- 支持标准 Python 语法
- 可扩展的硬件抽象层
- 支持预编译脚本
移植架构
APP_Framework/lib/pikapython/
├── pikascript-core/ # PikaPython 核心解释器
│ ├── PikaVM.c # 虚拟机
│ ├── PikaObj.c # 对象系统
│ ├── PikaParser.c # 解析器
│ ├── PikaCompiler.c # 编译器
│ ├── PikaPlatform.c # 默认平台实现(使用标准C库)
│ └── ... # 其他核心文件
├── pikascript-api/ # 预编译的Python API
│ ├── pikaScript.c # 主脚本执行器
│ ├── pikaScript.h # 主脚本头文件
│ ├── __pikaBinding.c # Python绑定
│ └── __asset_pikaModules_py_a.c # 预编译的Python模块
├── pikascript-lib/ # PikaPython 标准库
│ └── PikaStdLib/ # 标准库实现
├── main.py # Python测试脚本(已预编译)
├── Kconfig # 配置选项
├── Makefile # 构建文件
└── README.md # 说明文档
为什么不需要额外的平台适配层?
PikaPython不依赖操作系统和文件系统,只依赖标准C库,并且:
1. 内置默认平台实现
pikascript-core/PikaPlatform.c提供了完整的默认平台实现- 直接使用标准C库函数(malloc、printf、strcpy等)
- 无需额外的平台适配代码
2. 预编译的优势
- Python脚本预编译为C代码
- 无需运行时解释器
- 直接调用预编译的C函数
3. 最小化依赖
- 只依赖标准C库
- 无需操作系统特定代码
- 跨平台兼容
配置选项
基本配置
CONFIG_LIB_USING_PIKAPYTHON: 启用 PikaPython 支持
注意: PikaPython 使用其内部配置系统,无需额外的配置选项。
使用方法
1. 配置编译选项
在项目配置中启用 PikaPython:
# 使用 menuconfig 或直接编辑 .config 文件
CONFIG_LIB_USING_PIKAPYTHON=y
2. 在应用程序中使用
#ifdef CONFIG_LIB_USING_PIKAPYTHON
#include "pikaScript.h"
#endif
int main(void)
{
#ifdef CONFIG_LIB_USING_PIKAPYTHON
// 初始化并运行 PikaPython(自动执行预编译的main.py)
PikaObj* pikaMain = pikaPythonInit();
if (pikaMain != NULL) {
printf("PikaPython test completed successfully!\n");
} else {
printf("PikaPython initialization failed!\n");
}
#else
printf("PikaPython is disabled in configuration.\n");
#endif
return 0;
}
注意: CONFIG_LIB_USING_PIKAPYTHON 宏是通过编译器命令行传递的,无需包含额外的头文件。
3. 测试脚本
运行测试:
# 编译并运行测试程序
make
./test_pikapython
移植步骤详解
第一步:获取 PikaPython 源码
- 从 PikaPython GitHub 下载源码
- 将
pikascript-core和PikaStdLib复制到src/目录
第二步:实现平台适配
- 内存管理:实现
pika_malloc(),pika_free(),pika_realloc() - 字符串操作:实现
pika_strdup(),pika_strcmp()等 - 打印函数:实现
pika_printf(),pika_sprintf()等 - 时间函数:实现
pika_get_tick(),pika_delay_ms()
第三步:硬件抽象层适配
- GPIO 操作:
pika_hal_gpio_init(),pika_hal_gpio_write(),pika_hal_gpio_read() - UART 操作:
pika_hal_uart_init(),pika_hal_uart_write(),pika_hal_uart_read() - I2C 操作:
pika_hal_i2c_init(),pika_hal_i2c_write(),pika_hal_i2c_read() - SPI 操作:
pika_hal_spi_init(),pika_hal_spi_write(),pika_hal_spi_read() - ADC 操作:
pika_hal_adc_init(),pika_hal_adc_read() - PWM 操作:
pika_hal_pwm_init(),pika_hal_pwm_set_duty()
第四步:集成到构建系统
- 更新
APP_Framework/lib/Kconfig包含 PikaPython 配置 - 更新
APP_Framework/lib/Makefile包含 PikaPython 源码 - 创建应用程序测试代码
注意事项
内存要求
- ARM 内核:至少 64KB Flash + 8KB RAM
- RISC-V 内核:至少 128KB Flash + 8KB RAM
- 确保编译器支持 C99 标准
依赖关系
- 需要完整的标准 C 库(libc)支持
- 需要基本的输入输出功能
- 可选的文件系统支持
调试建议
- 启用
CONFIG_PIKAPYTHON_ENABLE_DEBUG查看调试信息 - 使用串口输出查看 Python 脚本执行结果
- 检查内存使用情况,避免栈溢出
扩展功能
文件系统支持
如果启用文件系统支持,可以:
- 从文件加载 Python 脚本
- 保存 Python 脚本执行结果
- 支持模块化 Python 代码
硬件访问
如果启用硬件访问,可以:
- 在 Python 中控制 GPIO
- 使用 UART、I2C、SPI 等外设
- 读取 ADC 值、控制 PWM 输出
故障排除
常见问题
- 内存不足:检查系统可用内存
- 栈溢出:检查系统栈配置
- 编译错误:检查 C99 标准支持
- 运行时错误:启用调试输出查看详细信息
调试技巧
- 使用
pika_printf()输出调试信息 - 检查内存分配是否成功
- 验证平台接口实现是否正确
- 测试基本的 Python 语法支持