MicroPython 项目包含多个针对不同微控制器系列和架构的移植。项目资源库中有一个 ports 目录,其中包含每个支持移植的子目录。
一个移植通常包含多个"板子"的定义,每个 "板子"都是该port可以运行的特定硬件,例如开发套件或设备。
最小移植是 MicroPython 移植的简化参考实现。它可以在主机系统和 STM32F4xx MCU 上运行。
一般来说,进行一个移植需要
- 设置工具链(配置 Makefile 等)。
- 执行启动配置和 CPU 初始化。
- 初始化开发和调试所需的基本驱动程序(如 GPIO、UART)。
- 执行电路板特定配置。
- 执行特定移植模块。
MicroPython 固件
将MicroPython移植到新板的最佳方法是集成一个最小的MicroPython解释器,本文中的实践,是在ports目录中为新移植创建一个子目录:
$ cd ports
$ mkdir example_port
基本的MicroPython固件在主移植文件中实现,例如main.c:
#include "py/builtin.h"
#include "py/compile.h"
#include "py/gc.h"
#include "py/mperrno.h"
#include "py/stackctrl.h"
#include "shared/runtime/gchelper.h"
#include "shared/runtime/pyexec.h"
// 为MicroPython垃圾回收分配内存
static char heap[4096];
int main(int argc, char **argv) {
// 初始化MicroPython运行时.
mp_stack_ctrl_init();
gc_init(heap, heap + sizeof(heap));
mp_init();
// 开启一个常规的REPL; 在空白行时按Ctrl+d退出
pyexec_friendly_repl();
// 反初始化运行时
gc_sweep_all();
mp_deinit();
return 0;
}
// 处理未捕获的异常(在正确的 C 语言实现中应该永远不会出现)。
void nlr_jump_fail(void <