mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-10-31 14:11:42 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			234 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /*
 | |
|  * Customer ID=11656; Build=0x5f626; Copyright (c) 2005-2012 by Tensilica Inc.  ALL RIGHTS RESERVED.
 | |
|  * These coded instructions, statements, and computer programs are the
 | |
|  * copyrighted works and confidential proprietary information of Tensilica Inc.
 | |
|  * They may not be modified, copied, reproduced, distributed, or disclosed to
 | |
|  * third parties in any manner, medium, or form, in whole or in part, without
 | |
|  * the prior written consent of Tensilica Inc.
 | |
|  */
 | |
| 
 | |
| #ifndef __XT_PROFILER_H__
 | |
| #define __XT_PROFILER_H__
 | |
| 
 | |
| #include <xtensa/config/core.h>
 | |
| 
 | |
| #if XCHAL_NUM_PERF_COUNTERS
 | |
| /* Performance monitor counters constants */
 | |
| #include <xtensa/xt_perf_consts.h>
 | |
| 
 | |
| #endif /* XCHAL_NUM_PERF_COUNTERS */
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /* This file defines an interface that allows a program being profiled
 | |
|    to control when and how it is profiled, whether it is running under
 | |
|    the instruction set simulator or under the hardware profiler.
 | |
| 
 | |
|    Both ISS and HWP implement this interface, although in different
 | |
|    ways. Both also do the right thing if you don't call any of these
 | |
|    functions.
 | |
| */
 | |
| 
 | |
| 
 | |
| /* 
 | |
| xt_profile_init
 | |
| 
 | |
|    ISS: a no op.
 | |
| 
 | |
|    HWP: Initialize the profiler.  Ordinarily, this function is called 
 | |
|    automatically via the .init section. If your environment does not 
 | |
|    support the .init section, you will need to call this function 
 | |
|    by hand.
 | |
| */
 | |
| extern void xt_profile_init(void);
 | |
| 
 | |
| /* 
 | |
| xt_profile_add_memory
 | |
| 
 | |
|    ISS: a no op.
 | |
| 
 | |
|    HWP:
 | |
|    Makes "buf_size" bytes at "buf" available to the hardware profiler.
 | |
|    This buffer should be initialized to zeros prior to this call.
 | |
| 
 | |
|    The hardware profiler has already estimated the amount of memory it needs,
 | |
|    but under certain circumstances may still run out of memory.  If so, you can
 | |
|    provide more memory with this routine.
 | |
| 
 | |
| */
 | |
| extern void xt_profile_add_memory(void * buf, unsigned int buf_size);
 | |
| 
 | |
| 
 | |
| /* xt_profile_enable
 | |
| 
 | |
|    Turn on the profiler. Ordinarily, profiling is on by default. 
 | |
|    If you turn off profiling using xt_profile_disable, You can turn 
 | |
|    it on again via this function.
 | |
| */
 | |
| extern void xt_profile_enable(void);
 | |
| 
 | |
| /* xt_profile_disable
 | |
| 
 | |
|    Turn off the profiler. If you don't want to profile a portion of your code,
 | |
|    use this function and then xt_profile_enable when you want to start again.
 | |
| */
 | |
| extern void xt_profile_disable(void);
 | |
| 
 | |
| /* xt_profile_save_and_reset
 | |
| 
 | |
|    Save and reset the profiler's data.
 | |
|    If there were errors, either during profiling or while attempting to
 | |
|    write the data, no data will be written and this function will
 | |
|    return non-zero.
 | |
|    
 | |
| */
 | |
| extern int xt_profile_save_and_reset(void);
 | |
| 
 | |
| /* xt_profile_get_frequency
 | |
| 
 | |
|    ISS: always returns 1.
 | |
| 
 | |
|    HWP:
 | |
|    Returns the number of cycles between samples for timer based profiler.
 | |
|    In performance counters based profiler always returns 1.
 | |
| */
 | |
| extern unsigned int xt_profile_get_frequency(void);
 | |
| 
 | |
| /* xt_profile_set_frequency
 | |
| 
 | |
|    ISS: a no op.
 | |
| 
 | |
|    HWP:
 | |
|    Set the number of cycles between samples for timer based profiler.
 | |
|    Ignored in performance counters based profiler.
 | |
| 
 | |
|    sample frequency is the number of cycles to wait between samples.  It should
 | |
|    be a multiple of 1024.
 | |
|    
 | |
|    If you set the sample frequency to a different value than was passed in xt_profile_init,
 | |
|    then the labels in the output will reflect the later frequency, even though some samples may
 | |
|    have been taken at the earlier frequency.  Typically this does not make a significant difference
 | |
|    in the results if this function is called early enough.
 | |
| */
 | |
| extern void xt_profile_set_frequency(unsigned int sample_frequency);
 | |
| 
 | |
| /* xt_profile_num_errors
 | |
| 
 | |
|    ISS: always returns 0
 | |
| 
 | |
|    HWP:
 | |
|    Returns the number of errors that occured while taking samples.  Typically these
 | |
|    are out of memory errors and you need to pass a bigger buffer to 
 | |
|    xt_profile_add_memory
 | |
| */
 | |
| extern int xt_profile_num_errors(void);
 | |
| 
 | |
| 
 | |
| #if XCHAL_NUM_PERF_COUNTERS
 | |
| 
 | |
| 
 | |
| /* xt_profile_randomize
 | |
| 
 | |
|    ISS: not available
 | |
| 
 | |
|    HWP: Available in performance monitor based profiler.
 | |
| 
 | |
|    Turns on or off sampling period randomization mode. Period randomization
 | |
|    helps to avoid aliasing problems when code being profiled is highly periodic.
 | |
|    Profiler maintains same average sampling period but individual sampling
 | |
|    steps may vary.
 | |
|    Period randomization is turned off by default.
 | |
| 
 | |
|    <value> - non zero turns randomization on,
 | |
|              zero turns randomization off.
 | |
| */
 | |
| 
 | |
| extern void xt_profile_randomization(int value);
 | |
| 
 | |
| /* xt_profile_config_clear
 | |
| 
 | |
|    ISS: not available
 | |
| 
 | |
|    HWP: Available in performance monitor based profiler.
 | |
| 
 | |
|    Stops profiling if it was enabled and clears performance counters
 | |
|    parameters. Accumulated profile data stays in memory and will be
 | |
|    saved when xt_profile_save_and_reset is called or at program exit.
 | |
|    Number of configured performance counters is zero after this 
 | |
|    function call.
 | |
| */
 | |
| 
 | |
| extern void xt_profile_config_clear(void);
 | |
| 
 | |
| 
 | |
| /* xt_profile_config_num
 | |
| 
 | |
|    ISS: not available
 | |
| 
 | |
|    HWP: Available in performance monitor based profiler.
 | |
| 
 | |
|    Returns number of free performance counters.
 | |
| */
 | |
| 
 | |
| extern int xt_profile_config_num(void);
 | |
| 
 | |
| 
 | |
| /* xt_profile_config_counter error codes
 | |
| */
 | |
| 
 | |
| #define XTPROF_ERR_OUT_OF_MEM            -1
 | |
| #define XTPROF_ERR_INVALID_ARGS          -2
 | |
| #define XTPROF_ERR_NOT_ENOUGH_COUNTERS   -3
 | |
| #define XTPROF_ERR_DEFUNCT               -4
 | |
| 
 | |
| /* xt_profile_config_counter
 | |
| 
 | |
|    ISS: not available
 | |
| 
 | |
|    HWP: Available in performance monitor based profiler.
 | |
| 
 | |
|    Allocating and initializing one or more performance counter for sampling.
 | |
|    Even though event may require multiple performance counters allocated the
 | |
|    profile data for event is merged and dumped into single gmon file.
 | |
|    This function disables profiling if it was enabled.
 | |
| 
 | |
|    Returns 0 on success, non zero if failed:
 | |
|    XTPROF_ERR_OUT_OF_MEM - memory allocation failed;
 | |
|    XTPROF_ERR_INVALID_ARGS - invalid function parameters;
 | |
|    XTPROF_ERR_NOT_ENOUGH_COUNTERS - not enough free performance counters available;
 | |
|    XTPROF_ERR_DEFUNCT - profiling is disabled because of previous errors
 | |
|                         (xt_profile_num_errors() is non zero)
 | |
| 
 | |
|    <selector> - events group, one of XTPERF_CNT constants defined in xt_perf_consts.h
 | |
|    <mask> - events mask for selected group. Mask bit fields for each 
 | |
|             selector defined with XTPERF_MASK prefix in xt_perf_consts.h
 | |
|    <trace_level> - specifies interrupt levels at which to take samples;
 | |
|                    if trace_level is greater or equal to zero samples are
 | |
| 		   taken only at interrupt levels below or equal to
 | |
| 		   trace_level; if trace_level is negative samples are taken
 | |
| 		   only at (-trace_level) interrupt level or higher.
 | |
|    <period> - sampling period; 1 - record every event, 2 - record every 
 | |
|               other event and so on;
 | |
|               Please note - there is overhead associated with events recording,
 | |
| 	      high frequency events may produce incorrect profile when period
 | |
| 	      is too small.
 | |
| */
 | |
|    
 | |
| extern int xt_profile_config_counter ( unsigned int  selector,
 | |
| 				       unsigned int  mask,
 | |
| 				                int  trace_level,
 | |
| 				       unsigned int  period);
 | |
| 
 | |
| 
 | |
| 
 | |
| #endif /* XCHAL_NUM_PERF_COUNTERS */
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* __XT_PROFILER_H__ */
 |