As far as I can tell, the C18 compiler automatically takes care of the=20 two different context saving methods for WREG, BSR and STATUS, depending=20 on whether the interrupt priority is high (i.e. use shadow regs & fast=20 return) or low (i.e. use stack). Great! Since ISRs use a temporary data section kept separate from normal C=20 functions, does this create any issues with ISRs calling functions=20 elsewhere in program memory? The C18 Compiler User's Guide=20 (DS51288J-page 28) says the following, but I can't conclude much from it: "... Interrupt service routines use a temporary data section that is distinct=20 from that used by normal C functions. Any temporary data required during the evaluation of expressions in the interrupt service routine is allocated in this=20 section and is not overlaid with the temporary locations of other functions, including=20 other interrupt functions. The interrupt pragmas allow the interrupt temporary data=20 section to be named. If this section is not named, the compiler temporary variables=20 are created in a udata section named fname_tmp. For example: void foo(void); .... #pragma interrupt foo void foo(void) { /* perform interrupt function here */ } The compiler temporary variables for interrupt service routine foo will=20 be placed in the udata section foo_tmp. ...." In other words, do I have to name or move this ISR temporary area=20 somehow to enable 'normal' execution of arbitrary functions? Thoughts welcome, Matt. --=20 http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist .