Example standalone inferencing for AVH created for CMSIS toolbox v2.4.0
Once you have deployed your model as a Open CMSIS pack, unzip the downloaded file, you will find 2 pack files and a model.clayer.yml
To add your model to your component library you need to use the cpackget
utility:
cpackget add <your_model>.pack
You probably need to install the Edge Impulse sdk too:
cpackget add EdgeImpulse.EI-SDK.x.yy.zzpack
Then you need to move the model.clayer.yml
into the App folder.
The most basic compilation command is:
cbuild inferencing.csolution.yml
This command will build for every target and every configuration available, so probably isn't what you are looking for.
To specify a configuration and target (ie speed for CM55):
cbuild inferencing.csolution.yml --context inferencing.speed+CM55
Other useful arguments are:
--update-rte
Update the RTE directory, which contains target specific header.
--packs
Automatically download any missing software packs with cpackget.
--clean
Remove intermediate and output directories
Usually, the most common way to compiler for a specific target and toolchain is:
cbuild inferencing.csolution.yml --update-rte --packs --context inferencing.speed+CM55 --toolchain GCC
Check the CMSIS-Toolbox User Guide for a complete overview of the cbuild
command.
In the CMSIS view, click on the hammer icon.
This repository contains a docker image with the required dependencies for building with gcc and llvm:
docker build -t standalone-csolution .
Copy the content of the deployment for your project in the pack folder.
Build the firmware with the following command:
docker run --rm -it -v "${PWD}":/app standalone-csolution /bin/bash -c "./build.sh"
You can use the build.sh
script to compile, target and toolchain can be specified as follow:
./build.sh <TARGET> <TOOLCHAIN>
The script will also install any package present in the pack
folder.
Note
After building, the bin will be run locally on AVH.
The basic usage is:
<AVH FVP for the target> -f <fvp config file> <elf file to be loaded>
Some examples:
- Run Test on model for Cortex-M3 (speed) compiled with GCC
FVP_MPS2_Cortex-M3 -f ./Target/CM3/model_config.txt ./build/CM3/GCC/speed/outdir/CM3_inferencing.elf
- Run Test on model for Cortex-M55 with Ethos (none) compiled with Arm Compiler
FVP_Corstone_SSE-300_Ethos-U55 -f ./Target/CM55/model_config.txt ./build/CM55/AC6/speed/outdir/CM55_inferencing.elf
CM0 CM0plus CM3 CM4 CM4-FP CM7 CM33 CM55 CM55-U128 CM55-U55-128 CM55-U55-128 CM85
Tested using GCC 10.3.1, GCC 12.3.1, GCC 13.2.1, Arm Compiler v6.19 and 6.22 and Arm LLVM v17.1. Doesn't work with GCC 12.2.1 for MCU with Helium (Cortex-M55, Cortex-M85).