assert.h
上传用户:jnhtjd
上传日期:2022-07-16
资源大小:403k
文件大小:4k
源码类别:

微处理器开发

开发平台:

C/C++

  1. /* ----------------------------------------------------------------------------
  2.  *         ATMEL Microcontroller Software Support 
  3.  * ----------------------------------------------------------------------------
  4.  * Copyright (c) 2008, Atmel Corporation
  5.  *
  6.  * All rights reserved.
  7.  *
  8.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions are met:
  10.  *
  11.  * - Redistributions of source code must retain the above copyright notice,
  12.  * this list of conditions and the disclaimer below.
  13.  *
  14.  * Atmel's name may not be used to endorse or promote products derived from
  15.  * this software without specific prior written permission.
  16.  *
  17.  * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR
  18.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  19.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
  20.  * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
  21.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  22.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  23.  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  24.  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  25.  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
  26.  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  27.  * ----------------------------------------------------------------------------
  28.  */
  29. //------------------------------------------------------------------------------
  30. /// unit
  31. ///
  32. /// !Purpose
  33. ///
  34. /// Definition of the ASSERT() and SANITY_CHECK() macros, which are used for
  35. /// runtime condition & parameter verifying.
  36. ///
  37. /// !Usage
  38. ///
  39. /// -# Use ASSERT() in your code to check the value of function parameters,
  40. ///    return values, etc. *Warning:* the ASSERT() condition must not have
  41. ///    any side-effect; otherwise, the program may not work properly
  42. ///    anymore when assertions are disabled.
  43. /// -# Use SANITY_CHECK() to perform checks with a default error message
  44. ///    (outputs the file and line number where the error occured). This 
  45. ///    reduces memory overhead caused by assertion error strings.
  46. /// -# Initialize the dbgu to see failed assertions at run-time.
  47. /// -# Assertions can be entirely disabled by defining the NOASSERT symbol
  48. ///    at compilation time.
  49. //------------------------------------------------------------------------------
  50. #ifndef ASSERT_H
  51. #define ASSERT_H
  52. //------------------------------------------------------------------------------
  53. //         Headers
  54. //------------------------------------------------------------------------------
  55. #include <stdio.h>
  56. #include "trace.h"
  57. //------------------------------------------------------------------------------
  58. //         Definitions
  59. //------------------------------------------------------------------------------
  60. #if defined(NOASSERT)
  61.     #define ASSERT(...)
  62.     #define SANITY_CHECK(...)
  63. #else
  64.     #if (TRACE_LEVEL == 0)
  65.         /// Checks that the given condition is true, 
  66.         /// otherwise stops the program execution.
  67.         /// param condition  Condition to verify.
  68.         #define ASSERT(condition, ...)  { 
  69.             if (!(condition)) { 
  70.                 while (1); 
  71.             } 
  72.         }
  73.         /// Performs the same duty as the ASSERT() macro
  74.         /// param condition  Condition to verify.
  75.         #define SANITY_CHECK(condition) ASSERT(condition, ...)
  76.     #else
  77.         /// Checks that the given condition is true, otherwise displays an error
  78.         /// message and stops the program execution.
  79.         /// param condition  Condition to verify.
  80.         #define ASSERT(condition, ...)  { 
  81.             if (!(condition)) { 
  82.                 printf("-F- ASSERT: "); 
  83.                 printf(__VA_ARGS__); 
  84.                 while (1); 
  85.             } 
  86.         }
  87.         #define SANITY_ERROR            "Sanity check failed at %s:%dnr"
  88.     
  89.         /// Performs the same duty as the ASSERT() macro, except a default error
  90.         /// message is output if the condition is false.
  91.         /// param condition  Condition to verify.
  92.         #define SANITY_CHECK(condition) ASSERT(condition, SANITY_ERROR, __FILE__, __LINE__)
  93.     #endif
  94. #endif
  95. #endif //#ifndef ASSERT_H