Structured and Standard C++ Exception Handling

eRTOS supports Standard exceptions (throw/catch), Windows Structured Exception Handling (SEH) APIs, and C frame-based exception handling (try/except/finally), all as defined by the Windows Platform SDK.

In this section:

C++ Support

eRTOS supports the Visual C++ language, with some restrictions discussed in the note below. eRTOS supports all C++ features usable in a Windows C++ eRTOS application, including new/delete operators and standard exception handling.

Note: eRTOS does not claim support for all C++ libraries. Support is limited to libraries that depend upon the set of Windows functions supported in the eRTOS environment.

Structured Exception Handling

eRTOS supports Structured Exception Handling and standard C++ exceptions, as described by the Windows Platform SDK, including:

EXCEPTION_BREAKPOINT
EXCEPTION_SINGLE_STEP
EXCEPTION_ACCESS_VIOLATION
EXCEPTION_ILLEGAL_INSTRUCTION
EXCEPTION_FLT_DENORMAL_OPERAND
EXCEPTION_FLT_DIVIDE_BY_ZERO
EXCEPTION_FLT_INEXACT_RESULT
EXCEPTION_FLT_INVALID_OPERATION
EXCEPTION_FLT_OVERFLOW
EXCEPTION_FLT_UNDERFLOW
EXCEPTION_INT_DIVIDE_BY_ZERO
EXCEPTION_DOUBLE_FAULT

Using Structured Exception Handling

To use Structured Exception Handling (SEH) in an eRTOS application, the application must be linked with the Microsoft C Runtime libraries which contain run-time support for the SEH frame-based exception handlers.

Differences Between Windows and eRTOS Exception Handling

The eRTOS implementation follows Windows SEH semantics where possible. This section describes the differences.

UnhandledExceptionFilter

On an unhandled exception, eRTOS always displays a statement that the application has been frozen. You can use Kill to terminate the frozen application.

Exception caused by a thread

When a thread of a multithreaded application causes an exception in Windows, the system displays a dialog box. Until the user responds to the box, other threads of the application continue running. Once the user has responded, all threads of the application terminate.

eRTOS acts differently for unhandled exceptions; it freezes all threads of a process whenever any of them gets an unhandled exception, and prints an informational statement on the console. This behavior is safer and more intuitive in the eRTOS context. You can, however, emulate the Windows behavior by using per-thread unhandled exception filter functions.

Continue execution context

When an exception occurs in the __try guarded area, and if the filter modifies the FPU state and responds with continue execution, the continue execution context for FPU is different between Windows and eRTOS. In this case, Windows resets the FPU state while eRTOS restores the FPU state captured at the start of dispatching the exception handling logic.

Nested exceptions and collided unwinds

eRTOS follows Windows rules for nested exceptions and "collided" unwinds, with this minor difference:

General User Notes for Structured Exception Handling