From ca5065c66ccb07ae7aa43eae44467a07e0bb34f7 Mon Sep 17 00:00:00 2001 From: krzychb Date: Sat, 5 Aug 2017 16:45:02 +0200 Subject: [PATCH] Trace collection command examples --- docs/_static/app_trace-overview.jpg | Bin 26583 -> 23646 bytes docs/api-guides/app_trace.rst | 78 ++++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 9 deletions(-) diff --git a/docs/_static/app_trace-overview.jpg b/docs/_static/app_trace-overview.jpg index 559051f8da390a4c25db6d2346bcd9e586140396..b439737f39f6c76ca46ee3d442667626d2428bb5 100644 GIT binary patch literal 23646 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 r`-kAEp3OZeoIr{vTox~XX{{IMr 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 z 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 diff --git a/docs/api-guides/app_trace.rst b/docs/api-guides/app_trace.rst index 7e50bb5459..90c187d58b 100644 --- a/docs/api-guides/app_trace.rst +++ b/docs/api-guides/app_trace.rst @@ -9,9 +9,9 @@ IDF provides useful feature for program behaviour analysis: application level tr Developers can use this library to send application specific state of execution to the host and receive commands or other type of info in the opposite direction at runtime. The main use cases of this library are: -1. System behaviour analysis. See `System Behaviour Analysis with SEGGER SystemView`_. +1. Collecting application specific data. See `Application Specific Tracing`_. 2. Lightweight logging to the host. See `Logging to Host`_. -3. Collecting application specific data. See `Application Specific Tracing`_. +3. System behaviour analysis. See `System Behaviour Analysis with SEGGER SystemView`_. Tracing components when working over JTAG interface are shown in the figure below. @@ -33,8 +33,8 @@ The library supports two modes of operation: **Streaming mode.** Tracing module enters this mode when host connects to ESP32. In this mode before writing new data to *HW UP BUFFER* tracing module checks that there is enough space in it and if necessary waits for the host to read data and free enough memory. Maximum waiting time is controled via timeout values passed by users to corresponding API routines. So when application tries to write data to trace buffer using finite value of the maximum waiting time it is possible situation that this data will be dropped. Especially this is true for tracing from time critical code (ISRs, OS scheduler code etc.) when infinite timeouts can lead to system malfunction. In order to avoid loss of such critical data developers can enable additional data buffering via menuconfig option *Component config > Application Level Tracing > Size of the pending data buffer* (``CONFIG_ESP32_APPTRACE_PENDING_DATA_SIZE_MAX``). This macro specifies the size of data which can be buffered in above conditions. The option can also help to overcome situation when data transfer to the host is temporarily slowed down, e.g due to USB bus congestions etc. But it will not help when average bitrate of trace data stream exceeds HW interface capabilities. -Config Options and Dependencies -------------------------------- +Configuration Options and Dependencies +-------------------------------------- Using of this feature depends on two components: @@ -190,7 +190,7 @@ Start command syntax: ``outfile`` Path to file to save data from both CPUs. This argument should have the following format: ``file://path/to/file``. ``poll_period`` - Data polling period (in ms). If greater then 0 then command runs in non-blocking mode. By default 1 ms. + Data polling period (in ms) for available trace data. If greater then 0 then command runs in non-blocking mode. By default 1 ms. ``trace_size`` Maximum size of data to collect (in bytes). Tracing is stopped after specified amount of data is received. By default -1 (trace size stop trigger is disabled). ``stop_tmo`` @@ -202,7 +202,47 @@ Start command syntax: .. note:: - If ``poll_period`` is 0, OpenOCD telnet command line will not be available until tracing is stopped. You must stop it manually by resetting the board or pressing CTRL+C in OpenOCD window (not one with the telnet session). Another option is to set ``trace_size`` and wait until this size of data is collected. At this point tracing stops automatically. + If ``poll_period`` is 0, OpenOCD telnet command line will not be available until tracing is stopped. You must stop it manually by resetting the board or pressing Ctrl+C in OpenOCD window (not one with the telnet session). Another option is to set ``trace_size`` and wait until this size of data is collected. At this point tracing stops automatically. + +Command usage examples: + +.. highlight:: none + +1. Collect 2048 bytes of tracing data to a file "trace.log". The file will be saved in "openocd-esp32" directory. + + :: + + esp32 apptrace start file://trace.log 1 2048 5 0 0 + + The tracing data will be retrieved and saved in non-blocking mode. This process will stop automatically after 2048 bytes are collected, or if no data are available for more than 5 seconds. + + .. note:: + + Tracing data is buffered before it is made available to OpenOCD. If you see "Data timeout!" message, then the target is likely sending not enough data to empty the buffer to OpenOCD before expiration of timeout. Either increase the timeout or use a function ``esp_apptrace_flush()`` to flush the data on specific intervals. + +2. Retrieve tracing data indefinitely in non-blocking mode. + + :: + + esp32 apptrace start file://trace.log 1 -1 -1 0 0 + + There is no limitation on the size of collected data and there is no any data timeout set. This process may be stopped by issuing ``esp32 apptrace stop`` command on OpenOCD telnet prompt, or by pressing Ctrl+C in OpenOCD window. + +3. Retrieve tracing data and save them indefinitely. + + :: + + esp32 apptrace start file://trace.log 0 -1 -1 0 0 + + OpenOCD telnet command line prompt will not be available until tracing is stopped. To stop tracing press Ctrl+C in OpenOCD window. + +4. Wait for target to be halted. Then resume target's operation and start data retrieval. Stop after collecting 2048 bytes of data: + + :: + + esp32 apptrace start file://trace.log 0 2048 -1 1 0 + + There is an option to configure target to halt after reset on start of scheduler. To do so, go to menuconfig and enable option *Stop program on scheduler start when JTAG/OCD is detected* under *Component config > FreeRTOS*. Logging to Host @@ -262,7 +302,7 @@ In order to use logging via trace module user needs to perform the following ste } 2. Follow instructions in items 2-5 in `Application Specific Tracing`_. -3. To print out collected log records run the following command in terminal: ``$IDF_PATH/tools/esp_app_trace/logtrace_proc.py /path/to/trace/file /path/to/program/elf/file``. +3. To print out collected log records, run the following command in terminal: ``$IDF_PATH/tools/esp_app_trace/logtrace_proc.py /path/to/trace/file /path/to/program/elf/file``. Log Trace Processor Command Options @@ -347,7 +387,7 @@ Start command syntax: ``outfile2`` Path to file to save data from APP CPU. This argument should have the following format: ``file://path/to/file``. ``poll_period`` - Data polling period (in ms). If greater then 0 then command runs in non-blocking mode. By default 1 ms. + Data polling period (in ms) for available trace data. If greater then 0 then command runs in non-blocking mode. By default 1 ms. ``trace_size`` Maximum size of data to collect (in bytes). Tracing is stopped after specified amount of data is received. By default -1 (trace size stop trigger is disabled). ``stop_tmo`` @@ -355,7 +395,27 @@ Start command syntax: .. note:: - If ``poll_period`` is 0 OpenOCD telnet command line will not be available until tracing is stopped. You must stop it manually by resetting the board or pressing CTRL+C in OpenOCD window (not one with the telnet session). Another option is to set ``trace_size`` and wait until this size of data is collected. At this point tracing stops automatically. + If ``poll_period`` is 0 OpenOCD telnet command line will not be available until tracing is stopped. You must stop it manually by resetting the board or pressing Ctrl+C in OpenOCD window (not one with the telnet session). Another option is to set ``trace_size`` and wait until this size of data is collected. At this point tracing stops automatically. + +Command usage examples: + +.. highlight:: none + +1. Collect SystemView tracing data to files "pro-cpu.str" and "pro-cpu.str". The files will be saved in "openocd-esp32" directory. + + :: + + esp32 sysview start file://pro-cpu.str file://app-cpu.str + + The tracing data will be retrieved and saved in non-blocking mode. To stop data this process enter ``esp32 apptrace stop`` command on OpenOCD telnet prompt, Optionally pressing Ctrl+C in OpenOCD window. + +2. Retrieve tracing data and save them indefinitely. + + :: + + esp32 sysview start file://pro-cpu.str file://app-cpu.str 0 -1 -1 + + OpenOCD telnet command line prompt will not be available until tracing is stopped. To stop tracing, press Ctrl+C in OpenOCD window. Data Visualization