diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index 1d3b617a9..8b1470c25 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -20,7 +20,7 @@ jobs: uses: codespell-project/actions-codespell@v2 with: skip: ./ArduinoCore-API,./libraries/ESP8266SdFat,./libraries/Adafruit_TinyUSB_Arduino,./libraries/LittleFS/lib,./tools/pyserial,./pico-sdk,./.github,./docs/i2s.rst,./cores/rp2040/api,./libraries/FreeRTOS,./tools/libbearssl/bearssl,./include,./libraries/WiFi/examples/BearSSL_Server,./ota/uzlib,./libraries/http-parser/lib,./libraries/WebServer/examples/HelloServerBearSSL/HelloServerBearSSL.ino,./libraries/HTTPUpdateServer/examples/SecureBearSSLUpdater/SecureBearSSLUpdater.ino,./.git,./libraries/FatFS/lib/fatfs,./libraries/FatFS/src/diskio.h,./libraries/FatFS/src/ff.cpp,./libraries/FatFS/src/ffconf.h,./libraries/FatFS/src/ffsystem.cpp,./libraries/FatFS/src/ff.h,./libraries/lwIP_WINC1500/src/driver,./libraries/lwIP_WINC1500/src/common,./libraries/lwIP_WINC1500/src/bus_wrapper,./libraries/lwIP_WINC1500/src/spi_flash - ignore_words_list: ser,dout,shiftIn,acount + ignore_words_list: ser,dout,shiftIn,acount,froms - name: Get submodules for following tests run: git submodule update --init - name: Check package references diff --git a/README.md b/README.md index fb1d3b505..be44bc58e 100644 --- a/README.md +++ b/README.md @@ -137,6 +137,8 @@ Read the [Contributing Guide](https://github.com/earlephilhower/arduino-pico/blo * printf (i.e. debug) output over USB serial * Transparent use of PSRAM globals and heap (RP2350 only) * ARM or RISC-V (Hazard3) support for the RP2350 +* Semihosted serial and file system access +* GPROF profiling support The RP2040 PIO state machines (SMs) are used to generate jitter-free: * Servos diff --git a/boards.txt b/boards.txt index 21c4f69a7..2fd64f182 100644 --- a/boards.txt +++ b/boards.txt @@ -11,6 +11,7 @@ menu.psramfreq=PSRAM Speed menu.freq=CPU Speed menu.arch=CPU Architecture menu.opt=Optimize +menu.profile=Profiling menu.rtti=RTTI menu.stackprotect=Stack Protector menu.exceptions=C++ Exceptions @@ -165,6 +166,10 @@ rpipico.menu.opt.Debug=Debug (-Og) rpipico.menu.opt.Debug.build.flags.optimize=-Og rpipico.menu.opt.Disabled=Disabled (-O0) rpipico.menu.opt.Disabled.build.flags.optimize=-O0 +rpipico.menu.profile.Disabled=Disabled +rpipico.menu.profile.Disabled.build.flags.profile= +rpipico.menu.profile.Enabled=Enabled +rpipico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE rpipico.menu.rtti.Disabled=Disabled rpipico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti rpipico.menu.rtti.Enabled=Enabled @@ -373,6 +378,10 @@ rpipicow.menu.opt.Debug=Debug (-Og) rpipicow.menu.opt.Debug.build.flags.optimize=-Og rpipicow.menu.opt.Disabled=Disabled (-O0) rpipicow.menu.opt.Disabled.build.flags.optimize=-O0 +rpipicow.menu.profile.Disabled=Disabled +rpipicow.menu.profile.Disabled.build.flags.profile= +rpipicow.menu.profile.Enabled=Enabled +rpipicow.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE rpipicow.menu.rtti.Disabled=Disabled rpipicow.menu.rtti.Disabled.build.flags.rtti=-fno-rtti rpipicow.menu.rtti.Enabled=Enabled @@ -730,6 +739,10 @@ rpipico2.menu.opt.Debug=Debug (-Og) rpipico2.menu.opt.Debug.build.flags.optimize=-Og rpipico2.menu.opt.Disabled=Disabled (-O0) rpipico2.menu.opt.Disabled.build.flags.optimize=-O0 +rpipico2.menu.profile.Disabled=Disabled +rpipico2.menu.profile.Disabled.build.flags.profile= +rpipico2.menu.profile.Enabled=Enabled +rpipico2.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE rpipico2.menu.rtti.Disabled=Disabled rpipico2.menu.rtti.Disabled.build.flags.rtti=-fno-rtti rpipico2.menu.rtti.Enabled=Enabled @@ -960,6 +973,10 @@ rpipico2w.menu.opt.Debug=Debug (-Og) rpipico2w.menu.opt.Debug.build.flags.optimize=-Og rpipico2w.menu.opt.Disabled=Disabled (-O0) rpipico2w.menu.opt.Disabled.build.flags.optimize=-O0 +rpipico2w.menu.profile.Disabled=Disabled +rpipico2w.menu.profile.Disabled.build.flags.profile= +rpipico2w.menu.profile.Enabled=Enabled +rpipico2w.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE rpipico2w.menu.rtti.Disabled=Disabled rpipico2w.menu.rtti.Disabled.build.flags.rtti=-fno-rtti rpipico2w.menu.rtti.Enabled=Enabled @@ -1261,6 +1278,10 @@ rpipico2w.menu.uploadmethod.picoprobe_cmsis_dap.upload.tool.default=picoprobe_cm 0xcb_helios.menu.opt.Debug.build.flags.optimize=-Og 0xcb_helios.menu.opt.Disabled=Disabled (-O0) 0xcb_helios.menu.opt.Disabled.build.flags.optimize=-O0 +0xcb_helios.menu.profile.Disabled=Disabled +0xcb_helios.menu.profile.Disabled.build.flags.profile= +0xcb_helios.menu.profile.Enabled=Enabled +0xcb_helios.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE 0xcb_helios.menu.rtti.Disabled=Disabled 0xcb_helios.menu.rtti.Disabled.build.flags.rtti=-fno-rtti 0xcb_helios.menu.rtti.Enabled=Enabled @@ -1518,6 +1539,10 @@ adafruit_feather.menu.opt.Debug=Debug (-Og) adafruit_feather.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather.menu.opt.Disabled=Disabled (-O0) adafruit_feather.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather.menu.profile.Disabled=Disabled +adafruit_feather.menu.profile.Disabled.build.flags.profile= +adafruit_feather.menu.profile.Enabled=Enabled +adafruit_feather.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather.menu.rtti.Disabled=Disabled adafruit_feather.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather.menu.rtti.Enabled=Enabled @@ -1767,6 +1792,10 @@ adafruit_feather_scorpio.menu.opt.Debug=Debug (-Og) adafruit_feather_scorpio.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_scorpio.menu.opt.Disabled=Disabled (-O0) adafruit_feather_scorpio.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_scorpio.menu.profile.Disabled=Disabled +adafruit_feather_scorpio.menu.profile.Disabled.build.flags.profile= +adafruit_feather_scorpio.menu.profile.Enabled=Enabled +adafruit_feather_scorpio.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_scorpio.menu.rtti.Disabled=Disabled adafruit_feather_scorpio.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_scorpio.menu.rtti.Enabled=Enabled @@ -2020,6 +2049,10 @@ adafruit_feather_dvi.menu.opt.Debug=Debug (-Og) adafruit_feather_dvi.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_dvi.menu.opt.Disabled=Disabled (-O0) adafruit_feather_dvi.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_dvi.menu.profile.Disabled=Disabled +adafruit_feather_dvi.menu.profile.Disabled.build.flags.profile= +adafruit_feather_dvi.menu.profile.Enabled=Enabled +adafruit_feather_dvi.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_dvi.menu.rtti.Disabled=Disabled adafruit_feather_dvi.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_dvi.menu.rtti.Enabled=Enabled @@ -2273,6 +2306,10 @@ adafruit_feather_adalogger.menu.opt.Debug=Debug (-Og) adafruit_feather_adalogger.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_adalogger.menu.opt.Disabled=Disabled (-O0) adafruit_feather_adalogger.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_adalogger.menu.profile.Disabled=Disabled +adafruit_feather_adalogger.menu.profile.Disabled.build.flags.profile= +adafruit_feather_adalogger.menu.profile.Enabled=Enabled +adafruit_feather_adalogger.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_adalogger.menu.rtti.Disabled=Disabled adafruit_feather_adalogger.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_adalogger.menu.rtti.Enabled=Enabled @@ -2526,6 +2563,10 @@ adafruit_feather_rfm.menu.opt.Debug=Debug (-Og) adafruit_feather_rfm.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_rfm.menu.opt.Disabled=Disabled (-O0) adafruit_feather_rfm.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_rfm.menu.profile.Disabled=Disabled +adafruit_feather_rfm.menu.profile.Disabled.build.flags.profile= +adafruit_feather_rfm.menu.profile.Enabled=Enabled +adafruit_feather_rfm.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_rfm.menu.rtti.Disabled=Disabled adafruit_feather_rfm.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_rfm.menu.rtti.Enabled=Enabled @@ -2779,6 +2820,10 @@ adafruit_feather_thinkink.menu.opt.Debug=Debug (-Og) adafruit_feather_thinkink.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_thinkink.menu.opt.Disabled=Disabled (-O0) adafruit_feather_thinkink.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_thinkink.menu.profile.Disabled=Disabled +adafruit_feather_thinkink.menu.profile.Disabled.build.flags.profile= +adafruit_feather_thinkink.menu.profile.Enabled=Enabled +adafruit_feather_thinkink.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_thinkink.menu.rtti.Disabled=Disabled adafruit_feather_thinkink.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_thinkink.menu.rtti.Enabled=Enabled @@ -3032,6 +3077,10 @@ adafruit_feather_usb_host.menu.opt.Debug=Debug (-Og) adafruit_feather_usb_host.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_usb_host.menu.opt.Disabled=Disabled (-O0) adafruit_feather_usb_host.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_usb_host.menu.profile.Disabled=Disabled +adafruit_feather_usb_host.menu.profile.Disabled.build.flags.profile= +adafruit_feather_usb_host.menu.profile.Enabled=Enabled +adafruit_feather_usb_host.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_usb_host.menu.rtti.Disabled=Disabled adafruit_feather_usb_host.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_usb_host.menu.rtti.Enabled=Enabled @@ -3285,6 +3334,10 @@ adafruit_feather_can.menu.opt.Debug=Debug (-Og) adafruit_feather_can.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_can.menu.opt.Disabled=Disabled (-O0) adafruit_feather_can.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_can.menu.profile.Disabled=Disabled +adafruit_feather_can.menu.profile.Disabled.build.flags.profile= +adafruit_feather_can.menu.profile.Enabled=Enabled +adafruit_feather_can.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_can.menu.rtti.Disabled=Disabled adafruit_feather_can.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_can.menu.rtti.Enabled=Enabled @@ -3538,6 +3591,10 @@ adafruit_feather_prop_maker.menu.opt.Debug=Debug (-Og) adafruit_feather_prop_maker.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_prop_maker.menu.opt.Disabled=Disabled (-O0) adafruit_feather_prop_maker.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_prop_maker.menu.profile.Disabled=Disabled +adafruit_feather_prop_maker.menu.profile.Disabled.build.flags.profile= +adafruit_feather_prop_maker.menu.profile.Enabled=Enabled +adafruit_feather_prop_maker.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_prop_maker.menu.rtti.Disabled=Disabled adafruit_feather_prop_maker.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_prop_maker.menu.rtti.Enabled=Enabled @@ -3799,6 +3856,10 @@ adafruit_itsybitsy.menu.opt.Debug=Debug (-Og) adafruit_itsybitsy.menu.opt.Debug.build.flags.optimize=-Og adafruit_itsybitsy.menu.opt.Disabled=Disabled (-O0) adafruit_itsybitsy.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_itsybitsy.menu.profile.Disabled=Disabled +adafruit_itsybitsy.menu.profile.Disabled.build.flags.profile= +adafruit_itsybitsy.menu.profile.Enabled=Enabled +adafruit_itsybitsy.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_itsybitsy.menu.rtti.Disabled=Disabled adafruit_itsybitsy.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_itsybitsy.menu.rtti.Enabled=Enabled @@ -4108,6 +4169,10 @@ adafruit_metro.menu.opt.Debug=Debug (-Og) adafruit_metro.menu.opt.Debug.build.flags.optimize=-Og adafruit_metro.menu.opt.Disabled=Disabled (-O0) adafruit_metro.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_metro.menu.profile.Disabled=Disabled +adafruit_metro.menu.profile.Disabled.build.flags.profile= +adafruit_metro.menu.profile.Enabled=Enabled +adafruit_metro.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_metro.menu.rtti.Disabled=Disabled adafruit_metro.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_metro.menu.rtti.Enabled=Enabled @@ -4369,6 +4434,10 @@ adafruit_qtpy.menu.opt.Debug=Debug (-Og) adafruit_qtpy.menu.opt.Debug.build.flags.optimize=-Og adafruit_qtpy.menu.opt.Disabled=Disabled (-O0) adafruit_qtpy.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_qtpy.menu.profile.Disabled=Disabled +adafruit_qtpy.menu.profile.Disabled.build.flags.profile= +adafruit_qtpy.menu.profile.Enabled=Enabled +adafruit_qtpy.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_qtpy.menu.rtti.Disabled=Disabled adafruit_qtpy.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_qtpy.menu.rtti.Enabled=Enabled @@ -4630,6 +4699,10 @@ adafruit_stemmafriend.menu.opt.Debug=Debug (-Og) adafruit_stemmafriend.menu.opt.Debug.build.flags.optimize=-Og adafruit_stemmafriend.menu.opt.Disabled=Disabled (-O0) adafruit_stemmafriend.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_stemmafriend.menu.profile.Disabled=Disabled +adafruit_stemmafriend.menu.profile.Disabled.build.flags.profile= +adafruit_stemmafriend.menu.profile.Enabled=Enabled +adafruit_stemmafriend.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_stemmafriend.menu.rtti.Disabled=Disabled adafruit_stemmafriend.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_stemmafriend.menu.rtti.Enabled=Enabled @@ -4883,6 +4956,10 @@ adafruit_trinkeyrp2040qt.menu.opt.Debug=Debug (-Og) adafruit_trinkeyrp2040qt.menu.opt.Debug.build.flags.optimize=-Og adafruit_trinkeyrp2040qt.menu.opt.Disabled=Disabled (-O0) adafruit_trinkeyrp2040qt.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_trinkeyrp2040qt.menu.profile.Disabled=Disabled +adafruit_trinkeyrp2040qt.menu.profile.Disabled.build.flags.profile= +adafruit_trinkeyrp2040qt.menu.profile.Enabled=Enabled +adafruit_trinkeyrp2040qt.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_trinkeyrp2040qt.menu.rtti.Disabled=Disabled adafruit_trinkeyrp2040qt.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_trinkeyrp2040qt.menu.rtti.Enabled=Enabled @@ -5136,6 +5213,10 @@ adafruit_macropad2040.menu.opt.Debug=Debug (-Og) adafruit_macropad2040.menu.opt.Debug.build.flags.optimize=-Og adafruit_macropad2040.menu.opt.Disabled=Disabled (-O0) adafruit_macropad2040.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_macropad2040.menu.profile.Disabled=Disabled +adafruit_macropad2040.menu.profile.Disabled.build.flags.profile= +adafruit_macropad2040.menu.profile.Enabled=Enabled +adafruit_macropad2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_macropad2040.menu.rtti.Disabled=Disabled adafruit_macropad2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_macropad2040.menu.rtti.Enabled=Enabled @@ -5389,6 +5470,10 @@ adafruit_kb2040.menu.opt.Debug=Debug (-Og) adafruit_kb2040.menu.opt.Debug.build.flags.optimize=-Og adafruit_kb2040.menu.opt.Disabled=Disabled (-O0) adafruit_kb2040.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_kb2040.menu.profile.Disabled=Disabled +adafruit_kb2040.menu.profile.Disabled.build.flags.profile= +adafruit_kb2040.menu.profile.Enabled=Enabled +adafruit_kb2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_kb2040.menu.rtti.Disabled=Disabled adafruit_kb2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_kb2040.menu.rtti.Enabled=Enabled @@ -5658,6 +5743,10 @@ adafruit_feather_rp2350_hstx.menu.opt.Debug=Debug (-Og) adafruit_feather_rp2350_hstx.menu.opt.Debug.build.flags.optimize=-Og adafruit_feather_rp2350_hstx.menu.opt.Disabled=Disabled (-O0) adafruit_feather_rp2350_hstx.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_feather_rp2350_hstx.menu.profile.Disabled=Disabled +adafruit_feather_rp2350_hstx.menu.profile.Disabled.build.flags.profile= +adafruit_feather_rp2350_hstx.menu.profile.Enabled=Enabled +adafruit_feather_rp2350_hstx.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_feather_rp2350_hstx.menu.rtti.Disabled=Disabled adafruit_feather_rp2350_hstx.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_feather_rp2350_hstx.menu.rtti.Enabled=Enabled @@ -5963,6 +6052,10 @@ adafruit_floppsy.menu.opt.Debug=Debug (-Og) adafruit_floppsy.menu.opt.Debug.build.flags.optimize=-Og adafruit_floppsy.menu.opt.Disabled=Disabled (-O0) adafruit_floppsy.menu.opt.Disabled.build.flags.optimize=-O0 +adafruit_floppsy.menu.profile.Disabled=Disabled +adafruit_floppsy.menu.profile.Disabled.build.flags.profile= +adafruit_floppsy.menu.profile.Enabled=Enabled +adafruit_floppsy.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE adafruit_floppsy.menu.rtti.Disabled=Disabled adafruit_floppsy.menu.rtti.Disabled.build.flags.rtti=-fno-rtti adafruit_floppsy.menu.rtti.Enabled=Enabled @@ -7053,6 +7146,10 @@ amken_bunny.menu.opt.Debug=Debug (-Og) amken_bunny.menu.opt.Debug.build.flags.optimize=-Og amken_bunny.menu.opt.Disabled=Disabled (-O0) amken_bunny.menu.opt.Disabled.build.flags.optimize=-O0 +amken_bunny.menu.profile.Disabled=Disabled +amken_bunny.menu.profile.Disabled.build.flags.profile= +amken_bunny.menu.profile.Enabled=Enabled +amken_bunny.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE amken_bunny.menu.rtti.Disabled=Disabled amken_bunny.menu.rtti.Disabled.build.flags.rtti=-fno-rtti amken_bunny.menu.rtti.Enabled=Enabled @@ -7467,6 +7564,10 @@ amken_revelop.menu.opt.Debug=Debug (-Og) amken_revelop.menu.opt.Debug.build.flags.optimize=-Og amken_revelop.menu.opt.Disabled=Disabled (-O0) amken_revelop.menu.opt.Disabled.build.flags.optimize=-O0 +amken_revelop.menu.profile.Disabled=Disabled +amken_revelop.menu.profile.Disabled.build.flags.profile= +amken_revelop.menu.profile.Enabled=Enabled +amken_revelop.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE amken_revelop.menu.rtti.Disabled=Disabled amken_revelop.menu.rtti.Disabled.build.flags.rtti=-fno-rtti amken_revelop.menu.rtti.Enabled=Enabled @@ -7881,6 +7982,10 @@ amken_revelop_plus.menu.opt.Debug=Debug (-Og) amken_revelop_plus.menu.opt.Debug.build.flags.optimize=-Og amken_revelop_plus.menu.opt.Disabled=Disabled (-O0) amken_revelop_plus.menu.opt.Disabled.build.flags.optimize=-O0 +amken_revelop_plus.menu.profile.Disabled=Disabled +amken_revelop_plus.menu.profile.Disabled.build.flags.profile= +amken_revelop_plus.menu.profile.Enabled=Enabled +amken_revelop_plus.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE amken_revelop_plus.menu.rtti.Disabled=Disabled amken_revelop_plus.menu.rtti.Disabled.build.flags.rtti=-fno-rtti amken_revelop_plus.menu.rtti.Enabled=Enabled @@ -8183,6 +8288,10 @@ amken_revelop_es.menu.opt.Debug=Debug (-Og) amken_revelop_es.menu.opt.Debug.build.flags.optimize=-Og amken_revelop_es.menu.opt.Disabled=Disabled (-O0) amken_revelop_es.menu.opt.Disabled.build.flags.optimize=-O0 +amken_revelop_es.menu.profile.Disabled=Disabled +amken_revelop_es.menu.profile.Disabled.build.flags.profile= +amken_revelop_es.menu.profile.Enabled=Enabled +amken_revelop_es.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE amken_revelop_es.menu.rtti.Disabled=Disabled amken_revelop_es.menu.rtti.Disabled.build.flags.rtti=-fno-rtti amken_revelop_es.menu.rtti.Enabled=Enabled @@ -8497,6 +8606,10 @@ jumperless_v1.menu.opt.Debug=Debug (-Og) jumperless_v1.menu.opt.Debug.build.flags.optimize=-Og jumperless_v1.menu.opt.Disabled=Disabled (-O0) jumperless_v1.menu.opt.Disabled.build.flags.optimize=-O0 +jumperless_v1.menu.profile.Disabled=Disabled +jumperless_v1.menu.profile.Disabled.build.flags.profile= +jumperless_v1.menu.profile.Enabled=Enabled +jumperless_v1.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE jumperless_v1.menu.rtti.Disabled=Disabled jumperless_v1.menu.rtti.Disabled.build.flags.rtti=-fno-rtti jumperless_v1.menu.rtti.Enabled=Enabled @@ -8819,6 +8932,10 @@ jumperless_v5.menu.opt.Debug=Debug (-Og) jumperless_v5.menu.opt.Debug.build.flags.optimize=-Og jumperless_v5.menu.opt.Disabled=Disabled (-O0) jumperless_v5.menu.opt.Disabled.build.flags.optimize=-O0 +jumperless_v5.menu.profile.Disabled=Disabled +jumperless_v5.menu.profile.Disabled.build.flags.profile= +jumperless_v5.menu.profile.Enabled=Enabled +jumperless_v5.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE jumperless_v5.menu.rtti.Disabled=Disabled jumperless_v5.menu.rtti.Disabled.build.flags.rtti=-fno-rtti jumperless_v5.menu.rtti.Enabled=Enabled @@ -9132,6 +9249,10 @@ arduino_nano_connect.menu.opt.Debug=Debug (-Og) arduino_nano_connect.menu.opt.Debug.build.flags.optimize=-Og arduino_nano_connect.menu.opt.Disabled=Disabled (-O0) arduino_nano_connect.menu.opt.Disabled.build.flags.optimize=-O0 +arduino_nano_connect.menu.profile.Disabled=Disabled +arduino_nano_connect.menu.profile.Disabled.build.flags.profile= +arduino_nano_connect.menu.profile.Enabled=Enabled +arduino_nano_connect.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE arduino_nano_connect.menu.rtti.Disabled=Disabled arduino_nano_connect.menu.rtti.Disabled.build.flags.rtti=-fno-rtti arduino_nano_connect.menu.rtti.Enabled=Enabled @@ -9363,6 +9484,10 @@ artronshop_rp2_nano.menu.opt.Debug=Debug (-Og) artronshop_rp2_nano.menu.opt.Debug.build.flags.optimize=-Og artronshop_rp2_nano.menu.opt.Disabled=Disabled (-O0) artronshop_rp2_nano.menu.opt.Disabled.build.flags.optimize=-O0 +artronshop_rp2_nano.menu.profile.Disabled=Disabled +artronshop_rp2_nano.menu.profile.Disabled.build.flags.profile= +artronshop_rp2_nano.menu.profile.Enabled=Enabled +artronshop_rp2_nano.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE artronshop_rp2_nano.menu.rtti.Disabled=Disabled artronshop_rp2_nano.menu.rtti.Disabled.build.flags.rtti=-fno-rtti artronshop_rp2_nano.menu.rtti.Enabled=Enabled @@ -9692,6 +9817,10 @@ breadstick_raspberry.menu.opt.Debug=Debug (-Og) breadstick_raspberry.menu.opt.Debug.build.flags.optimize=-Og breadstick_raspberry.menu.opt.Disabled=Disabled (-O0) breadstick_raspberry.menu.opt.Disabled.build.flags.optimize=-O0 +breadstick_raspberry.menu.profile.Disabled=Disabled +breadstick_raspberry.menu.profile.Disabled.build.flags.profile= +breadstick_raspberry.menu.profile.Enabled=Enabled +breadstick_raspberry.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE breadstick_raspberry.menu.rtti.Disabled=Disabled breadstick_raspberry.menu.rtti.Disabled.build.flags.rtti=-fno-rtti breadstick_raspberry.menu.rtti.Enabled=Enabled @@ -9966,6 +10095,10 @@ bridgetek_idm2040_7a.menu.opt.Debug=Debug (-Og) bridgetek_idm2040_7a.menu.opt.Debug.build.flags.optimize=-Og bridgetek_idm2040_7a.menu.opt.Disabled=Disabled (-O0) bridgetek_idm2040_7a.menu.opt.Disabled.build.flags.optimize=-O0 +bridgetek_idm2040_7a.menu.profile.Disabled=Disabled +bridgetek_idm2040_7a.menu.profile.Disabled.build.flags.profile= +bridgetek_idm2040_7a.menu.profile.Enabled=Enabled +bridgetek_idm2040_7a.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE bridgetek_idm2040_7a.menu.rtti.Disabled=Disabled bridgetek_idm2040_7a.menu.rtti.Disabled.build.flags.rtti=-fno-rtti bridgetek_idm2040_7a.menu.rtti.Enabled=Enabled @@ -10216,6 +10349,10 @@ bridgetek_idm2040_43a.menu.opt.Debug=Debug (-Og) bridgetek_idm2040_43a.menu.opt.Debug.build.flags.optimize=-Og bridgetek_idm2040_43a.menu.opt.Disabled=Disabled (-O0) bridgetek_idm2040_43a.menu.opt.Disabled.build.flags.optimize=-O0 +bridgetek_idm2040_43a.menu.profile.Disabled=Disabled +bridgetek_idm2040_43a.menu.profile.Disabled.build.flags.profile= +bridgetek_idm2040_43a.menu.profile.Enabled=Enabled +bridgetek_idm2040_43a.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE bridgetek_idm2040_43a.menu.rtti.Disabled=Disabled bridgetek_idm2040_43a.menu.rtti.Disabled.build.flags.rtti=-fno-rtti bridgetek_idm2040_43a.menu.rtti.Enabled=Enabled @@ -10455,6 +10592,10 @@ cytron_iriv_io_controller.menu.opt.Debug=Debug (-Og) cytron_iriv_io_controller.menu.opt.Debug.build.flags.optimize=-Og cytron_iriv_io_controller.menu.opt.Disabled=Disabled (-O0) cytron_iriv_io_controller.menu.opt.Disabled.build.flags.optimize=-O0 +cytron_iriv_io_controller.menu.profile.Disabled=Disabled +cytron_iriv_io_controller.menu.profile.Disabled.build.flags.profile= +cytron_iriv_io_controller.menu.profile.Enabled=Enabled +cytron_iriv_io_controller.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE cytron_iriv_io_controller.menu.rtti.Disabled=Disabled cytron_iriv_io_controller.menu.rtti.Disabled.build.flags.rtti=-fno-rtti cytron_iriv_io_controller.menu.rtti.Enabled=Enabled @@ -10686,6 +10827,10 @@ cytron_maker_nano_rp2040.menu.opt.Debug=Debug (-Og) cytron_maker_nano_rp2040.menu.opt.Debug.build.flags.optimize=-Og cytron_maker_nano_rp2040.menu.opt.Disabled=Disabled (-O0) cytron_maker_nano_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +cytron_maker_nano_rp2040.menu.profile.Disabled=Disabled +cytron_maker_nano_rp2040.menu.profile.Disabled.build.flags.profile= +cytron_maker_nano_rp2040.menu.profile.Enabled=Enabled +cytron_maker_nano_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE cytron_maker_nano_rp2040.menu.rtti.Disabled=Disabled cytron_maker_nano_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti cytron_maker_nano_rp2040.menu.rtti.Enabled=Enabled @@ -10917,6 +11062,10 @@ cytron_maker_pi_rp2040.menu.opt.Debug=Debug (-Og) cytron_maker_pi_rp2040.menu.opt.Debug.build.flags.optimize=-Og cytron_maker_pi_rp2040.menu.opt.Disabled=Disabled (-O0) cytron_maker_pi_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +cytron_maker_pi_rp2040.menu.profile.Disabled=Disabled +cytron_maker_pi_rp2040.menu.profile.Disabled.build.flags.profile= +cytron_maker_pi_rp2040.menu.profile.Enabled=Enabled +cytron_maker_pi_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE cytron_maker_pi_rp2040.menu.rtti.Disabled=Disabled cytron_maker_pi_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti cytron_maker_pi_rp2040.menu.rtti.Enabled=Enabled @@ -11148,6 +11297,10 @@ cytron_maker_uno_rp2040.menu.opt.Debug=Debug (-Og) cytron_maker_uno_rp2040.menu.opt.Debug.build.flags.optimize=-Og cytron_maker_uno_rp2040.menu.opt.Disabled=Disabled (-O0) cytron_maker_uno_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +cytron_maker_uno_rp2040.menu.profile.Disabled=Disabled +cytron_maker_uno_rp2040.menu.profile.Disabled.build.flags.profile= +cytron_maker_uno_rp2040.menu.profile.Enabled=Enabled +cytron_maker_uno_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE cytron_maker_uno_rp2040.menu.rtti.Disabled=Disabled cytron_maker_uno_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti cytron_maker_uno_rp2040.menu.rtti.Enabled=Enabled @@ -11387,6 +11540,10 @@ cytron_motion_2350_pro.menu.opt.Debug=Debug (-Og) cytron_motion_2350_pro.menu.opt.Debug.build.flags.optimize=-Og cytron_motion_2350_pro.menu.opt.Disabled=Disabled (-O0) cytron_motion_2350_pro.menu.opt.Disabled.build.flags.optimize=-O0 +cytron_motion_2350_pro.menu.profile.Disabled=Disabled +cytron_motion_2350_pro.menu.profile.Disabled.build.flags.profile= +cytron_motion_2350_pro.menu.profile.Enabled=Enabled +cytron_motion_2350_pro.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE cytron_motion_2350_pro.menu.rtti.Disabled=Disabled cytron_motion_2350_pro.menu.rtti.Disabled.build.flags.rtti=-fno-rtti cytron_motion_2350_pro.menu.rtti.Enabled=Enabled @@ -11618,6 +11775,10 @@ datanoisetv_picoadk.menu.opt.Debug=Debug (-Og) datanoisetv_picoadk.menu.opt.Debug.build.flags.optimize=-Og datanoisetv_picoadk.menu.opt.Disabled=Disabled (-O0) datanoisetv_picoadk.menu.opt.Disabled.build.flags.optimize=-O0 +datanoisetv_picoadk.menu.profile.Disabled=Disabled +datanoisetv_picoadk.menu.profile.Disabled.build.flags.profile= +datanoisetv_picoadk.menu.profile.Enabled=Enabled +datanoisetv_picoadk.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE datanoisetv_picoadk.menu.rtti.Disabled=Disabled datanoisetv_picoadk.menu.rtti.Disabled.build.flags.rtti=-fno-rtti datanoisetv_picoadk.menu.rtti.Enabled=Enabled @@ -11883,6 +12044,10 @@ datanoisetv_picoadk_v2.menu.opt.Debug=Debug (-Og) datanoisetv_picoadk_v2.menu.opt.Debug.build.flags.optimize=-Og datanoisetv_picoadk_v2.menu.opt.Disabled=Disabled (-O0) datanoisetv_picoadk_v2.menu.opt.Disabled.build.flags.optimize=-O0 +datanoisetv_picoadk_v2.menu.profile.Disabled=Disabled +datanoisetv_picoadk_v2.menu.profile.Disabled.build.flags.profile= +datanoisetv_picoadk_v2.menu.profile.Enabled=Enabled +datanoisetv_picoadk_v2.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE datanoisetv_picoadk_v2.menu.rtti.Disabled=Disabled datanoisetv_picoadk_v2.menu.rtti.Disabled.build.flags.rtti=-fno-rtti datanoisetv_picoadk_v2.menu.rtti.Enabled=Enabled @@ -12188,6 +12353,10 @@ degz_suibo.menu.opt.Debug=Debug (-Og) degz_suibo.menu.opt.Debug.build.flags.optimize=-Og degz_suibo.menu.opt.Disabled=Disabled (-O0) degz_suibo.menu.opt.Disabled.build.flags.optimize=-O0 +degz_suibo.menu.profile.Disabled=Disabled +degz_suibo.menu.profile.Disabled.build.flags.profile= +degz_suibo.menu.profile.Enabled=Enabled +degz_suibo.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE degz_suibo.menu.rtti.Disabled=Disabled degz_suibo.menu.rtti.Disabled.build.flags.rtti=-fno-rtti degz_suibo.menu.rtti.Enabled=Enabled @@ -12433,6 +12602,10 @@ flyboard2040_core.menu.opt.Debug=Debug (-Og) flyboard2040_core.menu.opt.Debug.build.flags.optimize=-Og flyboard2040_core.menu.opt.Disabled=Disabled (-O0) flyboard2040_core.menu.opt.Disabled.build.flags.optimize=-O0 +flyboard2040_core.menu.profile.Disabled=Disabled +flyboard2040_core.menu.profile.Disabled.build.flags.profile= +flyboard2040_core.menu.profile.Enabled=Enabled +flyboard2040_core.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE flyboard2040_core.menu.rtti.Disabled=Disabled flyboard2040_core.menu.rtti.Disabled.build.flags.rtti=-fno-rtti flyboard2040_core.menu.rtti.Enabled=Enabled @@ -12648,6 +12821,10 @@ dfrobot_beetle_rp2040.menu.opt.Debug=Debug (-Og) dfrobot_beetle_rp2040.menu.opt.Debug.build.flags.optimize=-Og dfrobot_beetle_rp2040.menu.opt.Disabled=Disabled (-O0) dfrobot_beetle_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +dfrobot_beetle_rp2040.menu.profile.Disabled=Disabled +dfrobot_beetle_rp2040.menu.profile.Disabled.build.flags.profile= +dfrobot_beetle_rp2040.menu.profile.Enabled=Enabled +dfrobot_beetle_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE dfrobot_beetle_rp2040.menu.rtti.Disabled=Disabled dfrobot_beetle_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti dfrobot_beetle_rp2040.menu.rtti.Enabled=Enabled @@ -12893,6 +13070,10 @@ DudesCab.menu.opt.Debug=Debug (-Og) DudesCab.menu.opt.Debug.build.flags.optimize=-Og DudesCab.menu.opt.Disabled=Disabled (-O0) DudesCab.menu.opt.Disabled.build.flags.optimize=-O0 +DudesCab.menu.profile.Disabled=Disabled +DudesCab.menu.profile.Disabled.build.flags.profile= +DudesCab.menu.profile.Enabled=Enabled +DudesCab.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE DudesCab.menu.rtti.Disabled=Disabled DudesCab.menu.rtti.Disabled.build.flags.rtti=-fno-rtti DudesCab.menu.rtti.Enabled=Enabled @@ -13124,6 +13305,10 @@ electroniccats_huntercat_nfc.menu.opt.Debug=Debug (-Og) electroniccats_huntercat_nfc.menu.opt.Debug.build.flags.optimize=-Og electroniccats_huntercat_nfc.menu.opt.Disabled=Disabled (-O0) electroniccats_huntercat_nfc.menu.opt.Disabled.build.flags.optimize=-O0 +electroniccats_huntercat_nfc.menu.profile.Disabled=Disabled +electroniccats_huntercat_nfc.menu.profile.Disabled.build.flags.profile= +electroniccats_huntercat_nfc.menu.profile.Enabled=Enabled +electroniccats_huntercat_nfc.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE electroniccats_huntercat_nfc.menu.rtti.Disabled=Disabled electroniccats_huntercat_nfc.menu.rtti.Disabled.build.flags.rtti=-fno-rtti electroniccats_huntercat_nfc.menu.rtti.Enabled=Enabled @@ -13429,6 +13614,10 @@ evn_alpha.menu.opt.Debug=Debug (-Og) evn_alpha.menu.opt.Debug.build.flags.optimize=-Og evn_alpha.menu.opt.Disabled=Disabled (-O0) evn_alpha.menu.opt.Disabled.build.flags.optimize=-O0 +evn_alpha.menu.profile.Disabled=Disabled +evn_alpha.menu.profile.Disabled.build.flags.profile= +evn_alpha.menu.profile.Enabled=Enabled +evn_alpha.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE evn_alpha.menu.rtti.Disabled=Disabled evn_alpha.menu.rtti.Disabled.build.flags.rtti=-fno-rtti evn_alpha.menu.rtti.Enabled=Enabled @@ -13636,6 +13825,10 @@ extelec_rc2040.menu.opt.Debug=Debug (-Og) extelec_rc2040.menu.opt.Debug.build.flags.optimize=-Og extelec_rc2040.menu.opt.Disabled=Disabled (-O0) extelec_rc2040.menu.opt.Disabled.build.flags.optimize=-O0 +extelec_rc2040.menu.profile.Disabled=Disabled +extelec_rc2040.menu.profile.Disabled.build.flags.profile= +extelec_rc2040.menu.profile.Enabled=Enabled +extelec_rc2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE extelec_rc2040.menu.rtti.Disabled=Disabled extelec_rc2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti extelec_rc2040.menu.rtti.Enabled=Enabled @@ -13909,6 +14102,10 @@ groundstudio_marble_pico.menu.opt.Debug=Debug (-Og) groundstudio_marble_pico.menu.opt.Debug.build.flags.optimize=-Og groundstudio_marble_pico.menu.opt.Disabled=Disabled (-O0) groundstudio_marble_pico.menu.opt.Disabled.build.flags.optimize=-O0 +groundstudio_marble_pico.menu.profile.Disabled=Disabled +groundstudio_marble_pico.menu.profile.Disabled.build.flags.profile= +groundstudio_marble_pico.menu.profile.Enabled=Enabled +groundstudio_marble_pico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE groundstudio_marble_pico.menu.rtti.Disabled=Disabled groundstudio_marble_pico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti groundstudio_marble_pico.menu.rtti.Enabled=Enabled @@ -14182,6 +14379,10 @@ challenger_2040_lte.menu.opt.Debug=Debug (-Og) challenger_2040_lte.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_lte.menu.opt.Disabled=Disabled (-O0) challenger_2040_lte.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_lte.menu.profile.Disabled=Disabled +challenger_2040_lte.menu.profile.Disabled.build.flags.profile= +challenger_2040_lte.menu.profile.Enabled=Enabled +challenger_2040_lte.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_lte.menu.rtti.Disabled=Disabled challenger_2040_lte.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_lte.menu.rtti.Enabled=Enabled @@ -14455,6 +14656,10 @@ challenger_2040_lora.menu.opt.Debug=Debug (-Og) challenger_2040_lora.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_lora.menu.opt.Disabled=Disabled (-O0) challenger_2040_lora.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_lora.menu.profile.Disabled=Disabled +challenger_2040_lora.menu.profile.Disabled.build.flags.profile= +challenger_2040_lora.menu.profile.Enabled=Enabled +challenger_2040_lora.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_lora.menu.rtti.Disabled=Disabled challenger_2040_lora.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_lora.menu.rtti.Enabled=Enabled @@ -14728,6 +14933,10 @@ challenger_2040_subghz.menu.opt.Debug=Debug (-Og) challenger_2040_subghz.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_subghz.menu.opt.Disabled=Disabled (-O0) challenger_2040_subghz.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_subghz.menu.profile.Disabled=Disabled +challenger_2040_subghz.menu.profile.Disabled.build.flags.profile= +challenger_2040_subghz.menu.profile.Enabled=Enabled +challenger_2040_subghz.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_subghz.menu.rtti.Disabled=Disabled challenger_2040_subghz.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_subghz.menu.rtti.Enabled=Enabled @@ -15002,6 +15211,10 @@ challenger_2040_wifi.menu.opt.Debug=Debug (-Og) challenger_2040_wifi.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_wifi.menu.opt.Disabled=Disabled (-O0) challenger_2040_wifi.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_wifi.menu.profile.Disabled=Disabled +challenger_2040_wifi.menu.profile.Disabled.build.flags.profile= +challenger_2040_wifi.menu.profile.Enabled=Enabled +challenger_2040_wifi.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_wifi.menu.rtti.Disabled=Disabled challenger_2040_wifi.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_wifi.menu.rtti.Enabled=Enabled @@ -15376,6 +15589,10 @@ challenger_2040_wifi_ble.menu.opt.Debug=Debug (-Og) challenger_2040_wifi_ble.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_wifi_ble.menu.opt.Disabled=Disabled (-O0) challenger_2040_wifi_ble.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_wifi_ble.menu.profile.Disabled=Disabled +challenger_2040_wifi_ble.menu.profile.Disabled.build.flags.profile= +challenger_2040_wifi_ble.menu.profile.Enabled=Enabled +challenger_2040_wifi_ble.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_wifi_ble.menu.rtti.Disabled=Disabled challenger_2040_wifi_ble.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_wifi_ble.menu.rtti.Enabled=Enabled @@ -15650,6 +15867,10 @@ challenger_2040_wifi6_ble.menu.opt.Debug=Debug (-Og) challenger_2040_wifi6_ble.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_wifi6_ble.menu.opt.Disabled=Disabled (-O0) challenger_2040_wifi6_ble.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_wifi6_ble.menu.profile.Disabled=Disabled +challenger_2040_wifi6_ble.menu.profile.Disabled.build.flags.profile= +challenger_2040_wifi6_ble.menu.profile.Enabled=Enabled +challenger_2040_wifi6_ble.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_wifi6_ble.menu.rtti.Disabled=Disabled challenger_2040_wifi6_ble.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_wifi6_ble.menu.rtti.Enabled=Enabled @@ -15924,6 +16145,10 @@ challenger_nb_2040_wifi.menu.opt.Debug=Debug (-Og) challenger_nb_2040_wifi.menu.opt.Debug.build.flags.optimize=-Og challenger_nb_2040_wifi.menu.opt.Disabled=Disabled (-O0) challenger_nb_2040_wifi.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_nb_2040_wifi.menu.profile.Disabled=Disabled +challenger_nb_2040_wifi.menu.profile.Disabled.build.flags.profile= +challenger_nb_2040_wifi.menu.profile.Enabled=Enabled +challenger_nb_2040_wifi.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_nb_2040_wifi.menu.rtti.Disabled=Disabled challenger_nb_2040_wifi.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_nb_2040_wifi.menu.rtti.Enabled=Enabled @@ -16197,6 +16422,10 @@ challenger_2040_sdrtc.menu.opt.Debug=Debug (-Og) challenger_2040_sdrtc.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_sdrtc.menu.opt.Disabled=Disabled (-O0) challenger_2040_sdrtc.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_sdrtc.menu.profile.Disabled=Disabled +challenger_2040_sdrtc.menu.profile.Disabled.build.flags.profile= +challenger_2040_sdrtc.menu.profile.Enabled=Enabled +challenger_2040_sdrtc.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_sdrtc.menu.rtti.Disabled=Disabled challenger_2040_sdrtc.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_sdrtc.menu.rtti.Enabled=Enabled @@ -16470,6 +16699,10 @@ challenger_2040_nfc.menu.opt.Debug=Debug (-Og) challenger_2040_nfc.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_nfc.menu.opt.Disabled=Disabled (-O0) challenger_2040_nfc.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_nfc.menu.profile.Disabled=Disabled +challenger_2040_nfc.menu.profile.Disabled.build.flags.profile= +challenger_2040_nfc.menu.profile.Enabled=Enabled +challenger_2040_nfc.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_nfc.menu.rtti.Disabled=Disabled challenger_2040_nfc.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_nfc.menu.rtti.Enabled=Enabled @@ -16743,6 +16976,10 @@ challenger_2040_uwb.menu.opt.Debug=Debug (-Og) challenger_2040_uwb.menu.opt.Debug.build.flags.optimize=-Og challenger_2040_uwb.menu.opt.Disabled=Disabled (-O0) challenger_2040_uwb.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2040_uwb.menu.profile.Disabled=Disabled +challenger_2040_uwb.menu.profile.Disabled.build.flags.profile= +challenger_2040_uwb.menu.profile.Enabled=Enabled +challenger_2040_uwb.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2040_uwb.menu.rtti.Disabled=Disabled challenger_2040_uwb.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2040_uwb.menu.rtti.Enabled=Enabled @@ -17017,6 +17254,10 @@ connectivity_2040_lte_wifi_ble.menu.opt.Debug=Debug (-Og) connectivity_2040_lte_wifi_ble.menu.opt.Debug.build.flags.optimize=-Og connectivity_2040_lte_wifi_ble.menu.opt.Disabled=Disabled (-O0) connectivity_2040_lte_wifi_ble.menu.opt.Disabled.build.flags.optimize=-O0 +connectivity_2040_lte_wifi_ble.menu.profile.Disabled=Disabled +connectivity_2040_lte_wifi_ble.menu.profile.Disabled.build.flags.profile= +connectivity_2040_lte_wifi_ble.menu.profile.Enabled=Enabled +connectivity_2040_lte_wifi_ble.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE connectivity_2040_lte_wifi_ble.menu.rtti.Disabled=Disabled connectivity_2040_lte_wifi_ble.menu.rtti.Disabled.build.flags.rtti=-fno-rtti connectivity_2040_lte_wifi_ble.menu.rtti.Enabled=Enabled @@ -17291,6 +17532,10 @@ ilabs_rpico32.menu.opt.Debug=Debug (-Og) ilabs_rpico32.menu.opt.Debug.build.flags.optimize=-Og ilabs_rpico32.menu.opt.Disabled=Disabled (-O0) ilabs_rpico32.menu.opt.Disabled.build.flags.optimize=-O0 +ilabs_rpico32.menu.profile.Disabled=Disabled +ilabs_rpico32.menu.profile.Disabled.build.flags.profile= +ilabs_rpico32.menu.profile.Enabled=Enabled +ilabs_rpico32.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE ilabs_rpico32.menu.rtti.Disabled=Disabled ilabs_rpico32.menu.rtti.Disabled.build.flags.rtti=-fno-rtti ilabs_rpico32.menu.rtti.Enabled=Enabled @@ -17673,6 +17918,10 @@ challenger_2350_wifi6_ble5.menu.opt.Debug=Debug (-Og) challenger_2350_wifi6_ble5.menu.opt.Debug.build.flags.optimize=-Og challenger_2350_wifi6_ble5.menu.opt.Disabled=Disabled (-O0) challenger_2350_wifi6_ble5.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2350_wifi6_ble5.menu.profile.Disabled=Disabled +challenger_2350_wifi6_ble5.menu.profile.Disabled.build.flags.profile= +challenger_2350_wifi6_ble5.menu.profile.Enabled=Enabled +challenger_2350_wifi6_ble5.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2350_wifi6_ble5.menu.rtti.Disabled=Disabled challenger_2350_wifi6_ble5.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2350_wifi6_ble5.menu.rtti.Enabled=Enabled @@ -17954,6 +18203,10 @@ challenger_2350_bconnect.menu.opt.Debug=Debug (-Og) challenger_2350_bconnect.menu.opt.Debug.build.flags.optimize=-Og challenger_2350_bconnect.menu.opt.Disabled=Disabled (-O0) challenger_2350_bconnect.menu.opt.Disabled.build.flags.optimize=-O0 +challenger_2350_bconnect.menu.profile.Disabled=Disabled +challenger_2350_bconnect.menu.profile.Disabled.build.flags.profile= +challenger_2350_bconnect.menu.profile.Enabled=Enabled +challenger_2350_bconnect.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE challenger_2350_bconnect.menu.rtti.Disabled=Disabled challenger_2350_bconnect.menu.rtti.Disabled.build.flags.rtti=-fno-rtti challenger_2350_bconnect.menu.rtti.Enabled=Enabled @@ -18227,6 +18480,10 @@ melopero_cookie_rp2040.menu.opt.Debug=Debug (-Og) melopero_cookie_rp2040.menu.opt.Debug.build.flags.optimize=-Og melopero_cookie_rp2040.menu.opt.Disabled=Disabled (-O0) melopero_cookie_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +melopero_cookie_rp2040.menu.profile.Disabled=Disabled +melopero_cookie_rp2040.menu.profile.Disabled.build.flags.profile= +melopero_cookie_rp2040.menu.profile.Enabled=Enabled +melopero_cookie_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE melopero_cookie_rp2040.menu.rtti.Disabled=Disabled melopero_cookie_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti melopero_cookie_rp2040.menu.rtti.Enabled=Enabled @@ -18556,6 +18813,10 @@ melopero_shake_rp2040.menu.opt.Debug=Debug (-Og) melopero_shake_rp2040.menu.opt.Debug.build.flags.optimize=-Og melopero_shake_rp2040.menu.opt.Disabled=Disabled (-O0) melopero_shake_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +melopero_shake_rp2040.menu.profile.Disabled=Disabled +melopero_shake_rp2040.menu.profile.Disabled.build.flags.profile= +melopero_shake_rp2040.menu.profile.Enabled=Enabled +melopero_shake_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE melopero_shake_rp2040.menu.rtti.Disabled=Disabled melopero_shake_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti melopero_shake_rp2040.menu.rtti.Enabled=Enabled @@ -18836,6 +19097,10 @@ akana_r1.menu.opt.Debug=Debug (-Og) akana_r1.menu.opt.Debug.build.flags.optimize=-Og akana_r1.menu.opt.Disabled=Disabled (-O0) akana_r1.menu.opt.Disabled.build.flags.optimize=-O0 +akana_r1.menu.profile.Disabled=Disabled +akana_r1.menu.profile.Disabled.build.flags.profile= +akana_r1.menu.profile.Enabled=Enabled +akana_r1.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE akana_r1.menu.rtti.Disabled=Disabled akana_r1.menu.rtti.Disabled.build.flags.rtti=-fno-rtti akana_r1.menu.rtti.Enabled=Enabled @@ -19081,6 +19346,10 @@ nekosystems_bl2040_mini.menu.opt.Debug=Debug (-Og) nekosystems_bl2040_mini.menu.opt.Debug.build.flags.optimize=-Og nekosystems_bl2040_mini.menu.opt.Disabled=Disabled (-O0) nekosystems_bl2040_mini.menu.opt.Disabled.build.flags.optimize=-O0 +nekosystems_bl2040_mini.menu.profile.Disabled=Disabled +nekosystems_bl2040_mini.menu.profile.Disabled.build.flags.profile= +nekosystems_bl2040_mini.menu.profile.Enabled=Enabled +nekosystems_bl2040_mini.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE nekosystems_bl2040_mini.menu.rtti.Disabled=Disabled nekosystems_bl2040_mini.menu.rtti.Disabled.build.flags.rtti=-fno-rtti nekosystems_bl2040_mini.menu.rtti.Enabled=Enabled @@ -19326,6 +19595,10 @@ newsan_archi.menu.opt.Debug=Debug (-Og) newsan_archi.menu.opt.Debug.build.flags.optimize=-Og newsan_archi.menu.opt.Disabled=Disabled (-O0) newsan_archi.menu.opt.Disabled.build.flags.optimize=-O0 +newsan_archi.menu.profile.Disabled=Disabled +newsan_archi.menu.profile.Disabled.build.flags.profile= +newsan_archi.menu.profile.Enabled=Enabled +newsan_archi.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE newsan_archi.menu.rtti.Disabled=Disabled newsan_archi.menu.rtti.Disabled.build.flags.rtti=-fno-rtti newsan_archi.menu.rtti.Enabled=Enabled @@ -19555,6 +19828,10 @@ nullbits_bit_c_pro.menu.opt.Debug=Debug (-Og) nullbits_bit_c_pro.menu.opt.Debug.build.flags.optimize=-Og nullbits_bit_c_pro.menu.opt.Disabled=Disabled (-O0) nullbits_bit_c_pro.menu.opt.Disabled.build.flags.optimize=-O0 +nullbits_bit_c_pro.menu.profile.Disabled=Disabled +nullbits_bit_c_pro.menu.profile.Disabled.build.flags.profile= +nullbits_bit_c_pro.menu.profile.Enabled=Enabled +nullbits_bit_c_pro.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE nullbits_bit_c_pro.menu.rtti.Disabled=Disabled nullbits_bit_c_pro.menu.rtti.Disabled.build.flags.rtti=-fno-rtti nullbits_bit_c_pro.menu.rtti.Enabled=Enabled @@ -19786,6 +20063,10 @@ olimex_rp2040pico30_2mb.menu.opt.Debug=Debug (-Og) olimex_rp2040pico30_2mb.menu.opt.Debug.build.flags.optimize=-Og olimex_rp2040pico30_2mb.menu.opt.Disabled=Disabled (-O0) olimex_rp2040pico30_2mb.menu.opt.Disabled.build.flags.optimize=-O0 +olimex_rp2040pico30_2mb.menu.profile.Disabled=Disabled +olimex_rp2040pico30_2mb.menu.profile.Disabled.build.flags.profile= +olimex_rp2040pico30_2mb.menu.profile.Enabled=Enabled +olimex_rp2040pico30_2mb.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE olimex_rp2040pico30_2mb.menu.rtti.Disabled=Disabled olimex_rp2040pico30_2mb.menu.rtti.Disabled.build.flags.rtti=-fno-rtti olimex_rp2040pico30_2mb.menu.rtti.Enabled=Enabled @@ -20115,6 +20396,10 @@ olimex_rp2040pico30_16mb.menu.opt.Debug=Debug (-Og) olimex_rp2040pico30_16mb.menu.opt.Debug.build.flags.optimize=-Og olimex_rp2040pico30_16mb.menu.opt.Disabled=Disabled (-O0) olimex_rp2040pico30_16mb.menu.opt.Disabled.build.flags.optimize=-O0 +olimex_rp2040pico30_16mb.menu.profile.Disabled=Disabled +olimex_rp2040pico30_16mb.menu.profile.Disabled.build.flags.profile= +olimex_rp2040pico30_16mb.menu.profile.Enabled=Enabled +olimex_rp2040pico30_16mb.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE olimex_rp2040pico30_16mb.menu.rtti.Disabled=Disabled olimex_rp2040pico30_16mb.menu.rtti.Disabled.build.flags.rtti=-fno-rtti olimex_rp2040pico30_16mb.menu.rtti.Enabled=Enabled @@ -20388,6 +20673,10 @@ pimoroni_pga2040.menu.opt.Debug=Debug (-Og) pimoroni_pga2040.menu.opt.Debug.build.flags.optimize=-Og pimoroni_pga2040.menu.opt.Disabled=Disabled (-O0) pimoroni_pga2040.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_pga2040.menu.profile.Disabled=Disabled +pimoroni_pga2040.menu.profile.Disabled.build.flags.profile= +pimoroni_pga2040.menu.profile.Enabled=Enabled +pimoroni_pga2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_pga2040.menu.rtti.Disabled=Disabled pimoroni_pga2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_pga2040.menu.rtti.Enabled=Enabled @@ -20725,6 +21014,10 @@ pimoroni_pga2350.menu.opt.Debug=Debug (-Og) pimoroni_pga2350.menu.opt.Debug.build.flags.optimize=-Og pimoroni_pga2350.menu.opt.Disabled=Disabled (-O0) pimoroni_pga2350.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_pga2350.menu.profile.Disabled=Disabled +pimoroni_pga2350.menu.profile.Disabled.build.flags.profile= +pimoroni_pga2350.menu.profile.Enabled=Enabled +pimoroni_pga2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_pga2350.menu.rtti.Disabled=Disabled pimoroni_pga2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_pga2350.menu.rtti.Enabled=Enabled @@ -21062,6 +21355,10 @@ pimoroni_pico_plus_2.menu.opt.Debug=Debug (-Og) pimoroni_pico_plus_2.menu.opt.Debug.build.flags.optimize=-Og pimoroni_pico_plus_2.menu.opt.Disabled=Disabled (-O0) pimoroni_pico_plus_2.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_pico_plus_2.menu.profile.Disabled=Disabled +pimoroni_pico_plus_2.menu.profile.Disabled.build.flags.profile= +pimoroni_pico_plus_2.menu.profile.Enabled=Enabled +pimoroni_pico_plus_2.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_pico_plus_2.menu.rtti.Disabled=Disabled pimoroni_pico_plus_2.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_pico_plus_2.menu.rtti.Enabled=Enabled @@ -21400,6 +21697,10 @@ pimoroni_pico_plus_2w.menu.opt.Debug=Debug (-Og) pimoroni_pico_plus_2w.menu.opt.Debug.build.flags.optimize=-Og pimoroni_pico_plus_2w.menu.opt.Disabled=Disabled (-O0) pimoroni_pico_plus_2w.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_pico_plus_2w.menu.profile.Disabled=Disabled +pimoroni_pico_plus_2w.menu.profile.Disabled.build.flags.profile= +pimoroni_pico_plus_2w.menu.profile.Enabled=Enabled +pimoroni_pico_plus_2w.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_pico_plus_2w.menu.rtti.Disabled=Disabled pimoroni_pico_plus_2w.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_pico_plus_2w.menu.rtti.Enabled=Enabled @@ -21735,6 +22036,10 @@ pimoroni_plasma2040.menu.opt.Debug=Debug (-Og) pimoroni_plasma2040.menu.opt.Debug.build.flags.optimize=-Og pimoroni_plasma2040.menu.opt.Disabled=Disabled (-O0) pimoroni_plasma2040.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_plasma2040.menu.profile.Disabled=Disabled +pimoroni_plasma2040.menu.profile.Disabled.build.flags.profile= +pimoroni_plasma2040.menu.profile.Enabled=Enabled +pimoroni_plasma2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_plasma2040.menu.rtti.Disabled=Disabled pimoroni_plasma2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_plasma2040.menu.rtti.Enabled=Enabled @@ -21994,6 +22299,10 @@ pimoroni_tiny2040.menu.opt.Debug=Debug (-Og) pimoroni_tiny2040.menu.opt.Debug.build.flags.optimize=-Og pimoroni_tiny2040.menu.opt.Disabled=Disabled (-O0) pimoroni_tiny2040.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_tiny2040.menu.profile.Disabled=Disabled +pimoroni_tiny2040.menu.profile.Disabled.build.flags.profile= +pimoroni_tiny2040.menu.profile.Enabled=Enabled +pimoroni_tiny2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_tiny2040.menu.rtti.Disabled=Disabled pimoroni_tiny2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_tiny2040.menu.rtti.Enabled=Enabled @@ -22247,6 +22556,10 @@ pimoroni_tiny2350.menu.opt.Debug=Debug (-Og) pimoroni_tiny2350.menu.opt.Debug.build.flags.optimize=-Og pimoroni_tiny2350.menu.opt.Disabled=Disabled (-O0) pimoroni_tiny2350.menu.opt.Disabled.build.flags.optimize=-O0 +pimoroni_tiny2350.menu.profile.Disabled=Disabled +pimoroni_tiny2350.menu.profile.Disabled.build.flags.profile= +pimoroni_tiny2350.menu.profile.Enabled=Enabled +pimoroni_tiny2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pimoroni_tiny2350.menu.rtti.Disabled=Disabled pimoroni_tiny2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pimoroni_tiny2350.menu.rtti.Enabled=Enabled @@ -22468,6 +22781,10 @@ pintronix_pinmax.menu.opt.Debug=Debug (-Og) pintronix_pinmax.menu.opt.Debug.build.flags.optimize=-Og pintronix_pinmax.menu.opt.Disabled=Disabled (-O0) pintronix_pinmax.menu.opt.Disabled.build.flags.optimize=-O0 +pintronix_pinmax.menu.profile.Disabled=Disabled +pintronix_pinmax.menu.profile.Disabled.build.flags.profile= +pintronix_pinmax.menu.profile.Enabled=Enabled +pintronix_pinmax.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE pintronix_pinmax.menu.rtti.Disabled=Disabled pintronix_pinmax.menu.rtti.Disabled.build.flags.rtti=-fno-rtti pintronix_pinmax.menu.rtti.Enabled=Enabled @@ -22699,6 +23016,10 @@ rakwireless_rak11300.menu.opt.Debug=Debug (-Og) rakwireless_rak11300.menu.opt.Debug.build.flags.optimize=-Og rakwireless_rak11300.menu.opt.Disabled=Disabled (-O0) rakwireless_rak11300.menu.opt.Disabled.build.flags.optimize=-O0 +rakwireless_rak11300.menu.profile.Disabled=Disabled +rakwireless_rak11300.menu.profile.Disabled.build.flags.profile= +rakwireless_rak11300.menu.profile.Enabled=Enabled +rakwireless_rak11300.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE rakwireless_rak11300.menu.rtti.Disabled=Disabled rakwireless_rak11300.menu.rtti.Disabled.build.flags.rtti=-fno-rtti rakwireless_rak11300.menu.rtti.Enabled=Enabled @@ -23012,6 +23333,10 @@ redscorp_rp2040_eins.menu.opt.Debug=Debug (-Og) redscorp_rp2040_eins.menu.opt.Debug.build.flags.optimize=-Og redscorp_rp2040_eins.menu.opt.Disabled=Disabled (-O0) redscorp_rp2040_eins.menu.opt.Disabled.build.flags.optimize=-O0 +redscorp_rp2040_eins.menu.profile.Disabled=Disabled +redscorp_rp2040_eins.menu.profile.Disabled.build.flags.profile= +redscorp_rp2040_eins.menu.profile.Enabled=Enabled +redscorp_rp2040_eins.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE redscorp_rp2040_eins.menu.rtti.Disabled=Disabled redscorp_rp2040_eins.menu.rtti.Disabled.build.flags.rtti=-fno-rtti redscorp_rp2040_eins.menu.rtti.Enabled=Enabled @@ -23325,6 +23650,10 @@ redscorp_rp2040_promini.menu.opt.Debug=Debug (-Og) redscorp_rp2040_promini.menu.opt.Debug.build.flags.optimize=-Og redscorp_rp2040_promini.menu.opt.Disabled=Disabled (-O0) redscorp_rp2040_promini.menu.opt.Disabled.build.flags.optimize=-O0 +redscorp_rp2040_promini.menu.profile.Disabled=Disabled +redscorp_rp2040_promini.menu.profile.Disabled.build.flags.profile= +redscorp_rp2040_promini.menu.profile.Enabled=Enabled +redscorp_rp2040_promini.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE redscorp_rp2040_promini.menu.rtti.Disabled=Disabled redscorp_rp2040_promini.menu.rtti.Disabled.build.flags.rtti=-fno-rtti redscorp_rp2040_promini.menu.rtti.Enabled=Enabled @@ -23574,6 +23903,10 @@ sea_picro.menu.opt.Debug=Debug (-Og) sea_picro.menu.opt.Debug.build.flags.optimize=-Og sea_picro.menu.opt.Disabled=Disabled (-O0) sea_picro.menu.opt.Disabled.build.flags.optimize=-O0 +sea_picro.menu.profile.Disabled=Disabled +sea_picro.menu.profile.Disabled.build.flags.profile= +sea_picro.menu.profile.Enabled=Enabled +sea_picro.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sea_picro.menu.rtti.Disabled=Disabled sea_picro.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sea_picro.menu.rtti.Enabled=Enabled @@ -23791,6 +24124,10 @@ silicognition_rp2040_shim.menu.opt.Debug=Debug (-Og) silicognition_rp2040_shim.menu.opt.Debug.build.flags.optimize=-Og silicognition_rp2040_shim.menu.opt.Disabled=Disabled (-O0) silicognition_rp2040_shim.menu.opt.Disabled.build.flags.optimize=-O0 +silicognition_rp2040_shim.menu.profile.Disabled=Disabled +silicognition_rp2040_shim.menu.profile.Disabled.build.flags.profile= +silicognition_rp2040_shim.menu.profile.Enabled=Enabled +silicognition_rp2040_shim.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE silicognition_rp2040_shim.menu.rtti.Disabled=Disabled silicognition_rp2040_shim.menu.rtti.Disabled.build.flags.rtti=-fno-rtti silicognition_rp2040_shim.menu.rtti.Enabled=Enabled @@ -24040,6 +24377,10 @@ solderparty_rp2040_stamp.menu.opt.Debug=Debug (-Og) solderparty_rp2040_stamp.menu.opt.Debug.build.flags.optimize=-Og solderparty_rp2040_stamp.menu.opt.Disabled=Disabled (-O0) solderparty_rp2040_stamp.menu.opt.Disabled.build.flags.optimize=-O0 +solderparty_rp2040_stamp.menu.profile.Disabled=Disabled +solderparty_rp2040_stamp.menu.profile.Disabled.build.flags.profile= +solderparty_rp2040_stamp.menu.profile.Enabled=Enabled +solderparty_rp2040_stamp.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE solderparty_rp2040_stamp.menu.rtti.Disabled=Disabled solderparty_rp2040_stamp.menu.rtti.Disabled.build.flags.rtti=-fno-rtti solderparty_rp2040_stamp.menu.rtti.Enabled=Enabled @@ -24353,6 +24694,10 @@ solderparty_rp2350_stamp.menu.opt.Debug=Debug (-Og) solderparty_rp2350_stamp.menu.opt.Debug.build.flags.optimize=-Og solderparty_rp2350_stamp.menu.opt.Disabled=Disabled (-O0) solderparty_rp2350_stamp.menu.opt.Disabled.build.flags.optimize=-O0 +solderparty_rp2350_stamp.menu.profile.Disabled=Disabled +solderparty_rp2350_stamp.menu.profile.Disabled.build.flags.profile= +solderparty_rp2350_stamp.menu.profile.Enabled=Enabled +solderparty_rp2350_stamp.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE solderparty_rp2350_stamp.menu.rtti.Disabled=Disabled solderparty_rp2350_stamp.menu.rtti.Disabled.build.flags.rtti=-fno-rtti solderparty_rp2350_stamp.menu.rtti.Enabled=Enabled @@ -24666,6 +25011,10 @@ solderparty_rp2350_stamp_xl.menu.opt.Debug=Debug (-Og) solderparty_rp2350_stamp_xl.menu.opt.Debug.build.flags.optimize=-Og solderparty_rp2350_stamp_xl.menu.opt.Disabled=Disabled (-O0) solderparty_rp2350_stamp_xl.menu.opt.Disabled.build.flags.optimize=-O0 +solderparty_rp2350_stamp_xl.menu.profile.Disabled=Disabled +solderparty_rp2350_stamp_xl.menu.profile.Disabled.build.flags.profile= +solderparty_rp2350_stamp_xl.menu.profile.Enabled=Enabled +solderparty_rp2350_stamp_xl.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE solderparty_rp2350_stamp_xl.menu.rtti.Disabled=Disabled solderparty_rp2350_stamp_xl.menu.rtti.Disabled.build.flags.rtti=-fno-rtti solderparty_rp2350_stamp_xl.menu.rtti.Enabled=Enabled @@ -24995,6 +25344,10 @@ sparkfun_micromodrp2040.menu.opt.Debug=Debug (-Og) sparkfun_micromodrp2040.menu.opt.Debug.build.flags.optimize=-Og sparkfun_micromodrp2040.menu.opt.Disabled=Disabled (-O0) sparkfun_micromodrp2040.menu.opt.Disabled.build.flags.optimize=-O0 +sparkfun_micromodrp2040.menu.profile.Disabled=Disabled +sparkfun_micromodrp2040.menu.profile.Disabled.build.flags.profile= +sparkfun_micromodrp2040.menu.profile.Enabled=Enabled +sparkfun_micromodrp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sparkfun_micromodrp2040.menu.rtti.Disabled=Disabled sparkfun_micromodrp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sparkfun_micromodrp2040.menu.rtti.Enabled=Enabled @@ -25324,6 +25677,10 @@ sparkfun_promicrorp2040.menu.opt.Debug=Debug (-Og) sparkfun_promicrorp2040.menu.opt.Debug.build.flags.optimize=-Og sparkfun_promicrorp2040.menu.opt.Disabled=Disabled (-O0) sparkfun_promicrorp2040.menu.opt.Disabled.build.flags.optimize=-O0 +sparkfun_promicrorp2040.menu.profile.Disabled=Disabled +sparkfun_promicrorp2040.menu.profile.Disabled.build.flags.profile= +sparkfun_promicrorp2040.menu.profile.Enabled=Enabled +sparkfun_promicrorp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sparkfun_promicrorp2040.menu.rtti.Disabled=Disabled sparkfun_promicrorp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sparkfun_promicrorp2040.menu.rtti.Enabled=Enabled @@ -25661,6 +26018,10 @@ sparkfun_promicrorp2350.menu.opt.Debug=Debug (-Og) sparkfun_promicrorp2350.menu.opt.Debug.build.flags.optimize=-Og sparkfun_promicrorp2350.menu.opt.Disabled=Disabled (-O0) sparkfun_promicrorp2350.menu.opt.Disabled.build.flags.optimize=-O0 +sparkfun_promicrorp2350.menu.profile.Disabled=Disabled +sparkfun_promicrorp2350.menu.profile.Disabled.build.flags.profile= +sparkfun_promicrorp2350.menu.profile.Enabled=Enabled +sparkfun_promicrorp2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sparkfun_promicrorp2350.menu.rtti.Disabled=Disabled sparkfun_promicrorp2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sparkfun_promicrorp2350.menu.rtti.Enabled=Enabled @@ -25990,6 +26351,10 @@ sparkfun_thingplusrp2040.menu.opt.Debug=Debug (-Og) sparkfun_thingplusrp2040.menu.opt.Debug.build.flags.optimize=-Og sparkfun_thingplusrp2040.menu.opt.Disabled=Disabled (-O0) sparkfun_thingplusrp2040.menu.opt.Disabled.build.flags.optimize=-O0 +sparkfun_thingplusrp2040.menu.profile.Disabled=Disabled +sparkfun_thingplusrp2040.menu.profile.Disabled.build.flags.profile= +sparkfun_thingplusrp2040.menu.profile.Enabled=Enabled +sparkfun_thingplusrp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sparkfun_thingplusrp2040.menu.rtti.Disabled=Disabled sparkfun_thingplusrp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sparkfun_thingplusrp2040.menu.rtti.Enabled=Enabled @@ -26328,6 +26693,10 @@ sparkfun_thingplusrp2350.menu.opt.Debug=Debug (-Og) sparkfun_thingplusrp2350.menu.opt.Debug.build.flags.optimize=-Og sparkfun_thingplusrp2350.menu.opt.Disabled=Disabled (-O0) sparkfun_thingplusrp2350.menu.opt.Disabled.build.flags.optimize=-O0 +sparkfun_thingplusrp2350.menu.profile.Disabled=Disabled +sparkfun_thingplusrp2350.menu.profile.Disabled.build.flags.profile= +sparkfun_thingplusrp2350.menu.profile.Enabled=Enabled +sparkfun_thingplusrp2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE sparkfun_thingplusrp2350.menu.rtti.Disabled=Disabled sparkfun_thingplusrp2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti sparkfun_thingplusrp2350.menu.rtti.Enabled=Enabled @@ -26663,6 +27032,10 @@ upesy_rp2040_devkit.menu.opt.Debug=Debug (-Og) upesy_rp2040_devkit.menu.opt.Debug.build.flags.optimize=-Og upesy_rp2040_devkit.menu.opt.Disabled=Disabled (-O0) upesy_rp2040_devkit.menu.opt.Disabled.build.flags.optimize=-O0 +upesy_rp2040_devkit.menu.profile.Disabled=Disabled +upesy_rp2040_devkit.menu.profile.Disabled.build.flags.profile= +upesy_rp2040_devkit.menu.profile.Enabled=Enabled +upesy_rp2040_devkit.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE upesy_rp2040_devkit.menu.rtti.Disabled=Disabled upesy_rp2040_devkit.menu.rtti.Disabled.build.flags.rtti=-fno-rtti upesy_rp2040_devkit.menu.rtti.Enabled=Enabled @@ -26894,6 +27267,10 @@ seeed_indicator_rp2040.menu.opt.Debug=Debug (-Og) seeed_indicator_rp2040.menu.opt.Debug.build.flags.optimize=-Og seeed_indicator_rp2040.menu.opt.Disabled=Disabled (-O0) seeed_indicator_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +seeed_indicator_rp2040.menu.profile.Disabled=Disabled +seeed_indicator_rp2040.menu.profile.Disabled.build.flags.profile= +seeed_indicator_rp2040.menu.profile.Enabled=Enabled +seeed_indicator_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE seeed_indicator_rp2040.menu.rtti.Disabled=Disabled seeed_indicator_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti seeed_indicator_rp2040.menu.rtti.Enabled=Enabled @@ -27125,6 +27502,10 @@ seeed_xiao_rp2040.menu.opt.Debug=Debug (-Og) seeed_xiao_rp2040.menu.opt.Debug.build.flags.optimize=-Og seeed_xiao_rp2040.menu.opt.Disabled=Disabled (-O0) seeed_xiao_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +seeed_xiao_rp2040.menu.profile.Disabled=Disabled +seeed_xiao_rp2040.menu.profile.Disabled.build.flags.profile= +seeed_xiao_rp2040.menu.profile.Enabled=Enabled +seeed_xiao_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE seeed_xiao_rp2040.menu.rtti.Disabled=Disabled seeed_xiao_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti seeed_xiao_rp2040.menu.rtti.Enabled=Enabled @@ -27462,6 +27843,10 @@ seeed_xiao_rp2350.menu.opt.Debug=Debug (-Og) seeed_xiao_rp2350.menu.opt.Debug.build.flags.optimize=-Og seeed_xiao_rp2350.menu.opt.Disabled=Disabled (-O0) seeed_xiao_rp2350.menu.opt.Disabled.build.flags.optimize=-O0 +seeed_xiao_rp2350.menu.profile.Disabled=Disabled +seeed_xiao_rp2350.menu.profile.Disabled.build.flags.profile= +seeed_xiao_rp2350.menu.profile.Enabled=Enabled +seeed_xiao_rp2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE seeed_xiao_rp2350.menu.rtti.Disabled=Disabled seeed_xiao_rp2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti seeed_xiao_rp2350.menu.rtti.Enabled=Enabled @@ -27747,6 +28132,10 @@ vccgnd_yd_rp2040.menu.opt.Debug=Debug (-Og) vccgnd_yd_rp2040.menu.opt.Debug.build.flags.optimize=-Og vccgnd_yd_rp2040.menu.opt.Disabled=Disabled (-O0) vccgnd_yd_rp2040.menu.opt.Disabled.build.flags.optimize=-O0 +vccgnd_yd_rp2040.menu.profile.Disabled=Disabled +vccgnd_yd_rp2040.menu.profile.Disabled.build.flags.profile= +vccgnd_yd_rp2040.menu.profile.Enabled=Enabled +vccgnd_yd_rp2040.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE vccgnd_yd_rp2040.menu.rtti.Disabled=Disabled vccgnd_yd_rp2040.menu.rtti.Disabled.build.flags.rtti=-fno-rtti vccgnd_yd_rp2040.menu.rtti.Enabled=Enabled @@ -28020,6 +28409,10 @@ viyalab_mizu.menu.opt.Debug=Debug (-Og) viyalab_mizu.menu.opt.Debug.build.flags.optimize=-Og viyalab_mizu.menu.opt.Disabled=Disabled (-O0) viyalab_mizu.menu.opt.Disabled.build.flags.optimize=-O0 +viyalab_mizu.menu.profile.Disabled=Disabled +viyalab_mizu.menu.profile.Disabled.build.flags.profile= +viyalab_mizu.menu.profile.Enabled=Enabled +viyalab_mizu.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE viyalab_mizu.menu.rtti.Disabled=Disabled viyalab_mizu.menu.rtti.Disabled.build.flags.rtti=-fno-rtti viyalab_mizu.menu.rtti.Enabled=Enabled @@ -28251,6 +28644,10 @@ waveshare_rp2040_zero.menu.opt.Debug=Debug (-Og) waveshare_rp2040_zero.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_zero.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_zero.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_zero.menu.profile.Disabled=Disabled +waveshare_rp2040_zero.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_zero.menu.profile.Enabled=Enabled +waveshare_rp2040_zero.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_zero.menu.rtti.Disabled=Disabled waveshare_rp2040_zero.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_zero.menu.rtti.Enabled=Enabled @@ -28496,6 +28893,10 @@ waveshare_rp2040_one.menu.opt.Debug=Debug (-Og) waveshare_rp2040_one.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_one.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_one.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_one.menu.profile.Disabled=Disabled +waveshare_rp2040_one.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_one.menu.profile.Enabled=Enabled +waveshare_rp2040_one.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_one.menu.rtti.Disabled=Disabled waveshare_rp2040_one.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_one.menu.rtti.Enabled=Enabled @@ -28727,6 +29128,10 @@ waveshare_rp2040_matrix.menu.opt.Debug=Debug (-Og) waveshare_rp2040_matrix.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_matrix.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_matrix.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_matrix.menu.profile.Disabled=Disabled +waveshare_rp2040_matrix.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_matrix.menu.profile.Enabled=Enabled +waveshare_rp2040_matrix.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_matrix.menu.rtti.Disabled=Disabled waveshare_rp2040_matrix.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_matrix.menu.rtti.Enabled=Enabled @@ -29056,6 +29461,10 @@ waveshare_rp2040_pizero.menu.opt.Debug=Debug (-Og) waveshare_rp2040_pizero.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_pizero.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_pizero.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_pizero.menu.profile.Disabled=Disabled +waveshare_rp2040_pizero.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_pizero.menu.profile.Enabled=Enabled +waveshare_rp2040_pizero.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_pizero.menu.rtti.Disabled=Disabled waveshare_rp2040_pizero.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_pizero.menu.rtti.Enabled=Enabled @@ -29301,6 +29710,10 @@ waveshare_rp2040_plus_4mb.menu.opt.Debug=Debug (-Og) waveshare_rp2040_plus_4mb.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_plus_4mb.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_plus_4mb.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_plus_4mb.menu.profile.Disabled=Disabled +waveshare_rp2040_plus_4mb.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_plus_4mb.menu.profile.Enabled=Enabled +waveshare_rp2040_plus_4mb.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_plus_4mb.menu.rtti.Disabled=Disabled waveshare_rp2040_plus_4mb.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_plus_4mb.menu.rtti.Enabled=Enabled @@ -29630,6 +30043,10 @@ waveshare_rp2040_plus_16mb.menu.opt.Debug=Debug (-Og) waveshare_rp2040_plus_16mb.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_plus_16mb.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_plus_16mb.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_plus_16mb.menu.profile.Disabled=Disabled +waveshare_rp2040_plus_16mb.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_plus_16mb.menu.profile.Enabled=Enabled +waveshare_rp2040_plus_16mb.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_plus_16mb.menu.rtti.Disabled=Disabled waveshare_rp2040_plus_16mb.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_plus_16mb.menu.rtti.Enabled=Enabled @@ -29861,6 +30278,10 @@ waveshare_rp2040_lcd_0_96.menu.opt.Debug=Debug (-Og) waveshare_rp2040_lcd_0_96.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_lcd_0_96.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_lcd_0_96.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_lcd_0_96.menu.profile.Disabled=Disabled +waveshare_rp2040_lcd_0_96.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_lcd_0_96.menu.profile.Enabled=Enabled +waveshare_rp2040_lcd_0_96.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_lcd_0_96.menu.rtti.Disabled=Disabled waveshare_rp2040_lcd_0_96.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_lcd_0_96.menu.rtti.Enabled=Enabled @@ -30092,6 +30513,10 @@ waveshare_rp2040_lcd_1_28.menu.opt.Debug=Debug (-Og) waveshare_rp2040_lcd_1_28.menu.opt.Debug.build.flags.optimize=-Og waveshare_rp2040_lcd_1_28.menu.opt.Disabled=Disabled (-O0) waveshare_rp2040_lcd_1_28.menu.opt.Disabled.build.flags.optimize=-O0 +waveshare_rp2040_lcd_1_28.menu.profile.Disabled=Disabled +waveshare_rp2040_lcd_1_28.menu.profile.Disabled.build.flags.profile= +waveshare_rp2040_lcd_1_28.menu.profile.Enabled=Enabled +waveshare_rp2040_lcd_1_28.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE waveshare_rp2040_lcd_1_28.menu.rtti.Disabled=Disabled waveshare_rp2040_lcd_1_28.menu.rtti.Disabled.build.flags.rtti=-fno-rtti waveshare_rp2040_lcd_1_28.menu.rtti.Enabled=Enabled @@ -30323,6 +30748,10 @@ wiznet_5100s_evb_pico.menu.opt.Debug=Debug (-Og) wiznet_5100s_evb_pico.menu.opt.Debug.build.flags.optimize=-Og wiznet_5100s_evb_pico.menu.opt.Disabled=Disabled (-O0) wiznet_5100s_evb_pico.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_5100s_evb_pico.menu.profile.Disabled=Disabled +wiznet_5100s_evb_pico.menu.profile.Disabled.build.flags.profile= +wiznet_5100s_evb_pico.menu.profile.Enabled=Enabled +wiznet_5100s_evb_pico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_5100s_evb_pico.menu.rtti.Disabled=Disabled wiznet_5100s_evb_pico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_5100s_evb_pico.menu.rtti.Enabled=Enabled @@ -30562,6 +30991,10 @@ wiznet_5100s_evb_pico2.menu.opt.Debug=Debug (-Og) wiznet_5100s_evb_pico2.menu.opt.Debug.build.flags.optimize=-Og wiznet_5100s_evb_pico2.menu.opt.Disabled=Disabled (-O0) wiznet_5100s_evb_pico2.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_5100s_evb_pico2.menu.profile.Disabled=Disabled +wiznet_5100s_evb_pico2.menu.profile.Disabled.build.flags.profile= +wiznet_5100s_evb_pico2.menu.profile.Enabled=Enabled +wiznet_5100s_evb_pico2.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_5100s_evb_pico2.menu.rtti.Disabled=Disabled wiznet_5100s_evb_pico2.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_5100s_evb_pico2.menu.rtti.Enabled=Enabled @@ -30793,6 +31226,10 @@ wiznet_wizfi360_evb_pico.menu.opt.Debug=Debug (-Og) wiznet_wizfi360_evb_pico.menu.opt.Debug.build.flags.optimize=-Og wiznet_wizfi360_evb_pico.menu.opt.Disabled=Disabled (-O0) wiznet_wizfi360_evb_pico.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_wizfi360_evb_pico.menu.profile.Disabled=Disabled +wiznet_wizfi360_evb_pico.menu.profile.Disabled.build.flags.profile= +wiznet_wizfi360_evb_pico.menu.profile.Enabled=Enabled +wiznet_wizfi360_evb_pico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_wizfi360_evb_pico.menu.rtti.Disabled=Disabled wiznet_wizfi360_evb_pico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_wizfi360_evb_pico.menu.rtti.Enabled=Enabled @@ -31024,6 +31461,10 @@ wiznet_5500_evb_pico.menu.opt.Debug=Debug (-Og) wiznet_5500_evb_pico.menu.opt.Debug.build.flags.optimize=-Og wiznet_5500_evb_pico.menu.opt.Disabled=Disabled (-O0) wiznet_5500_evb_pico.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_5500_evb_pico.menu.profile.Disabled=Disabled +wiznet_5500_evb_pico.menu.profile.Disabled.build.flags.profile= +wiznet_5500_evb_pico.menu.profile.Enabled=Enabled +wiznet_5500_evb_pico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_5500_evb_pico.menu.rtti.Disabled=Disabled wiznet_5500_evb_pico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_5500_evb_pico.menu.rtti.Enabled=Enabled @@ -31263,6 +31704,10 @@ wiznet_5500_evb_pico2.menu.opt.Debug=Debug (-Og) wiznet_5500_evb_pico2.menu.opt.Debug.build.flags.optimize=-Og wiznet_5500_evb_pico2.menu.opt.Disabled=Disabled (-O0) wiznet_5500_evb_pico2.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_5500_evb_pico2.menu.profile.Disabled=Disabled +wiznet_5500_evb_pico2.menu.profile.Disabled.build.flags.profile= +wiznet_5500_evb_pico2.menu.profile.Enabled=Enabled +wiznet_5500_evb_pico2.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_5500_evb_pico2.menu.rtti.Disabled=Disabled wiznet_5500_evb_pico2.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_5500_evb_pico2.menu.rtti.Enabled=Enabled @@ -31494,6 +31939,10 @@ wiznet_55rp20_evb_pico.menu.opt.Debug=Debug (-Og) wiznet_55rp20_evb_pico.menu.opt.Debug.build.flags.optimize=-Og wiznet_55rp20_evb_pico.menu.opt.Disabled=Disabled (-O0) wiznet_55rp20_evb_pico.menu.opt.Disabled.build.flags.optimize=-O0 +wiznet_55rp20_evb_pico.menu.profile.Disabled=Disabled +wiznet_55rp20_evb_pico.menu.profile.Disabled.build.flags.profile= +wiznet_55rp20_evb_pico.menu.profile.Enabled=Enabled +wiznet_55rp20_evb_pico.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE wiznet_55rp20_evb_pico.menu.rtti.Disabled=Disabled wiznet_55rp20_evb_pico.menu.rtti.Disabled.build.flags.rtti=-fno-rtti wiznet_55rp20_evb_pico.menu.rtti.Enabled=Enabled @@ -31771,6 +32220,10 @@ generic.menu.opt.Debug=Debug (-Og) generic.menu.opt.Debug.build.flags.optimize=-Og generic.menu.opt.Disabled=Disabled (-O0) generic.menu.opt.Disabled.build.flags.optimize=-O0 +generic.menu.profile.Disabled=Disabled +generic.menu.profile.Disabled.build.flags.profile= +generic.menu.profile.Enabled=Enabled +generic.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE generic.menu.rtti.Disabled=Disabled generic.menu.rtti.Disabled.build.flags.rtti=-fno-rtti generic.menu.rtti.Enabled=Enabled @@ -32191,6 +32644,10 @@ generic_rp2350.menu.opt.Debug=Debug (-Og) generic_rp2350.menu.opt.Debug.build.flags.optimize=-Og generic_rp2350.menu.opt.Disabled=Disabled (-O0) generic_rp2350.menu.opt.Disabled.build.flags.optimize=-O0 +generic_rp2350.menu.profile.Disabled=Disabled +generic_rp2350.menu.profile.Disabled.build.flags.profile= +generic_rp2350.menu.profile.Enabled=Enabled +generic_rp2350.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE generic_rp2350.menu.rtti.Disabled=Disabled generic_rp2350.menu.rtti.Disabled.build.flags.rtti=-fno-rtti generic_rp2350.menu.rtti.Enabled=Enabled diff --git a/cores/rp2040/RP2040Support.cpp b/cores/rp2040/RP2040Support.cpp index 27ab953f2..9ab7434bb 100644 --- a/cores/rp2040/RP2040Support.cpp +++ b/cores/rp2040/RP2040Support.cpp @@ -18,9 +18,11 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#include +#include + #ifdef PICO_RP2040 -#include #include extern "C" void boot_double_tap_check(); @@ -35,3 +37,17 @@ void RP2040::enableDoubleResetBootloader() { } #endif + +#ifdef __PROFILE +Stream *__profileFile; +int __writeProfileCB(const void *data, int len) { + return __profileFile->write((const char *)data, len); +} + +#ifdef __PROFILE +extern "C" void runtime_init_setup_profiling(); +#define PICO_RUNTIME_INIT_PROFILING "11011" // Towards the end, after PSRAM +PICO_RUNTIME_INIT_FUNC_RUNTIME(runtime_init_setup_profiling, PICO_RUNTIME_INIT_PROFILING); +#endif + +#endif diff --git a/cores/rp2040/RP2040Support.h b/cores/rp2040/RP2040Support.h index 445078e95..45caafd84 100644 --- a/cores/rp2040/RP2040Support.h +++ b/cores/rp2040/RP2040Support.h @@ -18,6 +18,8 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +#pragma once + #include #include #include @@ -45,6 +47,13 @@ extern "C" volatile bool __otherCoreIdled; +extern "C" { +#ifdef __PROFILE + typedef int (*profileWriteCB)(const void *data, int len); + extern void _writeProfile(profileWriteCB writeCB); +#endif +} + class _MFIFO { public: _MFIFO() { /* noop */ }; @@ -180,7 +189,7 @@ class RP2040 { void begin() { _epoch = 0; -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) if (!__isFreeRTOS) { // Enable SYSTICK exception exception_set_exclusive_handler(SYSTICK_EXCEPTION, _SystickHandler); @@ -193,7 +202,7 @@ class RP2040 { _ccountPgm->prepare(&_pio, &_sm, &off); ccount_program_init(_pio, _sm, off); pio_sm_set_enabled(_pio, _sm, true); -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) } #endif } @@ -217,7 +226,7 @@ class RP2040 { // Get CPU cycle count. Needs to do magic to extens 24b HW to something longer volatile uint64_t _epoch = 0; inline uint32_t getCycleCount() { -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) if (!__isFreeRTOS) { uint32_t epoch; uint32_t ctr; @@ -229,13 +238,13 @@ class RP2040 { } else { #endif return ccount_read(_pio, _sm); -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) } #endif } inline uint64_t getCycleCount64() { -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) if (!__isFreeRTOS) { uint64_t epoch; uint64_t ctr; @@ -247,7 +256,7 @@ class RP2040 { } else { #endif return ccount_read(_pio, _sm); -#if !defined(__riscv) +#if !defined(__riscv) && !defined(__PROFILE) } #endif } @@ -473,6 +482,21 @@ class RP2040 { #endif } +#ifdef __PROFILE + void writeProfiling(Stream *f) { + extern Stream *__profileFile; + extern int __writeProfileCB(const void *data, int len); + __profileFile = f; + _writeProfile(__writeProfileCB); + } + + size_t getProfileMemoryUsage() { + extern int __profileMemSize; + return (size_t) __profileMemSize; + } +#endif + + private: static void _SystickHandler() { diff --git a/cores/rp2040/_freertos.h b/cores/rp2040/_freertos.h index 0c626f1ba..58c375061 100644 --- a/cores/rp2040/_freertos.h +++ b/cores/rp2040/_freertos.h @@ -30,32 +30,36 @@ extern bool __isFreeRTOS; // FreeRTOS has been set up extern volatile bool __freeRTOSinitted; +#ifdef __cplusplus extern "C" { - struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */ - typedef struct QueueDefinition * QueueHandle_t; - typedef QueueHandle_t SemaphoreHandle_t; - typedef int32_t BaseType_t; +#endif // __cplusplus +struct QueueDefinition; /* Using old naming convention so as not to break kernel aware debuggers. */ +typedef struct QueueDefinition * QueueHandle_t; +typedef QueueHandle_t SemaphoreHandle_t; +typedef int32_t BaseType_t; - extern bool __freertos_check_if_in_isr() __attribute__((weak)); +extern bool __freertos_check_if_in_isr() __attribute__((weak)); - extern SemaphoreHandle_t __freertos_mutex_create() __attribute__((weak)); - extern SemaphoreHandle_t _freertos_recursive_mutex_create() __attribute__((weak)); +extern SemaphoreHandle_t __freertos_mutex_create() __attribute__((weak)); +extern SemaphoreHandle_t _freertos_recursive_mutex_create() __attribute__((weak)); - extern void __freertos_mutex_take(SemaphoreHandle_t mtx) __attribute__((weak)); +extern void __freertos_mutex_take(SemaphoreHandle_t mtx) __attribute__((weak)); - extern int __freertos_mutex_take_from_isr(SemaphoreHandle_t mtx, BaseType_t* pxHigherPriorityTaskWoken) __attribute__((weak)); - extern int __freertos_mutex_try_take(SemaphoreHandle_t mtx) __attribute__((weak)); - extern void __freertos_mutex_give(SemaphoreHandle_t mtx) __attribute__((weak)); - extern void __freertos_mutex_give_from_isr(SemaphoreHandle_t mtx, BaseType_t* pxHigherPriorityTaskWoken) __attribute__((weak)); +extern int __freertos_mutex_take_from_isr(SemaphoreHandle_t mtx, BaseType_t* pxHigherPriorityTaskWoken) __attribute__((weak)); +extern int __freertos_mutex_try_take(SemaphoreHandle_t mtx) __attribute__((weak)); +extern void __freertos_mutex_give(SemaphoreHandle_t mtx) __attribute__((weak)); +extern void __freertos_mutex_give_from_isr(SemaphoreHandle_t mtx, BaseType_t* pxHigherPriorityTaskWoken) __attribute__((weak)); - extern void __freertos_recursive_mutex_take(SemaphoreHandle_t mtx) __attribute__((weak)); - extern int __freertos_recursive_mutex_try_take(SemaphoreHandle_t mtx) __attribute__((weak)); - extern void __freertos_recursive_mutex_give(SemaphoreHandle_t mtx) __attribute__((weak)); +extern void __freertos_recursive_mutex_take(SemaphoreHandle_t mtx) __attribute__((weak)); +extern int __freertos_recursive_mutex_try_take(SemaphoreHandle_t mtx) __attribute__((weak)); +extern void __freertos_recursive_mutex_give(SemaphoreHandle_t mtx) __attribute__((weak)); - extern void __freertos_idle_other_core() __attribute__((weak)); - extern void __freertos_resume_other_core() __attribute__((weak)); +extern void __freertos_idle_other_core() __attribute__((weak)); +extern void __freertos_resume_other_core() __attribute__((weak)); - extern void __freertos_task_exit_critical() __attribute__((weak)); - extern void __freertos_task_enter_critical() __attribute__((weak)); +extern void __freertos_task_exit_critical() __attribute__((weak)); +extern void __freertos_task_enter_critical() __attribute__((weak)); +#ifdef __cplusplus } extern SemaphoreHandle_t __get_freertos_mutex_for_ptr(mutex_t *m, bool recursive = false); +#endif // __cplusplus diff --git a/cores/rp2040/gprof_gmon.c b/cores/rp2040/gprof_gmon.c new file mode 100644 index 000000000..3ee28ee7f --- /dev/null +++ b/cores/rp2040/gprof_gmon.c @@ -0,0 +1,470 @@ +/* - + Copyright (c) 1983, 1992, 1993 + The Regents of the University of California. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 4. Neither the name of the University nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + SUCH DAMAGE. +*/ + +// This code is built as a C file because otherwise G++ would add profiling +// code to the preamble of these functions as well, leading to an infinite +// loop in the mcount routine. Because the Arduino IDE can't (easily) +// apply different compile parameters to different files, we set all C++ +// files to "-pg" but leave all C files uninstrumented. + +// Original code and organization taken from https://mcuoneclipse.com/2015/08/23/tutorial-using-gnu-profiling-gprof-with-arm-cortex-m/ + +#include +#include +#include +#include + +// Frequency of sampling PC +#ifndef GMON_HZ +#define GMON_HZ 10000 +#endif + +// Fraction of text space to allocate for histogram counters here, 1/2 +#ifndef HISTFRACTION +#ifdef PICO_RP2350 +#define HISTFRACTION 4 // Every 8 bytes of .text +#else +#define HISTFRACTION 8 // Every 16 bytes of .text +#endif +#endif + +// Fraction of text space to allocate for from hash buckets. +// The value of HASHFRACTION is based on the minimum number of bytes +// of separation between two subroutine call points in the object code. +// Given MIN_SUBR_SEPARATION bytes of separation the value of +// HASHFRACTION is calculated as: +// +// HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1); +// +// For example, on the VAX, the shortest two call sequence is: +// +// calls $0,(r0) +// calls $0,(r0) +// +// which is separated by only three bytes, thus HASHFRACTION is +// calculated as: +// +// HASHFRACTION = 3 / (2 * 2 - 1) = 1 +// +// Note that the division above rounds down, thus if MIN_SUBR_FRACTION +// is less than three, this algorithm will not work! +// +// In practice, however, call instructions are rarely at a minimal +// distance. Hence, we will define HASHFRACTION to be 2 across all +// architectures. This saves a reasonable amount of space for +// profiling data structures without (in practice) sacrificing +// any granularity. +#ifndef HASHFRACTION +#define HASHFRACTION 2 +#endif + +// Percent of text space to allocate for tostructs with a minimum. +#ifndef ARCDENSITY +#define ARCDENSITY 2 // This is in percentage, relative to text size! +#endif +#define MINARCS 50 +#define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2) + + + +// Histogram counters are unsigned shorts (according to the kernel) +typedef uint16_t HISTCOUNTER; //#define HISTCOUNTER unsigned short + +// In the original profiler code selfpc and count are full 32 bits each +// so the structure actually comes to 12 bytes due to padding (with 2 +// bytes wasted per entry). We don't have that much to spare on the Picos, +// so limit the recorded address to 16MB (which is the flash address +// window, anyway) and the counts to 16M (saturating). This saves 4 bytes +// (33%) per entry at the cost of some logic to expand/pack it. +struct tostruct { + uint8_t selfpc[3]; // Callee address/program counter. The caller address is in froms[] array which points to tos[] array + uint8_t count[3]; // How many times it has been called + uint16_t link; // Link to next entry in hash table. For tos[0] this points to the last used entry +}; + + +typedef enum { PROFILE_NOT_INIT = 0, PROFILE_ON, PROFILE_OFF } PROFILE_State; +struct profinfo { + PROFILE_State state; // Profiling state + uint16_t *counter; // Profiling counters + size_t lowpc, highpc; // Range to be profiled + uint32_t scale; // Scale value of bins +}; +// Global profinfo for profil() call +static struct profinfo prof = { PROFILE_NOT_INIT, 0, 0, 0, 0 }; + + +// Possible states of profiling +typedef enum { GMON_PROF_ON = 0, GMON_PROF_BUSY, GMON_PROF_ERROR, GMON_PROF_OFF } GMON_State; + +// The profiling data structures are housed in this structure. +struct gmonparam { + int state; + uint16_t *kcount; // Histogram PC sample array + size_t kcountsize; // Size of kcount[] array in bytes + uint16_t *froms; // Array of hashed 'from' addresses. The 16bit value is an index into the tos[] array + size_t fromssize; // Size of froms[] array in bytes + struct tostruct *tos; // to struct, contains histogram counter + size_t tossize; // Size of tos[] array in bytes + long tolimit; + size_t lowpc; // Low program counter of area + size_t highpc; // High program counter + size_t textsize; // Code size +}; +static struct gmonparam _gmonparam = { GMON_PROF_OFF, NULL, 0, NULL, 0, NULL, 0, 0L, 0, 0, 0}; + + +static bool already_setup = false; // Flag to indicate if we need to init +static bool _perf_in_setup = false; // Are we currently trying to initialize? (avoid infinite recursion) +int __profileMemSize = 0; // Memory allocated by the profiler to store tables + +static int s_scale = 0; +#define SCALE_1_TO_1 0x10000L + + +// Convert an addr to an index +static inline __attribute__((always_inline)) size_t profidx(size_t pc, size_t base, size_t scale) { + size_t i = (pc - base) / 2; + return (unsigned long long int) i * scale / 65536; +} + +// Sample the current program counter periodically +#if defined(__riscv) +// TODO - systick-like handler +#else +static void __no_inline_not_in_flash_func(_SystickHandler)(void) { + static size_t pc, idx; // Ensure in heap, not on stack + extern volatile bool __otherCoreIdled; + + if (!__otherCoreIdled && (prof.state == PROFILE_ON)) { + pc = ((uint32_t*)(__builtin_frame_address(0)))[14]; // Get SP and use it to get the return address from stack + if ((pc >= prof.lowpc) && (pc < prof.highpc)) { + idx = profidx(pc, prof.lowpc, prof.scale); + prof.counter[idx]++; + } + } +} +#endif + +// Convert an index into an address +static inline __attribute__((always_inline)) size_t profaddr(size_t idx, size_t base, size_t scale) { + return base + ((((unsigned long long)(idx) << 16) / (unsigned long long)(scale)) << 1); +} + +// Start or stop profiling +// Profiling goes into the SAMPLES buffer of size SIZE (which is treated as an array of uint16_ts of size size/2). +// Each bin represents a range of pc addresses from OFFSET. The number of pc addresses in a bin depends on SCALE. +// (A scale of 65536 maps each bin to two addresses, A scale of 32768 maps each bin to 4 addresses, a scale of +// 1 maps each bin to 128k address). Scale may be 1 - 65536, or zero to turn off profiling +static int __no_inline_not_in_flash_func(profile_ctl)(char *samples, size_t size, size_t offset, uint32_t scale) { + size_t maxbin; + + if (scale > 65536) { + return -1; + } + prof.state = PROFILE_OFF; + if (scale) { + bzero(samples, size); + bzero(&prof, sizeof(prof)); + maxbin = size >> 1; + prof.counter = (uint16_t*)samples; + prof.lowpc = offset; + prof.highpc = profaddr(maxbin, offset, scale); + prof.scale = scale; + prof.state = PROFILE_ON; + } + return 0; +} + +// Control profiling. Profiling is what mcount checks to see if all the data structures are ready. +static void __no_inline_not_in_flash_func(moncontrol)(int mode) { + if (mode) { // Start + profile_ctl((char *)_gmonparam.kcount, _gmonparam.kcountsize, _gmonparam.lowpc, s_scale); + _gmonparam.state = GMON_PROF_ON; + } else { // Stop + profile_ctl((char *)NULL, 0, 0, 0); + _gmonparam.state = GMON_PROF_OFF; + } +} + +// General rounding functions +static inline __attribute__((always_inline)) size_t rounddown(size_t x, size_t y) { + return (x / y) * y; +} + +static inline __attribute__((always_inline)) size_t roundup(size_t x, size_t y) { + return ((x + y - 1) / y) * y; +} + +// Allocate memory and set boundaries before any sampling is performed +void __no_inline_not_in_flash_func(monstartup)(size_t lowpc, size_t highpc) { + register size_t o; + char *cp; + struct gmonparam *p = &_gmonparam; + + // Round lowpc and highpc to multiples of the density we're using so the rest of the scaling (here and in gprof) stays in ints. + p->lowpc = rounddown(lowpc, HISTFRACTION * sizeof(HISTCOUNTER)); + p->highpc = roundup(highpc, HISTFRACTION * sizeof(HISTCOUNTER)); + p->textsize = p->highpc - p->lowpc; + p->kcountsize = p->textsize / HISTFRACTION; + p->fromssize = p->textsize / HASHFRACTION; + p->tolimit = p->textsize * ARCDENSITY / 100; + if (p->tolimit < MINARCS) { + p->tolimit = MINARCS; + } else if (p->tolimit > MAXARCS) { + p->tolimit = MAXARCS; + } + p->tossize = p->tolimit * sizeof(struct tostruct); + __profileMemSize = p->kcountsize + p->fromssize + p->tossize; +#ifdef RP2350_PSRAM_CS + cp = pmalloc(__profileMemSize); +#else + cp = malloc(__profileMemSize); +#endif + if (cp == NULL) { + // OOM + already_setup = false; + return; + } + + // Zero out cp as value will be added there + bzero(cp, p->kcountsize + p->fromssize + p->tossize); + + p->tos = (struct tostruct *)cp; + cp += p->tossize; + p->kcount = (uint16_t *)cp; + cp += p->kcountsize; + p->froms = (uint16_t *)cp; + + p->tos[0].link = 0; + + o = p->highpc - p->lowpc; + if (p->kcountsize < o) { + s_scale = ((float)p->kcountsize / o) * SCALE_1_TO_1; + } else { + s_scale = SCALE_1_TO_1; + } + moncontrol(1); // Start +} + +// Accessors for the selfpc and count fields +static inline __attribute__((always_inline)) void setselfpc(struct tostruct *x, size_t d) { + x->selfpc[0] = d & 0xff; + x->selfpc[1] = (d >> 8) & 0xff; + x->selfpc[2] = (d >> 16) & 0xff; +} + +static inline __attribute__((always_inline))void setcount(struct tostruct *x, size_t d) { + x->count[0] = d & 0xff; + x->count[1] = (d >> 8) & 0xff; + x->count[2] = (d >> 16) & 0xff; +} + +static inline __attribute__((always_inline)) uint32_t getselfpc(const struct tostruct *x) { + return 0x10000000 | ((uint32_t)x->selfpc[0]) | (((uint32_t)x->selfpc[1]) << 8) | (((uint32_t)x->selfpc[2]) << 16); +} + +static inline __attribute__((always_inline)) uint32_t getcount(const struct tostruct *x) { + return ((uint32_t)x->count[0]) | (((uint32_t)x->count[1]) << 8) | (((uint32_t)x->count[2]) << 16); +} + +// Called by the GCC function shim (gprof_shim.S) on function entry to record an arc hit +void __no_inline_not_in_flash_func(_mcount_internal)(uint32_t *frompcindex, uint32_t *selfpc) { + register struct tostruct *top; + register struct tostruct *prevtop; + register long toindex; + struct gmonparam *p = &_gmonparam; + + if (_perf_in_setup) { + // Avoid infinite recursion + return; + } + + if (!already_setup) { + extern char __flash_binary_start; // Start of flash + extern char __etext; // End of .text + already_setup = true; + _perf_in_setup = true; + monstartup((uint32_t)&__flash_binary_start, (uint32_t)&__etext); + _perf_in_setup = false; + } + // Check that we are profiling and that we aren't recursively invoked. + if (p->state != GMON_PROF_ON) { + return; + } + p->state++; + // Check that frompcindex is a reasonable pc value. + frompcindex = (uint32_t*)((long)frompcindex - (long)p->lowpc); + if ((unsigned long)frompcindex > p->textsize) { + goto done; + } + frompcindex = (uint32_t*)&p->froms[((long)frompcindex) / (HASHFRACTION * sizeof(*p->froms))]; + toindex = *((uint16_t*)frompcindex); // Get froms[] value + if (toindex == 0) { + // First time traversing this arc + toindex = ++p->tos[0].link; // The link of tos[0] points to the last used record in the array + if (toindex >= p->tolimit) { // More tos[] entries than we can handle! + goto overflow; + } + *((uint16_t*)frompcindex) = (uint16_t)toindex; // Store new 'to' value into froms[] + top = &p->tos[toindex]; + setselfpc(top, (uint32_t)selfpc); + setcount(top, 1); + top->link = 0; + goto done; + } + top = &p->tos[toindex]; + if (getselfpc(top) == (size_t)selfpc) { + // Arc at front of chain; usual case. + uint32_t cnt = getcount(top) + 1; + if (cnt >= 1 << 24) { + cnt = (1 << 24) - 1; + } + setcount(top, cnt); + goto done; + } + // Have to go looking down chain for it. top points to what we are looking at, prevtop points to previous top. We know it is not at the head of the chain. + for (; /* goto done */;) { + if (top->link == 0) { + // top is end of the chain and none of the chain had top->selfpc == selfpc, so we allocate a new tostruct and link it to the head of the chain. + toindex = ++p->tos[0].link; + if (toindex >= p->tolimit) { + goto overflow; + } + top = &p->tos[toindex]; + setselfpc(top, (uint32_t)selfpc); + setcount(top, 1); + top->link = *((uint16_t*)frompcindex); + *(uint16_t*)frompcindex = (uint16_t)toindex; + goto done; + } + // Otherwise, check the next arc on the chain. + prevtop = top; + top = &p->tos[top->link]; + if (getselfpc(top) == (size_t)selfpc) { + // Increment its count, move it to the head of the chain. + uint32_t cnt = getcount(top) + 1; + if (cnt >= 1 << 24) { + cnt = (1 << 24) - 1; + } + setcount(top, cnt); + toindex = prevtop->link; + prevtop->link = top->link; + top->link = *((uint16_t*)frompcindex); + *((uint16_t*)frompcindex) = (uint16_t)toindex; + goto done; + } + } +done: + p->state--; + return; + +overflow: + p->state++; // Halt further profiling + return; +} + + +// Write out the GMON.OUT file using internal state +void _writeProfile(int (*writeCB)(const void *data, int len)) { + struct gmonhdr { // GMON.OUT header + size_t lpc; // base pc address of sample buffer + size_t hpc; // max pc address of sampled buffer + int ncnt; // size of sample buffer (plus this header) + int version; // version number + int profrate; // profiling clock rate + int spare[3]; // reserved + }; + const unsigned int GMONVERSION = 0x00051879; + struct rawarc { // Per-arc on-disk data format + size_t raw_frompc; + size_t raw_selfpc; + long raw_count; + }; + int fromindex; + int endfrom; + size_t frompc; + int toindex; + struct rawarc rawarc; + const int BS = 64; + struct rawarc rawarcbuff[BS]; + int rawarcbuffptr = 0; + struct gmonparam *p = &_gmonparam; + struct gmonhdr hdr; + + moncontrol(0); // Stop + + hdr.lpc = p->lowpc; + hdr.hpc = p->highpc; + hdr.ncnt = p->kcountsize + sizeof(hdr); + hdr.version = GMONVERSION; + hdr.profrate = GMON_HZ; + writeCB((void *)&hdr, sizeof(hdr)); + writeCB((void *)p->kcount, p->kcountsize); + endfrom = p->fromssize / sizeof(*p->froms); + for (fromindex = 0; fromindex < endfrom; fromindex++) { + if (p->froms[fromindex] == 0) { + continue; + } + frompc = p->lowpc; + frompc += fromindex * HASHFRACTION * sizeof(*p->froms); + for (toindex = p->froms[fromindex]; toindex != 0; toindex = p->tos[toindex].link) { + rawarc.raw_frompc = frompc; + rawarc.raw_selfpc = getselfpc(&p->tos[toindex]); + rawarc.raw_count = getcount(&p->tos[toindex]); + // Buffer up writes because Semihosting is really slow per write call + rawarcbuff[rawarcbuffptr++] = rawarc; + if (rawarcbuffptr == BS) { + writeCB((void *)rawarcbuff, BS * sizeof(struct rawarc)); + rawarcbuffptr = 0; + } + } + } + // Write any remaining bits + if (rawarcbuffptr) { + writeCB((void *)rawarcbuff, rawarcbuffptr * sizeof(struct rawarc)); + } +} + + +// These are referenced by RP2040Support.cpp and called by the runtime init SDK +// Install a periodic PC sampler at the specified frequency +#if defined(__riscv) +void runtime_init_setup_profiling() { + // TODO - is there an equivalent? Or do we need to build a timer IRQ here? +} +#else +#include +#include +void runtime_init_setup_profiling() { + exception_set_exclusive_handler(SYSTICK_EXCEPTION, _SystickHandler); + systick_hw->csr = 0x7; + systick_hw->rvr = (F_CPU / GMON_HZ) - 1; +} +#endif diff --git a/cores/rp2040/gprof_shim.S b/cores/rp2040/gprof_shim.S new file mode 100644 index 000000000..3993654fe --- /dev/null +++ b/cores/rp2040/gprof_shim.S @@ -0,0 +1,58 @@ +#if defined(__riscv) +// Originally from https://github.com/sbzpro/riscv-gprof +# define RSIZE 4 + +.section .text +.align 2 +.globl _mcount + _mcount: + addi sp,sp,-4*RSIZE + sw ra, 3*RSIZE(sp) + mv a1,ra + call _mcount_internal; //jal _mcount_internal + lw ra, 3*RSIZE(sp) + addi sp,sp,4*RSIZE + ret +#else +/* + * profiler.S + * Implements the gprof profiler arc counting function. + * Created on: 06.08.2015 + * Author: Erich Styger + * Modified for RP2040/RP2350 on Dec 3 2024 by Earle F. Philhower, III. + */ + .syntax unified + .arch armv7-m + .cpu cortex-m0plus + + .text + .thumb + .thumb_func + .align 2 + +.globl __gnu_mcount_nc +.type __gnu_mcount_nc, %function +.section .time_critical + +__gnu_mcount_nc: +// LR = to return to +// SP = to-replace-LR with + push {r0, r1, r2, r3} + push {lr} + + // Swap 24/0 + ldr r0, [sp, #20] + ldr r1, [sp, #0] + str r0, [sp, #0] + str r1, [sp, #20] + + mov r1, lr + ldr r0, [sp, #0] /* caller - at the top of the stack */ + bl _mcount_internal /* when __gnu_mcount_nc is called */ + pop {r0} + mov lr, r0 + pop {r0, r1, r2, r3} + pop {pc} + + .end __gnu_mcount_nc +#endif diff --git a/docs/index.rst b/docs/index.rst index 8fd2b65bf..e5553c17a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -44,6 +44,7 @@ For the latest version, always check https://github.com/earlephilhower/arduino-p USB (Arduino and Adafruit_TinyUSB) Multicore Processing Semihosting + Profiling (GPROF) RP2350 Specific Notes RP2350 PSRAM diff --git a/docs/profiling.rst b/docs/profiling.rst new file mode 100644 index 000000000..95db1a878 --- /dev/null +++ b/docs/profiling.rst @@ -0,0 +1,76 @@ +Profiling Applications with GPROF +================================= + +Applications running on the Pico can be profiled using GNU GPROF to show where the CPU is using its time +on the device and how often certain functions are called. It does this by recompiling the application +and adding a small preamble to each function built to identify what functions call what others (and +how frequently). It also uses the ``SYSTICK`` exception timer to sample and record the PC 10,000 times +per second. When an application is complete, the recorded date can be dumped to the host PC as a +``gmon.,out`` file which can be processed by ``arm-none-eabi-gprof`` into useful date. + +s histogram of PCs and tally of function caller/callees can take a significant amount of RAM, from 100KB +to 10000KB depending on the size of the application. As such, while the RP2040 **may** be able to +profile small applications, this is only really recommended on the RP2350 with external PSRAM. The +profiler will automatically use PSRAM when available. Call ``rp2040.getProfileMemoryUsage()`` to get the +memory allocated at runtime. + + +Profiling also adds processing overhead in terms of the periodic sampling and the function preambles. +In most cases there is no reason to enable (and many reasons to disable) profiling when an application +is deployed to the field. + +To transfer the ``GMON.OUT`` data from the Pico to the host HP can be done by having the application +write it out to an SD card or a LittleFS filesystem which is then manually dumped, but for ease of use +semihosting can be used to allow the Pico (under the control of OpenOCD and GDB) to write the +``gmon.out`` file directly on the host PC, ready for use. + +**NOTE** Semihosting only works when connected to an OpenOCD + GDB debug session. Running an application +compiled for Semihosting without the debugger will cause a panic and hang the chip. + +As of now, only ARM has support for Semihosting or GPROF. + + +Enabling Profiling in an Application +------------------------------------ + +The ``Tools->Profiling->Enabled`` menu needs to be selected to enable profiling support in GCC. This will +add the necessary preamble to every function compiled (**Note** that the ``libpico`` and ``libc`` will not +be instrumented because they are pre-built so calls from them will not be fully instrumented. However, +PC data will still be grabbed and decoded from them at runtime.) + +The application will automatically start collecting profiling data even before ``setup`` starts in this +mode. It will continue collecting data until you stop and write out the profiling data using +``rp2040.writeProfiling()`` to dump to the host, a file, serial port, etc. + +For example, an application which does all its processing in ``setup()`` might look like: + +.. code:: cpp + + #include + void setup() { + SerialSemi.printf("BEGIN\n"); + do_some_work_that_takes_a_long_time_with_many_function_calls(); + // Do lots of other work... + // Now all done... + SerialSemi.printf("Writing GMON.OUT\n"); + SemiFS.begin(); + File gmon = SemiFS.open("gmon.out", "w"); + rp2040.writeProfiling(&gmon); + gmon.close(); + SerialSemi.printf("END\n"); + } + void loop() {} + + +Collecting and Analyzing Profile Data +------------------------------------- + +Running this application under `semihosting `_ GDB and OpenOCD generates a ``gmon.out`` file +in the OpenOCD current working directory. This file, combined with the ``ELF`` binary build in the +IDE and loaded through GDB, can produce profiler output using + +.. code:: + + $ /path/to/arm-none-eabi/bin/arm-none-eabi-gprof /path/to/sketch.ino.elf /path/to/gmon.out + +See the ``rp2040/Profiling.ino`` example for more details. diff --git a/keywords.txt b/keywords.txt index f5366ccaa..aee98fcf7 100644 --- a/keywords.txt +++ b/keywords.txt @@ -65,6 +65,9 @@ getUsedPSRAMHeap KEYWORD2 getTotalPSRAMHeap KEYWORD2 getTotalPSRAM KEYWORD2 +getProfileMemoryUsage KEYWORD2 +writeProfiling KEYWORD2 + getChipID KEYWORD2 hwrand32 KEYWORD2 diff --git a/libraries/rp2040/examples/Profiling/Profiling.ino b/libraries/rp2040/examples/Profiling/Profiling.ino new file mode 100644 index 000000000..8b472155d --- /dev/null +++ b/libraries/rp2040/examples/Profiling/Profiling.ino @@ -0,0 +1,104 @@ +// This example should be run with profiling enabled from the IDE and +// under GDB/OpenOCD. It uses semihosting to write a gmon.out file +// the host system with the profiled application results. +// +// Semihosting **ONLY** works with an OpenOCD and GDB setup. If you build +// and run a semihosting app without GDB connected, it **WILL CRASH** +// +// Start OpenOCD normally, but leave the terminal window visible because +// is it OpenOCD, not GDB, which will display the semihosting output. +// OpenOCD will also create files in the current working directory, so +// be sure it is a place you can find and write to. +// +// In GDB,connect to OpenOCD and then enable semihosting +// (gdb) target extended-remote localhost:3333 +// (gdb) monitor arm semihosting enable +// (gdb) file /path/to/sketch.ino.elf +// (gdb) load +// +// Run the app from GDB and watch OpenOCD, it will display messages when +// the app is done and "gmon.out" is on the host system. +// +// (gdb) run +// .. pop to OpenOCD window +// [OpenOCD] BEGIN +// [OpenOCD] Result = 2417697592 +// [OpenOCD] Writing GMON.OUT +// [OpenOCD] END +// +// From command line, decode the gmon.out using the ELF and gprof tool +// +// $ /path/to/arm-none-eabi/bin/arm-none-eabi-gprof /path/to/sketch.ino.elf /path/to/gmon.out | less +// Flat profile: +// +// Each sample counts as 0.0001 seconds. +// % cumulative self self total +// time seconds seconds calls ms/call ms/call name +// 50.56 1.74 1.74 3500020 0.00 0.00 __wrap___getreent +// 24.05 2.57 0.83 rand +// 8.32 2.86 0.29 5 57.36 57.36 fcn1(unsigned long) +// ... +// index % time self children called name +// +// [1] 74.6 0.83 1.74 rand [1] +// 1.74 0.00 3500000/3500020 __wrap___getreent [2] +// ----------------------------------------------- +// 0.00 0.00 1/3500020 realloc [106] +// 0.00 0.00 3/3500020 vsnprintf [54] +// 0.00 0.00 7/3500020 srand [7] +// 0.00 0.00 9/3500020 malloc [105] +// 1.74 0.00 3500000/3500020 rand [1] +// ... + +#ifndef __PROFILE +void setup() { + Serial.printf("Enable profiling to run this example.\n"); +} + +void loop() { +} +#else + +#ifdef __riscv +void setup() { + // No semihosting for RISCV yet +} +void loop() { +} +#else + +#include + +uint32_t fcn1(uint32_t st) { + srand(st); + for (int i = 0; i < 500000; i++) { + st += rand(); + } + return st; +} + +uint32_t fcn2(uint32_t st) { + srand(st * st); + for (int i = 0; i < 500000; i++) { + st += rand(); + } + return st; +} + +void setup() { + SerialSemi.printf("BEGIN\n"); + SerialSemi.printf("Result = %lu\n", fcn2(fcn2(fcn1(3)) * fcn1(fcn1(fcn1(fcn1(2)))))); + SerialSemi.printf("Writing GMON.OUT\n"); + SemiFS.begin(); + File gmon = SemiFS.open("gmon.out", "w"); + rp2040.writeProfiling(&gmon); + gmon.close(); + SerialSemi.printf("END\n"); +} + +void loop() { +} + +#endif + +#endif // !__PROFILE diff --git a/platform.txt b/platform.txt index 5e300500b..8a0c167ca 100644 --- a/platform.txt +++ b/platform.txt @@ -64,7 +64,7 @@ compiler.c.elf.flags={compiler.warning_flags} {compiler.defines} {compiler.flags compiler.S.cmd={build.toolchain}-gcc compiler.S.flags=-c {compiler.warning_flags} {compiler.defines} -g -x assembler-with-cpp -MMD {compiler.includes} {build.toolchainopts} -g compiler.cpp.cmd={build.toolchain}-g++ -compiler.cpp.flags=-c {compiler.warning_flags} {compiler.defines} {compiler.flags} -MMD {compiler.includes} {build.flags.rtti} -std=gnu++17 -g -pipe +compiler.cpp.flags=-c {compiler.warning_flags} {compiler.defines} {compiler.flags} -MMD {compiler.includes} {build.flags.rtti} {build.flags.profile} -std=gnu++17 -g -pipe compiler.ar.cmd={build.toolchain}-ar compiler.ar.flags=rcs @@ -98,6 +98,7 @@ build.psram_freq= build.eeprom_start= build.flags.optimize=-Os build.flags.rtti=-fno-rtti +build.flags.profile= build.fs_start= build.fs_end= build.usbstack_flags= diff --git a/tools/build.py b/tools/build.py index 169b085bb..eeb4cf051 100755 --- a/tools/build.py +++ b/tools/build.py @@ -72,6 +72,8 @@ def compile(tmp_dir, sketch, cache, tools_dir, hardware_dir, ide_path, f, args): fqbn = fqbn.replace("rpipico", "rpipicow") if ('/BT' in sketch) or ('/BLE' in sketch) or ('/Bluetooth' in sketch): fqbn = fqbn + ",ipbtstack=ipv4btcble" + if '/Profiling' in sketch: + fqbn = fqbn + ",profile=Enabled" cmd += [fqbn] cmd += ['-built-in-libraries', ide_path + '/libraries'] cmd += ['-ide-version=10607'] diff --git a/tools/makeboards.py b/tools/makeboards.py index 8c961dcb1..e292df694 100755 --- a/tools/makeboards.py +++ b/tools/makeboards.py @@ -93,6 +93,12 @@ def BuildOptimize(name): print("%s.menu.opt.%s=%s (%s)%s" % (name, l[0], l[1], l[2], l[3])) print("%s.menu.opt.%s.build.flags.optimize=%s" % (name, l[0], l[2])) +def BuildProfile(name): + print("%s.menu.profile.Disabled=Disabled" % (name)) + print("%s.menu.profile.Disabled.build.flags.profile=" % (name)) + print("%s.menu.profile.Enabled=Enabled" % (name)) + print("%s.menu.profile.Enabled.build.flags.profile=-pg -D__PROFILE" % (name)) + def BuildRTTI(name): print("%s.menu.rtti.Disabled=Disabled" % (name)) print("%s.menu.rtti.Disabled.build.flags.rtti=-fno-rtti" % (name)) @@ -282,6 +288,7 @@ def BuildGlobalMenuList(): print("menu.freq=CPU Speed") print("menu.arch=CPU Architecture") print("menu.opt=Optimize") + print("menu.profile=Profiling") print("menu.rtti=RTTI") print("menu.stackprotect=Stack Protector") print("menu.exceptions=C++ Exceptions") @@ -353,6 +360,7 @@ def MakeBoard(name, chip, vendor_name, product_name, vid, pid, pwr, boarddefine, else: BuildFreq(name, 133) BuildOptimize(name) + BuildProfile(name) BuildRTTI(name) BuildStackProtect(name) BuildExceptions(name) diff --git a/variants/arduino_nano_connect/pins_arduino.h b/variants/arduino_nano_connect/pins_arduino.h index ff0a5a627..b7b48b3a4 100644 --- a/variants/arduino_nano_connect/pins_arduino.h +++ b/variants/arduino_nano_connect/pins_arduino.h @@ -120,4 +120,7 @@ static const uint8_t SCK = PIN_SPI0_SCK; #define CRYPTO_WIRE Wire #define USB_MAX_POWER (500) + +#ifdef __cplusplus #include "nina_pins.h" +#endif diff --git a/variants/ilabs_rpico32/pins_arduino.h b/variants/ilabs_rpico32/pins_arduino.h index 65700642b..3110c1b14 100644 --- a/variants/ilabs_rpico32/pins_arduino.h +++ b/variants/ilabs_rpico32/pins_arduino.h @@ -1,6 +1,8 @@ #pragma once +#ifdef __cplusplus #include +#endif #define PINS_COUNT (26u) #define NUM_DIGITAL_PINS (26u)