I have a project like space impact and I try to handle keyboard interrupt.My problem is I don't want to use global variable(ship)
in my_keyboard_interrupt_handler
.But i send ship as paremeter to this function , i don't know how to arrange setvect(0x09,my_keyboard_interrupt_handler);
.İf there is any way for using setvect function like that please give me any advise.
int main()
{
void interrupt (*old_keyboard_interrupt_handler)();
ship = (space_ship*)malloc(sizeof(space_ship));
old_keyboard_interrupt_handler = getvect(0x09);
...
setvect(0x09,my_keyboard_interrupt_handler);
return 0;
}
int handle_key()
{
int key;
asm{
sti
in al,60H
xor ah,ah
mov key,ax
in al,61h
or al,82h
out 61h,al
and al,7fh
out 61h,al
mov al,20h
out 20h,al
}
return key;
}
my keyboard interupt handler :
void interrupt my_keyboard_interrupt_handler()
{
int key = handle_key();
if(key == SPACE){
}else if(key == RIGHT){
ship->column++;
}else if(key == LEFT){
ship->column--;
}else if(key == UP){
ship->row_start--;
ship->row_end--;
} else if(key == DOWN){
ship->row_start++;
ship->row_end++;
}else if(key == ESC){
}
clrscr();
print_space_ship(ship);
}
In brief I want to do void interrupt my_keyboard_interrupt_handler(space_ship* ship){..}
.But i don't know how to handle setvect function in this situation
Well, if you're using ship
only in the ISR, then you might as well declare it static inside this function:
void interrupt my_keyboard_interrupt_handler()
{
static space_ship ship = {0};
...
print_space_ship(ship);
}
But if you're using it in other threads or ISRs, then you have to declare it as a shared (global) variable, and protect it with a standard OS resource (such as Semaphore, or more likely - Mutex) where needed.
If that is indeed the case, then passing it as an argument to the ISR is not going to make any difference.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With