4.2. 深入适配指导

成功部署 PikaPython 并实现其“十分钟部署到新平台”后,接下来我们将深入探索如何使 PikaPython 与您的硬件和操作系统实现无缝对接。

深入适配不仅涉及确保组件在新平台上的基本运行,还包括优化性能和稳定性。

这需要您对 PikaPython 架构及目标平台的硬件和操作系统特性有透彻了解。

8dbef7bd25e48b890a71fe3d384aa077

4.2.1. 最小适配

“十分钟部署到新平台” 章节给出了在 arm 平台的裸机中完成最小适配的介绍。

4.2.1.1. 标准C库(libc)

标准 C 库是任何高级语言运行时环境的基石,提供了字符串处理、内存分配和数学运算等基础功能。

  • 提示:通常的嵌入式系统提供了完整的 libc,但是在一些平台上,libc 也存在一些问题,例如 vsnprintf 的实现可能是不完整的,或者系统对于浮点的处理能力受限。

4.2.1.2. 堆栈配置

堆栈空间的配置是嵌入式系统编程的基础环节。我们保证了系统有足够的堆栈空间供 PikaPython 执行基本操作,例如脚本加载与执行。

  • “十分钟部署到新平台” 的章节给出了在 arm 平台上对裸机的堆栈的配置方法,在其他的平台(如 risc-v )中配置堆栈的方式有所不同,需要根据平台的特点来进行具体配置。

  • 在有 RTOS 的环境中,堆栈的配置和裸机的配置有很大区别。栈通常需要通过线程栈来设置,而堆的设置和 RTOS 的堆分配算法有关。(例如 FreeRTOS 有多种 heap 算法)。

4.2.1.3. 固件加载 python 脚本

最小适配下,PikaPython 不具有访问文件系统的能力,此时 python 脚本只能被加载到固件中运行。

  • PikaPython 的预编译器提供了将 python 脚本添加到固件中的功能。

  • 如何更新固件中加载的 python 脚本:

    1. 运行预编译,python 脚本将会被加载到固件的 .c 资源文件中。

    2. 编译固件,下载固件。

4.2.2. 拓展适配

4.2.2.1. 交互式运行环境

为了实现在目标平台上的交互式运行,我们需要提供getchar接口。

该函数从标准输入读取字符,而在嵌入式环境中,可能需特定硬件驱动支持以便捕捉来自各类输入设备的数据。

  • 输入缓冲与处理:高效的输入机制是资源有限的嵌入式系统的关键。

  • 中断管理:适当的中断服务程序设计是处理通过中断方式收到输入的基础。

4.2.2.2. 文件系统适配

文件系统的适配使 PikaPython 能够从文件加载脚本,进行存储、检索和执行操作。

这可能包括对FLASH存储或SD卡等外部存储介质的支持,以及实现或利用现有文件系统 API。

  • 常见文件系统:选择一个常用文件系统,来提供文件系统的适配,如 fatfs、LittleFS等。

4.2.2.3. 硬件抽象层 (HAL)

PikaPython 的外设支持基于 pika_hal 硬件抽象层。

硬件抽象层的适配为 PikaPython 提供访问硬件外设的能力。

  • PikaPython 的硬件模块,如PikaStdDevice,会调用 pika_hal 接口,由 pika_hal 将调用转化为具体硬件动作。

4.2.2.4. 多线程支持

多线程功能的实现通常依赖于实时操作系统(RTOS)的适配,它为并行任务执行提供了必要的结构。

这包括任务调度、时间管理、互斥锁和信号量等。

  • 在PikaPython中,需要将 RTOS 的线程函数和 PikaPython 进行对接,从而使_thread模块得以在Python脚本中用于创建和控制线程。