/****************************************************************************** * * Copyright 2016, Fuzhou Rockchip Electronics Co.Ltd . All rights reserved. * No part of this work may be reproduced, modified, distributed, transmitted, * transcribed, or translated into any language or computer format, in any form * or by any means without written permission of: * Fuzhou Rockchip Electronics Co.Ltd . * * *****************************************************************************/ /** * @file dct_assert.h * * This file defines the API for the assertion facility of the embedded lib. * *****************************************************************************/ /*****************************************************************************/ /** * @defgroup module_assert Assert macros * * * Example use of the assert system: * * * - In your source file just use the macro * * @code * void foo( uint8_t* pData, size_t size) * { * DCT_ASSERT(pData != NULL); * DCT_ASSERT(size > 0); * } * @endcode * * @{ * *****************************************************************************/ #ifndef ASSERT_H_ #define ASSERT_H_ typedef char CHAR; /** * @brief The type of the assert handler. @see assert_handler * *****************************************************************************/ typedef void (*ASSERT_HANDLER)(void); /** * The assert handler is a function that is called in case an * assertion failed. If no handler is registered, which is the * default, exit() is called. * *****************************************************************************/ extern ASSERT_HANDLER assert_handler; /** * Compile time assert. Use e.g. to check the size of certain data * types. As this is evaluated at compile time, it will neither cause * size nor speed overhead, and thus is does not need to be inside * the NDEBUG. * *****************************************************************************/ /* we need several levels of indirection to make unique enum names working * we need unique enum names to be able to use DCT_ASSERT_STATIC more than * one time per compilation unit */ #define UNIQUE_ENUM_NAME(u) assert_static__ ## u #define GET_ENUM_NAME(x) UNIQUE_ENUM_NAME(x) #define DCT_ASSERT_STATIC(e) enum { GET_ENUM_NAME(__LINE__) = 1/(e) } #if defined(ENABLE_ASSERT) || !defined(NDEBUG) /** * Dump information on stderr and exit. * * @param file Filename where assertion occured. * @param line Linenumber where assertion occured. * *****************************************************************************/ #ifdef __cplusplus extern "C" #endif void exit_(const char* file, int line); /** * The assert macro. * * @param exp Expression which assumed to be true. * *****************************************************************************/ #define DCT_ASSERT(exp) ((void)0) #else #define DCT_ASSERT(exp) ((void)0) #endif /* @} module_tracer*/ #endif /*ASSERT_H_*/