Macros that disable and enable interrupts
Declaration:
void disable(void);
void _disable(void);
Remarks:
These macros provide programmers with flexible hardware interrupt control.
disable and _disable disable interrupts.
allowing any device interrupts to occur.
Only the NMI (non-maskable interrupt) is allowed from any external device.
Return Value:
None
program
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#define INTR 0X1C /* The clock tick
interrupt */
#ifdef __cplusplus
#define __CPPARGS ...
#else
#define __CPPARGS
#endif
void interrupt (*oldhandler)(__CPPARGS);
int count=0;
void interrupt handler(__CPPARGS)
/* if C++, need the the ellipsis */
{
/* disable interrupts during the handling of the interrupt */
disable();
/* increase the global counter */
count++;
/* reenable interrupts at the end of the handler */
enable();
/* call the old routine */
oldhandler();
}
int main(void)
{
/* save the old interrupt vector */
oldhandler = getvect(INTR);
/* install the new interrupt handler */
setvect(INTR, handler);
/* loop until the counter exceeds 20 */
while (count < 20)
printf("count is %d\n",count);
/* reset the old interrupt handler */
setvect(INTR, oldhandler);
return 0;
}
0 comments:
Post a Comment