Claims
- 1. A method of servicing a plurality of interrupts received by a microprocessor using C language interrupt handlers, the method comprising:
- responsive to receipt of a first one of said interrupts, preparing a C level context of said microprocessor and initiating execution of a signal dispatcher;
- responsive to receipt of each one of said interrupts:
- placing said microprocessor in a freeze mode;
- adding a signal number for identifying a C language signal handler associated with said received interrupt onto a signal queue stored in a memory electrically connected to said microprocessor while said microprocessor is in said freeze mode; and
- subsequent to said adding, removing said microprocessor from said freeze mode;
- determining whether said signal queue is empty;
- if said signal queue is not empty, said signal dispatcher retrieving one of said signal numbers from said signal queue and calling said C language signal handler identified by said one of said signal numbers, said signal numbers being retrieved from said signal queue in the same order in which they were added to said signal queue; and
- if said signal queue is empty, exiting said signal dispatcher and restoring said microprocessor C level context.
- 2. The method of claim 1 further comprising:
- while said microprocessor is in said freeze mode, determining whether execution of said C language signal handler associated with said received interrupt is necessary; and
- if execution of said C language signal handler associated with said received interrupt is not necessary, exiting said freeze mode and executing an interrupt return instruction.
- 3. The method of claim 1 wherein said preparing C level context of said microprocessor comprises:
- saving contents of critical registers of said microprocessor on a memory stack in said memory; and
- preparing a register stack of said microprocessor for use by a C language signal handler.
- 4. A method of servicing interrupts generated by a plurality of I/O devices to a microprocessor using C language interrupt handlers, the method comprising:
- responsive to receipt by said microprocessor of a first one of said interrupts, preparing a C level context of said microprocessor and initiating execution of a signal dispatcher;
- responsive to receipt by said microprocessor of each one of said interrupts:
- placing said microprocessor in a freeze mode;
- while said microprocessor is in said freeze mode, adding a signal number associated with said received interrupt to a signal queue, said signal number identifying a C language signal handler comprising interrupt processing code for said received interrupt; and
- subsequent to said storing, removing said microprocessor from said freeze mode;
- said signal dispatcher periodically determining whether said signal queue is empty;
- responsive to a determination that said signal queue is not empty, said signal dispatcher:
- disabling said interrupts;
- retrieving all of said signal numbers from said signal queue and storing said retrieved signal numbers in an array located in said memory;
- enabling said interrupts; and
- sequentially retrieving said signal numbers from said array in the order in which they were added to said signal queue and executing said C language signal handlers identified thereby; and
- responsive to a determination that said signal queue is empty, exiting said signal dispatcher and restoring said microprocessor C level context.
- 5. The method of claim 4 wherein said signal numbers are stored in said array in an order based on a priority of said received interrupts with which they are associated.
- 6. The method of claim 4 wherein said signal numbers are stored in said array such that they are sequentially accessed in an order in which said associated received interrupts were received.
- 7. The method of claim 4 further comprising, responsive to receipt by said microprocessor of each of said interrupts and prior to said storing said signal number associated with said received interrupt in said signal queue;
- determining whether execution of said C language signal handler comprising interrupt processing code for said received interrupt is necessary; and
- if said execution of said C language signal handler comprising interrupt processing code for said received interrupt is not necessary, removing said microprocessor from freeze mode and executing an interrupt return instruction.
- 8. A method of servicing interrupts in a microprocessor device using C language interrupt handlers, wherein said microprocessor device comprises a microprocessor, a memory and a plurality of input/output (I/O) devices interconnected via data and address buses, said microprocessor being further connected to said I/O devices via a plurality of interrupt lines for receiving interrupts from said I/O devices, the method comprising:
- responsive to receipt of an interrupt from one of said I/O devices, causing said microprocessor to enter a freeze mode;
- executing a first stage of a C language interrupt handler associated with said received interrupt while said microprocessor is in said freeze mode, wherein during said first stage, a signal number for identifying a second stage of said associated C language interrupt handler is added to a signal queue stored in said memory, wherein said second stage of said associated C language interrupt handler comprises interrupt processing code for said received interrupt;
- determining whether a signal dispatcher is executing;
- if said signal dispatcher is executing, causing said microprocessor to exit said freeze mode and executing an interrupt return instruction; and
- if said signal dispatcher is not executing:
- causing said microprocessor to exit said freeze mode;
- initiating execution of said signal dispatcher;
- said signal dispatcher retrieving said signal number from said signal queue and calling said identified second stage of said associated C language interrupt handler;
- said signal dispatcher checking said signal queue to determine whether said signal queue is empty;
- if said signal queue is not empty, said signal dispatcher retrieving a next signal number from said signal queue and calling a second stage of a C level interrupt handler identified by said next signal number; and
- if said signal queue is empty, exiting said signal dispatcher and restoring C level context;
- wherein said signal numbers are retrieved from said signal queue in the order in which they were added thereto.
- 9. The method of claim 9 wherein said first stage further comprises:
- prior to said signal number for identifying said second stage of said associated C language interrupt handler being added to said signal queue, determining whether execution of said second stage of said associated C language interrupt handler is necessary; and
- if execution of said second stage of said associated C language interrupt handler is not necessary, causing said microprocessor to exit said freeze mode and executing an interrupt return instruction.
- 10. The method of claim 8 wherein said signal dispatcher is a signal handler.
- 11. The method of claim 8 further comprising:
- preventing said microprocessor from receiving interrupts from said I/O devices;
- while said microprocessor is prevented from receiving interrupts from said I/O devices:
- removing a plurality of signal numbers from signal queue; and
- storing said removed signal numbers in an array in said memory; and
- enabling said microprocessor to receive interrupts from said I/O devices;
- said signal dispatcher sequentially accessing said signal numbers from said array and calling a second stage of a C level interrupt handler identified by said accessed signal number.
- 12. The method of claim 11 wherein said storing comprises storing said removed signal numbers in said array based on a priority thereof.
- 13. The method of claim 11 wherein said storing comprises storing said retrieved signal numbers in said array in an order in which they were added to said signal queue.
- 14. A system for handling multiple interrupts comprising:
- a microprocessor capable of operating in a freeze mode;
- a memory electrically connected to said microprocessor:
- at least one input/output (I/O) device electrically connected to said microprocessor, said at least one I/O device transmitting interrupts to said microprocessor when said at least one I/O device is in need of servicing;
- a plurality of C language interrupt handlers stored in said memory, each of said C language interrupt handlers comprising a freeze mode handler for execution while said microprocessor is in said freeze mode and a signal handler, wherein each of said C language interrupt handlers is associated with one of said interrupts;
- a signal dispatcher stored in said memory for calling appropriate ones of said signal handlers for execution;
- means responsive to receipt by said microprocessor of a first one of said interrupts for preparing a C level context of said microprocessor and initiating execution of said signal dispatcher;
- means responsive to receipt by said microprocessor of each one of said interrupts for placing said microprocessor in said freeze mode; while said microprocessor is in said freeze mode, adding a signal number for identifying said signal handler of said C language interrupt handler associated with said received interrupt to a signal queue stored in said memory, and subsequent to said adding, removing said microprocessor from said freeze mode;
- means for periodically determining whether said signal queue is empty;
- means for exiting said signal dispatcher and restoring said microprocessor C level context if said if said signal queue is empty; and
- means for retrieving one of said signal numbers from said signal queue and calling said signal handler identified by said one of said signal numbers if said signal queue is not empty;
- wherein said signal numbers are retrieved from said signal queue in the same order in which they were added thereto.
- 15. The system of claim 14 further comprising:
- means for determining whether execution of said signal handler of said C language interrupt handler associated with said received interrupt is necessary; and
- means for exiting said freeze mode and executing an interrupt return instruction if execution of said signal handler of said C language interrupt handler associated with said received interrupt is not necessary.
- 16. The system of claim 14 wherein said means for preparing C level context of said microprocessor further comprises:
- means for saving contents of critical registers of said microprocessor on a memory stack in said memory; and
- means for preparing a register stack of said microprocessor for use by a C language interrupt handler.
- 17. A system for servicing interrupts in a microprocessor device using C language interrupt handlers, wherein said microprocessor device comprises a microprocessor, a memory and a plurality of input/output (I/O) devices interconnected via data and address buses, said microprocessor being further connected to said I/O devices via a plurality of interrupt lines for receiving interrupts from said I/O devices, the system comprising:
- means responsive to receipt of an interrupt from one of said I/O devices for causing said microprocessor to enter a freeze mode;
- means for executing a first stage of a C language interrupt handler associated with said received interrupt while said microprocessor is in said freeze mode, wherein during said first stage, a signal number for identifying a second stage of said associated C language interrupt handier is added to a signal queue stored in said memory, wherein said second stage of said associated C language interrupt handler comprises interrupt processing code for said received interrupt;
- means for determining whether a signal dispatcher is running;
- means for causing said microprocessor to exit said freeze mode and for executing an interrupt return instruction if said signal dispatcher is running; and
- means responsive to said signal dispatcher's not running for causing said microprocessor to exit said freeze mode and initiating execution of said signal dispatcher if said signal dispatcher is not running;
- means for retrieving said signal number from said signal queue and calling said identified second stage of said associated C language interrupt handler;
- means for checking said signal queue to determine whether said signal queue is empty;
- means for retrieving a next signal number from said signal queue and calling a second stage of a C level interrupt handler identified by said next signal number if said signal queue is not empty; and
- means for exiting said signal dispatcher and restoring C level context of said signal queue is empty;
- wherein said signal numbers are retrieved from said signal queue in the same order in which they were added thereto.
- 18. The system of claim 17 further comprising:
- means for determining whether execution of said second stage of said associated C language interrupt handler is necessary; and
- means for causing said microprocessor to exit said freeze mode and for executing an interrupt return instruction if execution of said second stage of said associated C language interrupt handler is not necessary.
- 19. The system of claim 17 wherein said signal dispatcher is a signal handler.
- 20. The system of claim 17 further comprising:
- means for preventing said microprocessor from receiving interrupts from said I/O devices;
- means for retrieving a plurality of signal numbers from signal queue;
- means for storing said retrieved signal numbers in an array in said memory while said microprocessor is prevented from receiving interrupts from said I/O devices;
- means for enabling said microprocessor to receive interrupts from said I/O devices once said plurality of signal numbers have been retrieved from said signal queue and stored in said array; and
- means for sequentially accessing said signal numbers from said array in the same order in which said signal numbers were added to said signal queue and calling a second stage of a C level interrupt handier identified by said accessed signal number.
- 21. The system of claim 20 wherein said storing means comprises means for storing said removed signal numbers in said array based on a priority thereof.
- 22. A method of servicing a plurality of interrupts received by a microprocessor using C language interrupt handlers, the method comprising:
- responsive to receipt of a first one of said interrupts, preparing a C level context of said microprocessor and initiating execution of a signal dispatcher;
- responsive to receipt of each one of said interrupts:
- placing said microprocessor in a freeze mode;
- operating on a first stage associated with said interrupt, said first stage including capturing any critical data and deactivating an interrupt request associated with the interrupt
- determining if said interrupt has a second stage associated therewith, said second stage comprising a C language signal handler,
- if said second stage exists, adding a signal number for identifying said second stage onto a signal queue stored in a memory electrically connected to said microprocessor while said microprocessor is in said freeze mode; and
- removing said microprocessor from said freeze mode;
- determining whether said signal queue is empty;
- if said signal queue is not empty, said signal dispatcher retrieving one of said signal numbers from said signal queue and calling said second stage identified by said one of said signal numbers, said signal numbers being retrieved from said signal queue in the same order in which they were added to said signal queue; and if said signal queue is empty, exiting said signal dispatcher and restoring said microprocessor C level context.
Parent Case Info
This is a continuation of application(s) Ser. No. 08/289,512 filed on Aug. 12, 1994 now abandoned.
US Referenced Citations (7)
Non-Patent Literature Citations (1)
| Entry |
| Daniel Mann, "A Short Cut: C Language Interrupt Handlers," Fusion 29K News, Issue 13, Mar. 1993. |
Continuations (1)
|
Number |
Date |
Country |
| Parent |
289512 |
Aug 1994 |
|