
/*
 * Copyright (c) 2015-2019 Cadence Design Systems, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * This utility helps tracing the entering and exiting from tasks.
 * It maintains a circular buffer of tasks in the order they execute,
 * and their execution time. To enable it, set configUSE_TRACE_FACILITY_2
 * to 1 in FreeRTOSConfig.h. You will also need to download the 
 * FreeRTOS_trace patch that contains porttrace.c and the complete version
 * of porttrace.h.
 */

#ifndef PORTTRACE_H
#define PORTTRACE_H

#if configUSE_TRACE_FACILITY_2
    #error "You need to download the FreeRTOS_trace patch that overwrites this file"
#endif

#define porttracePrint(nelements)
#define porttraceStamp(stamp, count_incr)

#endif /* PORTTRACE_H */
