1# Copyright (c) 2021 Percepio AB
2# SPDX-License-Identifier: Apache-2.0
3
4config PERCEPIO_TRC_CFG_RECORDER_RTOS_FREERTOS
5    bool
6     default n
7
8config PERCEPIO_TRC_CFG_RECORDER_RTOS_THREADX
9    bool
10    default n
11
12config PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
13    bool
14    default n
15
16choice PERCEPIO_TRC_CFG_START_MODE
17	prompt "Recorder Start Mode"
18	default PERCEPIO_TRC_START_MODE_START
19	help
20	  TRC_START: Starts the tracing directly. In snapshot mode this allows for
21	  starting the trace at any point in your code, assuming vTraceEnable(TRC_INIT)
22	  has been called in the startup.
23	  Can also be used for streaming without Tracealyzer control, e.g. to a local
24	  flash file system (assuming such a "stream port", see trcStreamingPort.h).
25
26	  TRC_START_AWAIT_HOST: For streaming mode only. Initializes the trace recorder
27	  if necessary and waits for a Start command from Tracealyzer ("Start Recording"
28	  button). This call is intentionally blocking! By calling vTraceEnable with
29	  this option from the startup code, you start tracing at this point and capture
30	  the early events.
31
32	  TRC_START_FROM_HOST: Initializes the trace recorder, but does not start the tracing.
33	  In snapshot mode, this must be followed by a vTraceEnable(TRC_START) sometime
34	  later.
35
36config PERCEPIO_TRC_START_MODE_START
37	bool "Start"
38
39config PERCEPIO_TRC_START_MODE_START_AWAIT_HOST
40	bool "Start Await Host"
41	depends on PERCEPIO_TRC_RECORDER_MODE_STREAMING && !PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER
42
43config PERCEPIO_TRC_START_MODE_START_FROM_HOST
44	bool "Start From Host"
45endchoice
46
47choice PERCEPIO_TRC_CFG_STREAM_PORT
48    prompt "Stream Port"
49    depends on PERCEPIO_TRC_RECORDER_MODE_STREAMING
50    default PERCEPIO_TRC_CFG_STREAM_PORT_RTT
51
52config PERCEPIO_TRC_CFG_STREAM_PORT_RTT
53	bool "RTT"
54	depends on (ARM && PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR) || \
55	PERCEPIO_TRC_CFG_RECORDER_RTOS_THREADX || \
56	PERCEPIO_TRC_CFG_RECORDER_RTOS_FREERTOS
57	select USE_SEGGER_RTT if PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
58
59config PERCEPIO_TRC_CFG_STREAM_PORT_ITM
60	bool "ITM"
61	depends on (ARM && PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR) || \
62	PERCEPIO_TRC_CFG_RECORDER_RTOS_THREADX || \
63	PERCEPIO_TRC_CFG_RECORDER_RTOS_FREERTOS
64
65config PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER
66	bool "Ring Buffer"
67
68config PERCEPIO_TRC_CFG_STREAM_PORT_FILE
69	bool "File"
70	depends on !PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
71
72config PERCEPIO_TRC_CFG_STREAM_PORT_TCPIP
73	bool "TCP/IP"
74	depends on !PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
75
76config PERCEPIO_TRC_CFG_STREAM_PORT_STM32_USB_CDC
77	bool "STM32 USB CDC"
78	depends on !PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
79endchoice
80
81if PERCEPIO_TRC_CFG_STREAM_PORT_RTT
82rsource "../streamports/Jlink_RTT/Kconfig"
83endif
84if PERCEPIO_TRC_CFG_STREAM_PORT_ITM
85rsource "../streamports/ARM_ITM/Kconfig"
86endif
87if PERCEPIO_TRC_CFG_STREAM_PORT_RINGBUFFER
88rsource "../streamports/RingBuffer/Kconfig"
89endif
90
91choice PERCEPIO_TRC_CFG_RECORDER_BUFFER_ALLOCATION
92    prompt "Recorder Allocation Mode"
93    default PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_STATIC
94    help
95      Specifies how the recorder buffer is allocated (also in case of streaming, in
96      port using the recorders internal temporary buffer)
97
98      Values:
99        PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_STATIC  - Static allocation (internal)
100        PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC - Malloc in vTraceEnable
101        PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM  - Use vTraceSetRecorderDataBuffer
102
103      Static and dynamic mode does the allocation for you, either in compile time
104      (static) or in runtime (malloc).
105      The custom mode allows you to control how and where the allocation is made,
106      for details see PERCEPIO_TRC_ALLOC_CUSTOM_BUFFER and vTraceSetRecorderDataBuffer().
107
108config PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_STATIC
109	bool "Static allocation"
110
111config PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_DYNAMIC
112	bool "Dynamic allocation"
113
114config PERCEPIO_TRC_RECORDER_BUFFER_ALLOCATION_CUSTOM
115	bool "Custom allocation"
116endchoice
117
118
119menu "Coverage"
120	depends on !PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
121config PERCEPIO_TRC_CFG_SCHEDULING_ONLY
122    bool "Only Record Scheduling Events"
123    default n
124
125config PERCEPIO_TRC_CFG_INCLUDE_MEMMANG_EVENTS
126    bool "Trace Memory Management Events"
127    depends on !PERCEPIO_TRC_CFG_SCHEDULING_ONLY
128    default y
129    help
130      This controls if malloc and free calls should be traced. Disable this to exclude
131      malloc/free calls, or enable it to include such events in the trace.
132
133config PERCEPIO_TRC_CFG_INCLUDE_USER_EVENTS
134    bool "Trace User Events"
135    depends on !PERCEPIO_TRC_CFG_SCHEDULING_ONLY
136    default y
137    help
138      If this is disabled, all code related to User Events is excluded in order
139      to reduce code size. Any attempts to store User Events are then silently
140      ignored.
141
142      User Events are application-generated events, like "printf" but for the
143      trace log, generated using vTracePrint and vTracePrintF.
144      The formatting is done on host-side, by Tracealyzer. User Events are
145      therefore much faster than a console printf and can often be used
146      in timing critical code without problems.
147
148      Note: In streaming mode, User Events are used to provide error messages
149      and warnings from the recorder (in case of incorrect configuration) for
150      display in Tracealyzer. Disabling user events will also disable these
151      warnings. You can however still catch them by calling xTraceGetLastError
152      or by putting breakpoints in prvTraceError and prvTraceWarning.
153
154config PERCEPIO_TRC_CFG_INCLUDE_ISR_TRACING
155    bool "Trace ISR Events"
156    depends on !PERCEPIO_TRC_CFG_SCHEDULING_ONLY
157    default y
158    help
159      If this is disabled, the code for recording Interrupt Service Routines is
160      excluded, in order to reduce code size. This means that any calls to
161      vTraceStoreISRBegin/vTraceStoreISREnd will be ignored.
162      This does not completely disable ISR tracing, in cases where an ISR is
163      calling a traced kernel service. These events will still be recorded and
164      show up in anonymous ISR instances in Tracealyzer, with names such as
165      "ISR sending to <queue name>".
166      To disable such tracing, please refer to vTraceSetFilterGroup and vTraceSetFilterMask.
167
168config PERCEPIO_TRC_CFG_INCLUDE_READY_EVENTS
169    bool "Trace Task Ready Events"
170    depends on !PERCEPIO_TRC_CFG_SCHEDULING_ONLY
171    default y
172    help
173      If enabled, events are recorded when tasks enter scheduling state "ready".
174      This allows Tracealyzer to show the initial pending time before tasks enter
175      the execution state, and present accurate response times.
176      If disabled, "ready events" are not created, which allows for recording
177      longer traces in the same amount of RAM.
178
179config PERCEPIO_TRC_CFG_INCLUDE_OSTICK_EVENTS
180    bool "Trace OS Tick Events"
181    depends on !PERCEPIO_TRC_CFG_SCHEDULING_ONLY
182    default y
183    help
184      If this is enabled, events will be generated whenever the OS clock is
185      increased. If disabled, OS tick events are not generated, which allows for
186      recording longer traces in the same amount of RAM.
187endmenu
188
189
190menu "Control Task"
191config PERCEPIO_TRC_CFG_CTRL_TASK_PRIORITY
192	int "Control Task Priority"
193	range 0 32 if PERCEPIO_TRC_CFG_RECORDER_RTOS_FREERTOS || PERCEPIO_TRC_CFG_RECORDER_RTOS_THREADX
194  	range -32 32 if PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
195	default 4
196	help
197	  In streaming mode, TzCtrl is used to receive start/stop commands from
198	  Tracealyzer and in some cases also to transmit the trace data (for stream
199	  ports that uses the internal buffer, like TCP/IP). For such stream ports,
200	  make sure the TzCtrl priority is high enough to ensure reliable periodic
201	  execution and transfer of the data, but low enough to avoid disturbing any
202	  time-sensitive functions.
203
204	  In Snapshot mode, TzCtrl is only used for the stack usage monitoring and is
205	  not created if stack monitoring is disabled. PERCEPIO_TRC_CFG_CTRL_TASK_PRIORITY should
206	  be low, to avoid disturbing any time-sensitive tasks.
207
208config PERCEPIO_TRC_CFG_CTRL_TASK_DELAY
209	int "Control Task Delay"
210	range 1 1000000000
211	default 10
212	help
213	  The delay between loops of the TzCtrl task (see PERCEPIO_TRC_CFG_CTRL_TASK_PRIORITY),
214	  which affects the frequency of the stack monitoring.
215
216	  In streaming mode, this also affects the trace data transfer if you are using
217	  a stream port leveraging the internal buffer (like TCP/IP). A shorter delay
218	  increases the CPU load of TzCtrl somewhat, but may improve the performance of
219	  of the trace streaming, especially if the trace buffer is small.
220
221config PERCEPIO_TRC_CFG_CTRL_TASK_STACK_SIZE
222	int "Control Task Stack Size"
223	range 1 1048576
224	default 256
225	help
226	  The stack size of the Tracealyzer Control (TzCtrl) task.
227	  See PERCEPIO_TRC_CFG_CTRL_TASK_PRIORITY for further information about TzCtrl.
228endmenu
229
230menuconfig PERCEPIO_TRC_CFG_ENABLE_STACK_MONITOR
231	bool "Stack Monitor"
232  	select TRACING_STACK if PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
233	select THREAD_STACK_INFO if PERCEPIO_TRC_CFG_RECORDER_RTOS_ZEPHYR
234	default y
235	help
236	  If enabled (1), the recorder periodically reports the unused stack space of
237	  all active tasks. The stack monitoring runs in the Tracealyzer Control task,
238	  TzCtrl. This task is always created by the recorder when in streaming mode.
239	  In snapshot mode, the TzCtrl task is only used for stack monitoring and is
240	  not created unless this is enabled.
241
242if PERCEPIO_TRC_CFG_ENABLE_STACK_MONITOR
243
244config PERCEPIO_TRC_CFG_STACK_MONITOR_MAX_TASKS
245	int "Stack Monitor Max Tasks"
246	range 1 64
247	default 15
248	help
249	  This controls how many tasks that can be monitored by the stack monitor.
250	  If this is too small, some tasks will be excluded and a warning is shown.
251
252config PERCEPIO_TRC_CFG_STACK_MONITOR_MAX_REPORTS
253	int "Stack Monitor Max Reports"
254	range 1 64
255	default 1
256	help
257	  This defines how many tasks that will be subject to stack usage analysis for
258	  each execution of the Tracealyzer Control task (TzCtrl). Note that the stack
259	  monitoring cycles between the tasks, so this does not affect WHICH tasks that
260	  are monitored, but HOW OFTEN each task stack is analyzed.
261
262	  This setting can be combined with PERCEPIO_TRC_CFG_CTRL_TASK_DELAY to tune the
263	  frequency of the stack monitoring. This is motivated since the stack analysis
264	  can take some time to execute.
265	  However, note that the stack analysis runs in a separate task (TzCtrl) that
266	  can be executed on low priority. This way, you can avoid that the stack
267	  analysis disturbs any time-sensitive tasks.
268
269endif # PERCEPIO_TRC_CFG_ENABLE_STACK_MONITOR
270
271
272menu "ISR"
273config PERCEPIO_TRC_CFG_MAX_ISR_NESTING
274	int "Max ISR Nesting"
275	range 1 1048576
276	default 8
277	help
278	  Defines how many levels of interrupt nesting the recorder can handle, in
279	  case multiple ISRs are traced and ISR nesting is possible. If this
280	  is exceeded, the particular ISR will not be traced and the recorder then
281	  logs an error message. This setting is used to allocate an internal stack
282	  for keeping track of the previous execution context (4 byte per entry).
283
284config PERCEPIO_TRC_CFG_ISR_TAILCHAINING_THRESHOLD
285	int "ISR Tailchaining Threshold"
286	range 0 4194304
287	default 0
288	help
289	  If tracing multiple ISRs, this setting allows for accurate display of the
290	  context-switching also in cases when the ISRs execute in direct sequence.
291
292	  vTraceStoreISREnd normally assumes that the ISR returns to the previous
293	  context, i.e., a task or a preempted ISR. But if another traced ISR
294	  executes in direct sequence, Tracealyzer may incorrectly display a minimal
295	  fragment of the previous context in between the ISRs.
296
297	  By using PERCEPIO_TRC_CFG_ISR_TAILCHAINING_THRESHOLD you can avoid this. This is
298	  however a threshold value that must be measured for your specific setup.
299	  See http://percepio.com/2014/03/21/isr_tailchaining_threshold/
300
301	  The default setting is 0, meaning "disabled" and that you may get an
302	  extra fragments of the previous context in between tail-chained ISRs.
303endmenu
304
305
306menu "Debug"
307config PERCEPIO_TRC_CFG_RECORDER_DATA_INIT
308  int "Data Init"
309  default 1
310  help
311    Macro that states wether the recorder data should have an initial value.
312
313    In very specific cases where traced objects are created before main(),
314    the recorder will need to be started even before that. In these cases,
315    the recorder data would be initialized by xTraceInitialize() but could
316    then later be overwritten by the initialization value.
317    If this is an issue for you, set PERCEPIO_TRC_CFG_RECORDER_DATA_INIT to 0.
318    The following code can then be used before any traced objects are created:
319
320    extern uint32_t RecorderEnabled;
321    RecorderEnabled = 0;
322    xTraceInitialize();
323
324    After the clocks are properly initialized, use vTraceEnable(...) to start
325    the tracing.
326
327config PERCEPIO_TRC_CFG_USE_TRACE_ASSERT
328  bool "Trace Asserts"
329  default n
330  help
331    Enable or disable debug asserts. Information regarding any assert that is
332    triggered will be in trcAssert.c.
333endmenu
334
335
336if PERCEPIO_TRC_RECORDER_MODE_SNAPSHOT
337
338menu "Snapshot Config"
339choice PERCEPIO_TRC_CFG_SNAPSHOT_MODE
340	prompt "Snapshot Mode"
341	default PERCEPIO_TRC_SNAPSHOT_MODE_RING_BUFFER
342	help
343	  With PERCEPIO_TRC_CFG_SNAPSHOT_MODE set to PERCEPIO_TRC_CFG_SNAPSHOT_MODE_RING_BUFFER, the
344	  events are stored in a ring buffer, i.e., where the oldest events are
345	  overwritten when the buffer becomes full. This allows you to get the last
346	  events leading up to an interesting state, e.g., an error, without having
347	  to store the whole run since startup.
348
349	  When PERCEPIO_TRC_CFG_SNAPSHOT is PERCEPIO_TRC_SNAPSHOT_MODE_STOP_WHEN_FULL, the
350	  recording is stopped when the buffer becomes full. This is useful for
351	  recording events following a specific state, e.g., the startup sequence.
352
353config PERCEPIO_TRC_SNAPSHOT_MODE_RING_BUFFER
354	bool "Ring buffer mode"
355
356config PERCEPIO_TRC_SNAPSHOT_MODE_RING_STOP_WHEN_FULL
357	bool "Stop when full"
358endchoice
359
360config PERCEPIO_TRC_CFG_EVENT_BUFFER_SIZE
361	int "Event Buffer Size"
362	range 1 4194304
363	default 1000
364	help
365	  This defines the capacity of the event buffer, i.e., the number of records
366	  it may store. Most events use one record (4 byte), although some events
367	  require multiple 4-byte records. You should adjust this to the amount of RAM
368	  available in the target system.
369
370	  Default value is 1000, which means that 4000 bytes is allocated for the
371	  event buffer.
372
373config PERCEPIO_TRC_CFG_INCLUDE_FLOAT_SUPPORT
374	bool "Include Float Support"
375	default 0
376	help
377	  If this is zero (0), the support for logging floating point values in
378	  vTracePrintF is stripped out, in case floating point values are not used or
379	  supported by the platform used.
380
381	  Floating point values are only used in vTracePrintF and its subroutines, to
382	  allow for storing float (%f) or double (%lf) arguments.
383
384	  vTracePrintF can be used with integer and string arguments in either case.
385
386config PERCEPIO_TRC_CFG_SYMBOL_TABLE_SIZE
387	int "Symbol Table Size"
388	range 1 4194304
389	default 800
390	help
391	  This defines the capacity of the symbol table, in bytes. This symbol table
392	  stores User Event labels and names of deleted tasks, queues, or other kernel
393	  objects. If you don't use User Events or delete any kernel
394	  objects you set this to a very low value. The minimum recommended value is 4.
395	  A size of zero (0) is not allowed since a zero-sized array may result in a
396	  32-bit pointer, i.e., using 4 bytes rather than 0.
397
398menu "Advanced Settings"
399config PERCEPIO_TRC_CFG_HEAP_SIZE_BELOW_16M
400	bool "Heap Size Below 16M"
401	default n
402	help
403	  An integer constant that can be used to reduce the buffer usage of memory
404	  allocation events (malloc/free). This value should be 1 if the heap size is
405	  below 16 MB (2^24 byte), and you can live with reported addresses showing the
406	  lower 24 bits only. If set to 0, you get the full 32-bit addresses.
407
408config PERCEPIO_TRC_CFG_USE_IMPLICIT_IFE_RULES
409	bool "Use Implicit IFE Rules"
410	default y
411	help
412	  Tracealyzer groups the events into "instances" based on Instance Finish
413	  Events (IFEs), produced either by default rules or calls to the recorder
414	  functions vTraceInstanceFinishedNow and vTraceInstanceFinishedNext.
415
416	  If PERCEPIO_TRC_CFG_USE_IMPLICIT_IFE_RULES is one (1), the default IFE rules are
417	  used, resulting in a "typical" grouping of events into instances.
418	  If these rules don't give appropriate instances in your case, you can
419	  override the default rules using vTraceInstanceFinishedNow/Next for one
420	  or several tasks. The default IFE rules are then disabled for those tasks.
421
422	  If PERCEPIO_TRC_CFG_USE_IMPLICIT_IFE_RULES is zero (0), the implicit IFE rules are
423	  disabled globally. You must then call vTraceInstanceFinishedNow or
424	  vTraceInstanceFinishedNext to manually group the events into instances,
425	  otherwise the tasks will appear a single long instance.
426
427	  The default IFE rules count the following events as "instance finished":
428	    - Task delay, delay until
429	    - Task suspend
430	    - Blocking on "input" operations, i.e., when the task is waiting for the
431	    next a message/signal/event. But only if this event is blocking.
432
433config PERCEPIO_TRC_CFG_USE_16BIT_OBJECT_HANDLES
434	bool "Use 16 Bit Object Handles"
435	default n
436	help
437	  If set to 0 (zero), the recorder uses 8-bit handles to identify kernel
438	  objects such as tasks and queues. This limits the supported number of
439	  concurrently active objects to 255 of each type (tasks, queues, mutexes,
440	  etc.) Note: 255, not 256, since handle 0 is reserved.
441
442	  If set to 1 (one), the recorder uses 16-bit handles to identify kernel
443	  objects such as tasks and queues. This limits the supported number of
444	  concurrent objects to 65535 of each type (object class). However, since the
445	  object property table is limited to 64 KB, the practical limit is about
446	  3000 objects in total.
447
448	  Default is 0 (8-bit handles)
449
450	  NOTE: An object with handle above 255 will use an extra 4-byte record in
451	  the event buffer whenever the object is referenced. Moreover, some internal
452	  tables in the recorder gets slightly larger when using 16-bit handles.
453
454config PERCEPIO_TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER
455	bool "Use Separate User Event Buffer"
456	default n
457	help
458	  Set PERCEPIO_TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER to 1 to enable the
459	  separate user event buffer (UB).
460	  In this mode, user events are stored separately from other events,
461	  e.g., RTOS events. Thereby you can get a much longer history of
462	  user events as they don't need to share the buffer space with more
463	  frequent events.
464
465	  The UB is typically used with the snapshot ring-buffer mode, so the
466	  recording can continue when the main buffer gets full. And since the
467	  main buffer then overwrites the earliest events, Tracealyzer displays
468	  "Unknown Actor" instead of task scheduling for periods with UB data only.
469
470	  In UB mode, user events are structured as UB channels, which contains
471	  a channel name and a default format string. Register a UB channel using
472	  xTraceRegisterUBChannel.
473
474	  Events and data arguments are written using vTraceUBEvent and
475	  vTraceUBData. They are designed to provide efficient logging of
476	  repeating events, using the same format string within each channel.
477
478	  Examples:
479	    traceString chn1 = xTraceRegisterString("Channel 1");
480	    traceString fmt1 = xTraceRegisterString("Event!");
481	    traceUBChannel UBCh1 = xTraceRegisterUBChannel(chn1, fmt1);
482
483	    traceString chn2 = xTraceRegisterString("Channel 2");
484	    traceString fmt2 = xTraceRegisterString("X: %d, Y: %d");
485	    traceUBChannel UBCh2 = xTraceRegisterUBChannel(chn2, fmt2);
486
487	    // Result in "[Channel 1] Event!"
488	    vTraceUBEvent(UBCh1);
489
490	    // Result in "[Channel 2] X: 23, Y: 19"
491	    vTraceUBData(UBCh2, 23, 19);
492
493	    You can also use the other user event functions, like vTracePrintF.
494	    as they are then rerouted to the UB instead of the main event buffer.
495	    vTracePrintF then looks up the correct UB channel based on the
496	    provided channel name and format string, or creates a new UB channel
497	    if no match is found. The format string should therefore not contain
498	    "random" messages but mainly format specifiers. Random strings should
499	    be stored using %s and with the string as an argument.
500
501	    // Creates a new UB channel ("Channel 2", "%Z: %d")
502	    vTracePrintF(chn2, "%Z: %d", value1);
503
504	    // Finds the existing UB channel
505	    vTracePrintF(chn2, "%Z: %d", value2);
506
507config PERCEPIO_TRC_CFG_SEPARATE_USER_EVENT_BUFFER_SIZE
508	int "Separate User Event Buffer Size"
509	depends on PERCEPIO_TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER
510	range 1 4194304
511	default 200
512	help
513	  This defines the capacity of the user event buffer (UB), in number of slots.
514	  A single user event can use multiple slots, depending on its arguments.
515
516config PERCEPIO_TRC_CFG_UB_CHANNELS
517	int "User Event Buffer Channels"
518	depends on PERCEPIO_TRC_CFG_USE_SEPARATE_USER_EVENT_BUFFER
519	range 0 4194304
520	default 32
521	help
522	  This defines the number of User Event Buffer Channels (UB channels).
523	  These are used to structure the events when using the separate user
524	  event buffer, and contains both a User Event Channel (the name) and
525	  a default format string for the channel.
526endmenu # "Advanced Settings"
527endmenu # "Snapshot Config"
528
529endif # PERCEPIO_TRC_RECORDER_MODE_SNAPSHOT
530
531
532if PERCEPIO_TRC_RECORDER_MODE_STREAMING
533
534menu "Streaming Config"
535config PERCEPIO_TRC_CFG_ENTRY_SLOTS
536	int "Entry Slots"
537	range 1 4194304
538	default 50
539	help
540      The maximum number of objects and symbols that can be stored. This includes:
541       - Task names
542       - Named ISRs (vTraceSetISRProperties)
543       - Named kernel objects (vTraceStoreKernelObjectName)
544       - User event channels (xTraceStringRegister)
545
546      If this value is too small, not all symbol names will be stored and the
547      trace display will be affected. In that case, there will be warnings
548      (logged as User Events) from the TzCtrl task, which monitors this.
549
550config PERCEPIO_TRC_CFG_ENTRY_SYMBOL_MAX_LENGTH
551	int "Symbol Max Length"
552	range 1 4194304
553	default 32
554	help
555      The maximum length of symbol names, including:
556       - Task names
557       - Named ISRs (vTraceSetISRProperties)
558       - Named kernel objects (vTraceStoreKernelObjectName)
559       - User event channel names (xTraceStringRegister)
560
561      If longer symbol names are used, they will be truncated by the recorder,
562      which will affect the trace display. In that case, there will be warnings
563      (logged as User Events) from the TzCtrl task, which monitors this.
564endmenu # "Streaming Config"
565
566endif # PERCEPIO_TRC_RECORDER_MODE_STREAMING
567