96 lines
3.6 KiB
C
96 lines
3.6 KiB
C
/*!
|
|
* \file hal_assert.h
|
|
*
|
|
* \brief The header of hal_assert.c
|
|
*
|
|
* \copyright Revised BSD License, see section \ref LICENSE.
|
|
*
|
|
* \code
|
|
*
|
|
* _ __ _ ________ _
|
|
* | |/ /(_)___ / ____/ /_ (_)___
|
|
* | // / __ \/ / / __ \/ / __ \
|
|
* / |/ / / / / /___/ / / / / /_/ /
|
|
* /_/|_/_/_/ /_/\____/_/ /_/_/ .___/
|
|
* /_/
|
|
* (C) 2022-2025 XinChip
|
|
*
|
|
* \endcode
|
|
*
|
|
* \author ( XinChip ) Alex-J
|
|
*
|
|
* \author ( XinChip )
|
|
*/
|
|
|
|
#ifndef HAL_ASSERT_H
|
|
#define HAL_ASSERT_H
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* Macros
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/*
|
|
* HAL_ASSERT( expression ) - The given expression must evaluate as "true" or else the assert
|
|
* handler is called. From here, the call stack feature of the debugger can pinpoint where
|
|
* the problem occurred.
|
|
*
|
|
* HAL_ASSERT_FORCED( ) - If asserts are in use, immediately calls the assert handler.
|
|
*
|
|
* HAL_ASSERT_STATEMENT( statement ) - Inserts the given C statement but only when asserts
|
|
* are in use. This macros allows debug code that is not part of an expression.
|
|
*
|
|
* HAL_ASSERT_DECLARATION( declaration ) - Inserts the given C declaration but only when asserts
|
|
* are in use. This macros allows debug code that is not part of an expression.
|
|
*
|
|
* Asserts can be disabled for optimum performance and minimum code size (ideal for
|
|
* finalized, debugged production code). To disable, define the preprocessor
|
|
* symbol HALNODEBUG at the project level.
|
|
*/
|
|
|
|
|
|
#ifdef HALNODEBUG
|
|
#define HAL_ASSERT(expr)
|
|
#define HAL_ASSERT_FORCED()
|
|
#define HAL_ASSERT_STATEMENT(statement)
|
|
#define HAL_ASSERT_DECLARATION(declaration)
|
|
#else
|
|
#define HAL_ASSERT(expr) st( if (!( expr )) halAssertHandler(); )
|
|
#define HAL_ASSERT_FORCED() halAssertHandler()
|
|
#define HAL_ASSERT_STATEMENT(statement) st( statement )
|
|
#define HAL_ASSERT_DECLARATION(declaration) declaration
|
|
#endif
|
|
|
|
|
|
/*
|
|
* This macro compares the size of the first parameter to the integer value
|
|
* of the second parameter. If they do not match, a compile time error for
|
|
* negative array size occurs (even gnu chokes on negative array size).
|
|
*
|
|
* This compare is done by creating a typedef for an array. No variables are
|
|
* created and no memory is consumed with this check. The created type is
|
|
* used for checking only and is not for use by any other code. The value
|
|
* of 10 in this macro is arbitrary, it just needs to be a value larger
|
|
* than one to result in a positive number for the array size.
|
|
*/
|
|
#define HAL_ASSERT_SIZE(x,y) typedef char x ## _assert_size_t[-1+10*(sizeof(x) == (y))]
|
|
|
|
|
|
/* ------------------------------------------------------------------------------------------------
|
|
* Prototypes
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
void halAssertHandler(void);
|
|
|
|
|
|
/**************************************************************************************************
|
|
*/
|
|
|
|
/**************************************************************************************************
|
|
* FUNCTIONS - API
|
|
**************************************************************************************************/
|
|
|
|
|
|
extern void halAssertHazardLights(void);
|
|
#endif
|