mirror of https://github.com/ArduPilot/ardupilot
40 lines
1.3 KiB
Markdown
40 lines
1.3 KiB
Markdown
|
# How to profile ardupilot binary on ESP32 and use result to place critical functions to the IRAM
|
||
|
## Prepare source
|
||
|
1. Configure project with `--enable-profile` option: `./waf configure --board=esp32diy --enable-profile`
|
||
|
2. Rebuild binaries
|
||
|
## Run program with profiling enabled
|
||
|
1. Flash and run binary
|
||
|
2. Try to use mode silimiar to real flight. I.E. compass/gps connected, armed state, and so no
|
||
|
3. It will write profile stat to the `/APM/APM/PROF000.TXT` files on the sdcard every one minute
|
||
|
## Use profile info to optimize program
|
||
|
1. Copy `PROF*.TXT` file from sd card
|
||
|
2. Copy file `arducopter.map` from build directory
|
||
|
2. Use them to produce `functions.list` by the script `LinkerScriptGenerator.kt` (modify paths and limits inside)
|
||
|
3. Place file `functions.list` to the `target/copter/main` folder
|
||
|
|
||
|
|
||
|
# how to build LinkerScriptGenerator.kt
|
||
|
|
||
|
$ sudo snap install --classic kotlin
|
||
|
|
||
|
# build
|
||
|
kotlinc LinkerScriptGenerator.kt -d generator.jar
|
||
|
|
||
|
# collect up profiling file into this folder... as per above.
|
||
|
|
||
|
# files that the kotlin tool expects to find in this folder:
|
||
|
"ardusub.map",
|
||
|
"PROF000.TXT",
|
||
|
|
||
|
# file/s it will create in this folder:
|
||
|
"functions.list"
|
||
|
|
||
|
|
||
|
cp ../../../build/esp32buzz/idf-plane/arduplane.map ardusub.map
|
||
|
touch PROF000.TXT
|
||
|
|
||
|
#run:
|
||
|
java -jar generator.jar
|
||
|
|
||
|
|