You're reading the documentation for a development version.
For the latest stable release version, please have a look at master.

ARM 端 RT-Thread 模型部署

简介

本文档面向开发人员,介绍如何在 Windows 环境下基于 X78NE 开发板完成 RT-Thread 操作系统与神经网络模型的部署。 目标是在 ARM 端基于 RT-Thread 操作系统,运行 PNNA 推理示例程序,实现模型加载与执行。

环境搭建

准备内容:

  • X78NE 板卡

  • RS232转USB连接线

  • 串口软件

  • 网线

  • tftpd64.exe 软件(自备)

串口连接与网络配置

  • 接上电源适配器

  • 接上网线

  • RS232转USB连接线 与板卡 UART_DSP接口 相连,另一端连接电脑,进入 管理-设备管理器-端口 中查看端口号,如COM19

  • 打开串口软件,选择相应的端口号 ,波特率115200,数据位8bit,校验位无,停止位1bit,控制流无

  • 打开电源,LED灯亮起

  • 在串口软件可以看到uboot打印信息,在uboot阶段 按任意键 进入uboot命令行

 1U-Boot 2019.01+ (Jun 20 2024 - 15:43:38 +0800)
 2
 3SOC: X78NE
 4    CPU(ARMV7): 1600 MHz
 5    DSP(C66x): 1250 MHz
 6Model: X78NE EVM
 7
 8 mcu start work 
 9
10Mcu Channel 0
11/2 Bank Groups/4 Banks/10 Column/17 Row/X16/1 Ranks/ECC/Standard
12Systemp DRAM Capacity = 8GB, DDR freq = 1332MHZ
13DDR Init Done. 
14
15Flash: ## Unknown flash on Bank 1 - Size = 0x00000000 = 0 MB
160 Bytes
17NAND:  nand_scan failed, ret -19
180 MiB
19Net:   eth0: ethernet@4200000
20Hit any key to stop autoboot:  0 
21x78ne =>
  • 输入tftpboot命令,可以看到TFTP from server 192.168.23.111,需要我们在电脑上添加192.168.23.111这个IP

 1x78ne =>tftpboot
 2wait SGMII/RGMII link up ...
 3Speed: 1000, full duplex
 4*** Warning: no boot file name; using 'C0A81764.img'
 5Using ethernet@4200000 device
 6TFTP from server 192.168.23.111; our IP address is 192.168.23.100
 7Filename 'C0A81764.img'.
 8Load address: 0x82000000
 9Loading: *
10TFTP error: 'File not found' (1)
11Not retrying...
12x78ne =>
  • 在串口输入ping 192.168.23.111,打印host 192.168.23.111 is alive表示网络通信正常,至此环境准备完毕

1x78ne =>ping 192.168.23.111
2wait SGMII/RGMII link up ...
3Speed: 1000, full duplex
4Using ethernet@4200000 device
5host 192.168.23.111 is alive
6x78ne =>

下载 RT-Thread 源码

RT-Thread 源码版本为 v5.2.0

1git clone --depth 1 --branch v5.2.0 https://github.com/RT-Thread/rt-thread.git

获取 X78NE 工程

1cd ~/rt-thread/bsp/
2git clone -b v20251222 https://gitlink.org.cn/nudt_dsp/x78ne.git

安装构建工具 scons

1pip install scons

交叉编译环境搭建

  • 非中文路径下,下载交叉编译器

1git clone https://gitlink.org.cn/nudt_dsp/arm_none_eabi_10.2.1.git
  • 配置交叉编译器

编辑 x78ne/armhf/rtconfig.py

EXEC_PATH   = r'你的路径\arm_none_eabi_10.2.1\bin'

模型部署

编译工程

在 x78ne/armhf 目录下执行:

1scons -j16

编译过程部分内容如下:

 1PS ~bsp\x78ne\armhf> scons -j16
 2...
 3LINK rtthread-a15.elf
 4Memory region         Used Size  Region Size  %age Used
 5       MSMC_SRAM:     1999276 B      2016 MB      0.09%
 6arm-none-eabi-objcopy -O binary rtthread-a15.elf rtthread-a15.bin
 7arm-none-eabi-size rtthread-a15.elf
 8   text    data     bss     dec     hex filename
 9 705580   52430 1212844 1970854  1e12a6 rtthread-a15.elf
10scons: done building targets.
11PS ~bsp\x78ne\armhf>

成功后生成 rtthread-a15.elfrtthread-a15.bin

配置 TFTP 服务

运行tftpd64.exe

  • Current Directory 一栏填 x78ne arm 工程路径 ~/rt-thread/bsp/x78ne/armhf

  • Server interfaces 一栏选择 192.168.23.111

下载程序和模型

在 U-Boot 命令行中输入:

1tftpboot 0x82000000 rtthread-a15.bin
2tftpboot 0xe0000000 ./applications/pnnatest/resource/network_binary.nb
3tftpboot 0xe1000000 ./applications/pnnatest/resource/input_0.dat
4dcache flush
5go 0x82000000

系统启动成功后,进入 RT-Thread 控制台

运行神经网络推理示例

在 RT-Thread 控制台执行:

1ft_pnna_test

推理日志关键内容:

 1msh >ft_pnna_test
 2...
 3init pnna lite, driver version=0x00010f00...
 4run network done...
 5profile inference time=0.019000ms, cycle=16803543
 6boxes number: 8
 72 0.493754 0.774262 0.222295 0.305353 0.176144
 87 0.798084 0.760757 0.218838 0.305353 0.176144
 91 0.686268 0.425346 0.504524 0.660328 0.612339
1016 0.908528 0.288089 0.640713 0.259141 0.637094
11Average clock, cpu: 2 - 0.0 ms, pnna: 1680354 - 16.8 ms
12Destroy resource network items.
13msh >

推理结果如下所示:

12 0.493754 0.774262 0.222295 0.305353 0.176144
27 0.798084 0.760757 0.218838 0.305353 0.176144
31 0.686268 0.425346 0.504524 0.660328 0.612339
416 0.908528 0.288089 0.640713 0.259141 0.637094

其中每一列分别表示:目标类别、置信度、左上角坐标x、左上角坐标y、框的宽、框的高

  • 推理时间为

116.8 ms