2.3. 使用 BSP 工程
2.3.2. 工程的来源
移植好的裸机MCU工程在pikascript/bsp目录,里面的每一个文件夹都是一个移植好的裸机工程。 每个工程都是独立的,可以拷贝出pikascript仓库单独使用。 (simulation-keil-dev和pico-dev是列外,这两个bsp只能在仓库里面用,是用来开发内核的。) https://gitee.com/Lyon1998/pikascript/tree/master/bsp
在bsp文件夹的README.md中,标注了目前的平台支持情况和bsp的使用方法。 (以下的表格不是最新的) 最新表格点这里 你可以通过贡献驱动模块或者bsp来帮助PikaScript拓展这个表格,具体请参考文档中的新平台移植指南、模块开发和包管理部分。
2.3.4. 工程结构
以CH32V103为例,一个PikaScript的工程包含以下的几个部分。
首先是BSP文件夹中除了PikaScript文件夹以外的部分,这一部分是真正的BSP,包含了厂家提供的基本外设库、CMSIS等一些平台上的通用库,只需要对厂家的例程进行整理就可以得到。
上面的一部分是PikaScript的启动器,包含main.c入口文件,pika_config.c配置文件,还有*.s汇编启动文件。启动器负责支持printf,堆栈设置,PikaScript的启动,以及交互式运行、串口下载Python等一些功能。
pika_config.c是用于支持串口下载Python等一些高级功能的,没有这个文件PikaScript依然可以运行。
关于如何使用模块以及如何制作模块,请参考模块开发部分,关于如何贡献模块到PikaScript参考,请参考如何贡献PikaScript模块部分。
- 最上层是PikaScript工程能够支持的Python脚本,Python脚本可以直接解释运行,加载脚本的方式有多种,包括预编译进固件、交互式运行、串口下载Python脚本等,预编译进固件可以参考模块开发的部分,交互式运行和串口下载可以参考新平台移植的部分。
只有在main.py中import的模块会被编译进固件,因此main.py还可以起到剪裁模块的作用。
启动器、内核和模块都可以使用包管理器进行管理。
因此BSP中的PikaScript文件夹中只包含 requestment.txt 模块描述文件和 main.py 示例脚本。
requestment.txt使用与通用 pip 一样的模块描述语法,直接运行 pikaPackage.exe 就可以识别当前文件夹下的 requestment.txt 然后拉取相应的模块。
以 stm32g030的bsp 中的 requestment.txt 为例,被拉取的模块有:
内核: pikascript-core
标准库: PikaStdLib
外设模块: STM32G0 PikaPiZero PikaStdDevice
拉取后的模块需要预编译,直接运行 rust-msc-latest-win10.exe 即可。