小白用Python编写小安派第九篇

[复制链接]
查看962 | 回复3 | 2023-9-2 02:03:47 | 显示全部楼层 |阅读模式
本帖最后由 妖猊 于 2023-9-2 13:59 编辑

第九篇 正文:
pikapython移植到小安派上

不同之前的我们之前编译SDK中pikapython例程那样操作,我们开始从零到一新建新工程然后添加PikaPython,从而学习每一个过程及经历相应的坑,哈哈哈

首先,我们新建一个工程,详细步骤可以看泽哥的教程http://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=422&extra=page%3D1

一、

工程建好后,就看下基本工程都有些什么文件

WX20230901-165757.png

共有5个重要的文件分别是CMakeLists.txt 、main.c、Makefile、flash_prog_cfg.ini、proj.conf

1、CMakeLists.txt 文件是用于描述 CMake 构建过程和项目配置的文件。它包含了一系列 CMake 命令、变量设置和流程控制结构,用于告诉 CMake 如何生成适合你的平台和编译器的构建系统文件。

目前里面的内容是

  1. cmake_minimum_required(VERSION 3.15)

  2. include(proj.conf)

  3. find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE})

  4. sdk_set_main_file(main.c)

  5. project(PikaPythonBL618)
复制代码

cmake_minimum_required(VERSION 3.15):使用 cmake_minimum_required() 命令指定 CMake 的最低版本要求,所以3.15是 CMake 的最低版本要求,最好不要改。

include(proj.conf):引入组件配置,示例是把组件配置单独放置一个文件里了,通过设置环境变量从而配置引入编译哪些组件

find_package(bouffalo_sdk REQUIRED HINTS $ENV{BL_SDK_BASE}):使用 find_package() 命令来寻找和配置依赖库,这个是链接博流SDK依赖库的关键

sdk_set_main_file(main.c):BouffaloSDK 中为用户封装了一些函数接口,基本满足常用场景的使用,sdk_set_main_file是其中一个接口作用是设置 main 函数所在文件

project(PikaPythonBL618):使用 project() 命令指定项目的名称,所有,这里的是名字是可以改的,当然了改不改都基本没有影响

2、flash_prog_cfg.ini,是烧录配置的文件内容是

  1. [cfg]
  2. # 0: no erase, 1:programmed section erase, 2: chip erase
  3. erase = 1
  4. # skip mode set first para is skip addr, second para is skip len, multi-segment region with ; separated
  5. skip_mode = 0x0, 0x0
  6. # 0: not use isp mode, #1: isp mode
  7. boot2_isp_mode = 0

  8. [FW]
  9. filedir = ./build/build_out/PikaPythonBL618_$(CHIPNAME).bin
  10. address = 0x000000
复制代码

cfg 表示烧录时的一些配置,正常不需要改动


  • erase: 设置烧写时的擦除方式。默认的 erase = 1,表示下载时按照烧录地址和内容大小进行擦除。erase = 2 表示程序烧录之前会将 Flash 全部擦除。erase = 0 表示烧写前不进行擦除操作,一般不使用。
  • skip_mode: 设置擦写时不操作的区域。第一个参数为起始地址,第二个参数为长度。skip_mode 支持同时配置多个区域,中间以”;” 分隔。
  • boot2_isp_mode:控制是否选择 isp 烧写模式。boot2_isp_mode = 1 表示使用 isp 烧写模式。

FW 表示要烧录的应用固件,使用”FW” 可以从分区表中获取。
• filedir: 应用固件所在相对路径。其中 “sta“ 表示应用固件名称,$(CHIPNAME) 表示芯片类型。
• address 使用”@partition” 表示自动从 partition.bin 中检测获取地址。也可以直接指定烧录地址,如 address = 0x000000

更详细的配置的可以查看博流的FlashCube_User_Guide.pdf
3、main.c main 函数所在文件,所有的业务代码等都是从这里开始,要写的东西基本都是从这里开始
4、Makefile:博流是使用make进行编译的,make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。只要Makefile写得够好,所有的这一切,我们只用一个make命令就可以完成,make命令会自动智能地根据当前的文件修改的情况来确定哪些文件需要重编译,从而自己编译所需要的文件和链接目标程序。
目前Makefile内容为

  1. SDK_DEMO_PATH ?= .
  2. BL_SDK_BASE ?= $(SDK_DEMO_PATH)/../..

  3. export BL_SDK_BASE

  4. CHIP ?= bl616
  5. BOARD ?= bl616dk
  6. CROSS_COMPILE ?= riscv64-unknown-elf-

  7. # add custom cmake definition
  8. #cmake_definition+=-Dxxx=sss

  9. include $(BL_SDK_BASE)/project.build
复制代码

里面分别定义博流SDK的位置,这个是需要我们改的,需要根据我们实际放置的博流SDK的路径进行改动的

CHIP ?= bl616

BOARD ?= bl616dk

CROSS_COMPILE ?= riscv64-unknown-elf-


分别是定义了环境变量,也就是定义了编译的芯片类型和RISC-V指令集的交叉编译工具,
include $(BL_SDK_BASE)/project.build :引入SDK编译脚本
5、proj.conf
内容为set(CONFIG_NEWLIB_STANDARD      0)等, 为工程添加组件
如果需要编译相关组件,如 FATFS、LVGL ,需要在 `proj.conf` 文件中添加组件的使能,举例如下:
  1. set(CONFIG_FATFS 1)
  2. set(CONFIG_LVGL 1)
复制代码
使能条件编译项  1 使能,0 非
、新建一个bat文件,用于一键编译内容如下:
  1. <blockquote>set PATH=%PATH%;%~dp0..\aithinker_Ai-M6X_SDK\tools\make
复制代码
其中的路径需要改到相应的SDK路径, 根据实际情况更改,需要编译的时候,直接双击bat文件就行了,不用再在电脑里设置环境变量了
三、移植添加PikaPython

PikaPython 几乎没有全局变量和宏,仅依赖标准库,因此部署 PikaPython 是非常容易的。


下面是部署 PikaPython 的具体步骤

基本工程仅需要包含一个支持 printf 的串口初始化,然后就可以愉快地使用 pikapython 了。 通常的脚本解释器都依赖操作系统和文件系统,而 pikapython 不需要这些,如果你部署过其他的脚本引擎,就会发现 PikaScrip 具有真正的超轻量级特性


1、下载 PikaPython 包管理器
PikaPython 包管理器可以帮助你拉取 pikapython 所需要的所有源码和工具,并且提供版本选择功能,方便你切换版本。并且 PikaPython 包管理器使用 gitee 源,能够在大陆顺畅地使用,不需要科学上网。进入 PikaPython 主仓库https://github.com/pikastech/pikapython或者:https://gitee.com/lyon1998/pikapython
下载 PikaPython 包管理器 PikaPackage.exe


                               
登录/注册后可看大图

在工程的根目录下新建 pikapython 文件夹,然后把 PikaPackage.exe 复制进去。
微信截图_20230902020258.png
2、编写 main.py

接下来编写 pikapython 运行的 python 脚本,我们在 pikapython 文件夹新建一个 main.py 文件。然后写入:


  1. print('hello PikaPython!')
复制代码

print('hello PikaPython!') 用于测试pikascript是否正常启动。

3、安装模块

接下来,在 PikaPackage.exe 的帮助下我们可以轻松地拉取指定版本的源码和模块。拉取源码和模块通过一个requestment.txt 的文件,如果你熟悉 python 的 pip 包管理器,就会发现,pikascript 的 requestment.txt 文件格式与 pip 是一致的。在项目的 pikapython 文件夹下新建一个 requestment.txt 文件,然后写入以下内容。

  1. pikascript-core
  2. PikaStdLib
复制代码

requestment.txt 文件中表示表示安装 pikascript-core 解释器内核和 PikaStdLib 标准库,解释器内核和标准库是必选项,而其他的模块可以有选择地添加,在初次部署时,应当只添加内核和标准库以避免遇到兼容性问题。

双击运行 pikaPackage.exe,在 requestmemt.txt 中指定的源码和模块就会被拉取下来


                               
登录/注册后可看大图

拉取后的文件如下图所示,pikascript-core 是内核源码,pikascript-lib 是模块库,pikascript-api 是模块 API , rust-msc-latest-win10.exe 是 pikapython 专用的预编译器。

                               
登录/注册后可看大图

安装完毕后,包管理器会自动锁定版本,requestment.txt 会变成类似下面这样
  1. pikascript-core==v1.11.0
  2. PikaStdLib==v1.11.0
复制代码
如果想升级版本,在 requestment.txt 中修改版本号然后再次运行 pikaPackage.exe 即可,原先的版本会被覆盖。
4、预编译模块

接下来运行 rust-msc-latest-win10.exe,将 main.py 和导入的模块预编译为 pikapython 的 api 文件,预编译后的文件在 pikascript-api 文件夹内。




                               
登录/注册后可看大图




我们打开 pikascript-api 文件夹,发现里面有一些 .c 和 .h 文件,就说明预编译是成功的,pikascript 预编译器可以把 python 模块预编译为 .c 和 .h 文件。

                               
登录/注册后可看大图


未完待续




本帖被以下淘专辑推荐:

回复

使用道具 举报

大猫的鱼 | 2023-9-10 16:30:36 | 显示全部楼层
学习学习~
回复

使用道具 举报

myDsd | 2023-9-13 16:36:08 | 显示全部楼层
预编译后只有PikaMain.h,没有PikaMain.c
回复 支持 反对

使用道具 举报

好好123 | 2023-9-17 13:51:41 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则