F´ Flight Software - C/C++ Documentation  NASA-v1.5.0
A framework for building embedded system applications to NASA flight quality standards.
Assert.hpp
Go to the documentation of this file.
1 #ifndef FW_ASSERT_HPP
2 #define FW_ASSERT_HPP
3 
4 #include <FpConfig.hpp>
6 
7 #if FW_ASSERT_LEVEL == FW_NO_ASSERT
8 
9 #define FW_ASSERT(...)
10 #define FW_STATIC_ASSERT(...)
11 
12 #else // ASSERT is defined
13 
14 #define FW_STATIC_CAT_(a, b) a ## b
15 #define FW_STATIC_CAT(a, b) FW_STATIC_CAT_(a, b)
16 #define FW_STATIC_ASSERT(cond) typedef int FW_STATIC_CAT(FW_STATIC_ASSERT,__LINE__)[(cond) ? 1 : -1]
17 
18 #if FW_ASSERT_LEVEL == FW_FILEID_ASSERT
19 #define FILE_NAME_ARG NATIVE_UINT_TYPE
20 #define FW_ASSERT(cond, ...) \
21  ((void) ((cond) ? (0) : \
22  (Fw::SwAssert(ASSERT_FILE_ID, __LINE__, ##__VA_ARGS__))))
23 #else
24 #define FILE_NAME_ARG U8*
25 #define FW_ASSERT(cond, ...) \
26  ((void) ((cond) ? (0) : \
27  (Fw::SwAssert((U8*)__FILE__, __LINE__, ##__VA_ARGS__))))
28 #endif
29 
30 
31 namespace Fw {
32  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo);
33  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1);
34  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1, AssertArg arg2);
35  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1, AssertArg arg2, AssertArg arg3);
36  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1, AssertArg arg2, AssertArg arg3, AssertArg arg4);
37  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1, AssertArg arg2, AssertArg arg3, AssertArg arg4, AssertArg arg5);
38  NATIVE_INT_TYPE SwAssert(FILE_NAME_ARG file, NATIVE_UINT_TYPE lineNo, AssertArg arg1, AssertArg arg2, AssertArg arg3, AssertArg arg4, AssertArg arg5, AssertArg arg6);
39 
40 }
41 
42 // Base class for declaring an assert hook
43 // Each of the base class functions can be overriden
44 // or used by derived classes.
45 
46 namespace Fw {
47  // Base class for declaring an assert hook
48  class AssertHook {
49  public:
50  AssertHook() : previousHook(NULL) {};
51  virtual ~AssertHook() {};
52  // override this function to intercept asserts
53  virtual void reportAssert(
54  FILE_NAME_ARG file,
55  NATIVE_UINT_TYPE lineNo,
56  NATIVE_UINT_TYPE numArgs,
57  AssertArg arg1,
58  AssertArg arg2,
59  AssertArg arg3,
60  AssertArg arg4,
61  AssertArg arg5,
62  AssertArg arg6
63  );
64  // default reportAssert() will call this when the message is built
65  // override it to do another kind of print. printf by default
66  virtual void printAssert(const I8* msg);
67  // do assert action. By default, calls assert.
68  // Called after reportAssert()
69  virtual void doAssert(void);
70  // register the hook
71  void registerHook(void);
72  // deregister the hook
73  void deregisterHook(void);
74 
75  protected:
76  private:
77  // the previous assert hook
78  AssertHook *previousHook;
79  };
80 
81 
82 }
83 #endif // if ASSERT is defined
84 
85 
86 #endif
I8
int8_t I8
8-bit signed integer
Definition: BasicTypes.hpp:75
NATIVE_UINT_TYPE
unsigned int NATIVE_UINT_TYPE
native unsigned integer type declaration
Definition: BasicTypes.hpp:30
FpConfig.hpp
ISF configuration file.
BasicTypes.hpp
Declares ISF basic types.
NATIVE_INT_TYPE
int NATIVE_INT_TYPE
native integer type declaration
Definition: BasicTypes.hpp:29
AssertArg
#define AssertArg
Definition: FpConfig.hpp:51
NULL
#define NULL
NULL.
Definition: BasicTypes.hpp:100
Fw
Definition: BufferGetPortAc.cpp:6