User`s manual

Dynamic C Users Manual digi.com 121
8.2 User-Defined Error Handler
Dynamic C allows replacement of the default error handler with a custom error handler. This is needed to
add run-time error handling that would require treatment not supported by the default handler.
A custom error handler can also be used to change how existing run-time errors are handled. For example,
the floating-point math libraries included with Dynamic C are written to allow for execution to continue
after a domain or range error, but the default error handler halts with a run-time error if that state occurs. If
continued execution is desired (the function in question would return a value of INF or whatever value is
appropriate), then a simple error handler could be written to pass execution back to the program when a
domain or range error occurs, and pass any other run-time errors to Dynamic C.
8.2.1 Replacing the Default Handler
To tell the BIOS to use a custom error handler, call this function:
void defineErrorHandler(void *errfcn)
This function sets the BIOS function pointer for run-time errors to the one passed to it.
When a run-time error occurs, exception() pushes onto the stack the information detailed in the table
below.
.
Then exception() calls the installed error handler. If the error handler passes the run-time error to
Dynamic C (i.e. it is a fatal error and the system needs to be halted or reset), then registers must be loaded
appropriately before calling the _xexit function.
Dynamic C expects the following values to be loaded:
Table 8-3. Stack setup for run-time errors
Address Data at address
SP+0
Return address for error handler
SP+2
Error code
SP+4
Additional data (user-defined)
SP+6
XPC when exception() was called (upper
byte)
SP+8
Address where exception() was called from
Table 8-4. Register contents loaded by error handler before passing
the error to Dynamic C
Register Expected Value
H
XPC when exception() was called
L
Run-time error code
HL’
Address where exception() was called from