Interrupt API
-
struct resume_data
data for resume after interrupt
Definition
struct resume_data {
jmp_buf jump;
ulong code;
};
Members
jump
longjmp buffer
code
exception code
-
void set_resume(struct resume_data *data)
set longjmp buffer for resuming after exception
Parameters
struct resume_data *data
pointer to structure with longjmp address
Description
By calling this function it is possible to use a long jump to catch an exception. The caller sets the long jump buffer with set_resume() and then executes setjmp(). If an exception occurs, the code will return to the setjmp caller(). The exception code will be returned in data->code.
After the critical operation call set_resume(NULL) so that an exception in another part of the code will not accidently invoke the long jump.
// This example shows how to use set_resume().
struct resume_data resume;
int ret;
set_resume(&resume);
ret = setjmp(resume.jump);
if (ret) {
printf("An exception %ld occurred\n", resume.code);
} else {
// Do what might raise an exception here.
}
set_resume(NULL);
Return
0 before an exception, 1 after an exception occurred