# 深入适配指导 成功部署 PikaPython 并实现其“十分钟部署到新平台”后,接下来我们将深入探索如何使 PikaPython 与您的硬件和操作系统实现无缝对接。 深入适配不仅涉及确保组件在新平台上的基本运行,还包括优化性能和稳定性。 这需要您对 PikaPython 架构及目标平台的硬件和操作系统特性有透彻了解。 ![8dbef7bd25e48b890a71fe3d384aa077](assets/8dbef7bd25e48b890a71fe3d384aa077.jpeg) ## 最小适配 “十分钟部署到新平台” 章节给出了在 arm 平台的裸机中完成最小适配的介绍。 ### 标准C库(libc) 标准 C 库是任何高级语言运行时环境的基石,提供了字符串处理、内存分配和数学运算等基础功能。 - 提示:通常的嵌入式系统提供了完整的 libc,但是在一些平台上,libc 也存在一些问题,例如 vsnprintf 的实现可能是不完整的,或者系统对于浮点的处理能力受限。 ### 堆栈配置 堆栈空间的配置是嵌入式系统编程的基础环节。我们保证了系统有足够的堆栈空间供 PikaPython 执行基本操作,例如脚本加载与执行。 - “十分钟部署到新平台” 的章节给出了在 arm 平台上对裸机的堆栈的配置方法,在其他的平台(如 risc-v )中配置堆栈的方式有所不同,需要根据平台的特点来进行具体配置。 - 在有 RTOS 的环境中,堆栈的配置和裸机的配置有很大区别。栈通常需要通过线程栈来设置,而堆的设置和 RTOS 的堆分配算法有关。(例如 FreeRTOS 有多种 heap 算法)。 ### 固件加载 python 脚本 最小适配下,PikaPython 不具有访问文件系统的能力,此时 python 脚本只能被加载到固件中运行。 - PikaPython 的预编译器提供了将 python 脚本添加到固件中的功能。 - 如何更新固件中加载的 python 脚本: 1. 运行预编译,python 脚本将会被加载到固件的 .c 资源文件中。 2. 编译固件,下载固件。 ## 拓展适配 ### 交互式运行环境 为了实现在目标平台上的交互式运行,我们需要提供`getchar`接口。 该函数从标准输入读取字符,而在嵌入式环境中,可能需特定硬件驱动支持以便捕捉来自各类输入设备的数据。 - **输入缓冲与处理**:高效的输入机制是资源有限的嵌入式系统的关键。 - **中断管理**:适当的中断服务程序设计是处理通过中断方式收到输入的基础。 ### 文件系统适配 文件系统的适配使 PikaPython 能够从文件加载脚本,进行存储、检索和执行操作。 这可能包括对FLASH存储或SD卡等外部存储介质的支持,以及实现或利用现有文件系统 API。 - **常见文件系统**:选择一个常用文件系统,来提供文件系统的适配,如 fatfs、LittleFS等。 ### 硬件抽象层 (HAL) PikaPython 的外设支持基于 `pika_hal` 硬件抽象层。 硬件抽象层的适配为 PikaPython 提供访问硬件外设的能力。 - PikaPython 的硬件模块,如`PikaStdDevice`,会调用 `pika_hal` 接口,由 `pika_hal` 将调用转化为具体硬件动作。 ### 多线程支持 多线程功能的实现通常依赖于实时操作系统(RTOS)的适配,它为并行任务执行提供了必要的结构。 这包括任务调度、时间管理、互斥锁和信号量等。 - 在PikaPython中,需要将 RTOS 的线程函数和 PikaPython 进行对接,从而使`_thread`模块得以在Python脚本中用于创建和控制线程。