mirror of
https://github.com/ThrowTheSwitch/CException
synced 2025-02-02 02:58:43 -05:00
54 lines
2.0 KiB
C
54 lines
2.0 KiB
C
/* =========================================================================
|
|
CException - Simple Exception Handling in C
|
|
ThrowTheSwitch.org
|
|
Copyright (c) 2007-24 Mark VanderVoord
|
|
SPDX-License-Identifier: MIT
|
|
========================================================================= */
|
|
|
|
#ifndef _EXCEPTION_H
|
|
#define _EXCEPTION_H
|
|
|
|
#include "unity.h"
|
|
|
|
extern volatile int TestingTheFallback;
|
|
extern volatile int TestingTheFallbackId;
|
|
|
|
//Optionally define the exception type (something like an int which can be directly assigned)
|
|
#define CEXCEPTION_T int
|
|
|
|
// Optionally define the reserved value representing NO EXCEPTION
|
|
#define CEXCEPTION_NONE (1234)
|
|
|
|
// Optionally define a special handler for unhandled exceptions
|
|
#define CEXCEPTION_NO_CATCH_HANDLER(id) \
|
|
{ \
|
|
if (!TestingTheFallback) \
|
|
{ \
|
|
TEST_FAIL_MESSAGE("Unexpected Exception!"); \
|
|
} \
|
|
else \
|
|
{ \
|
|
TestingTheFallbackId = id; \
|
|
TestingTheFallback--; \
|
|
} \
|
|
}
|
|
|
|
// Multi-Tasking environments will need a couple of macros defined to make this library
|
|
// properly handle multiple exception stacks. You will need to include and required
|
|
// definitions, then define the following macros:
|
|
// EXCEPTION_GET_ID - returns the id of the current task indexed 0 to (numtasks - 1)
|
|
// EXCEPTION_NUM_ID - returns the number of tasks that might be returned
|
|
//
|
|
// For example, Quadros might include the following implementation:
|
|
#ifndef TEST
|
|
#include "OSAPI.h"
|
|
#define CEXCEPTION_GET_ID (KS_GetTaskID())
|
|
#define CEXCEPTION_NUM_ID (NTASKS + 1)
|
|
#endif
|
|
|
|
//This could be a good place to define/include some error ID's:
|
|
#define ERROR_ID_EVERYTHING_IS_BROKEN (0x88)
|
|
#define ERROR_ID_ONLY_THIS_IS_BROKEN (0x77)
|
|
|
|
#endif // _EXCEPTION_H
|