Kan iemand deze functie pointer syntax verklaren?

stemmen
1

Ik heb gekregen een aantal leverancier geleverde driver code geschreven in C die draait op DOS (ja DOS) voor toegang tot de hardware. Ik probeer uit te werken wat deze code doet, tot nu toe zonder veel succes. In het bijzonder Ik heb problemen met het begrijpen van de volgende code

void (interrupt *oldcan)(void);

void  interrupt far  can_isr(void)
{
    /* function body */
}

Ik gok de eerste regel definieert een functie pointer, maar ik heb nooit gezien interruptwoord dat ik ga ervan uit is een soort van DOS API-functie. Ik heb nog nooit gebruikt DOS eerder en boven de functie definitie lijkt mij dat het heeft 3 return types - void, interrupten fardie duidelijk niet mogelijk is. De functie heeft eigenlijk leegte return type, maar wat is de betekenis van interrupt far?? Het even welke hulp zal met dank ontvangen worden.

De vraag is gesteld op 10/09/2012 om 13:18
user
In andere talen...                            


3 antwoorden

stemmen
1

Het is zeer waarschijnlijk een compiler-specifiek toestel, dat wordt gebruikt om de functie "installeren" als een interrupt handler in een aantal zeer platform-specifieke wijze.

Er is geen interruptzoekwoord in de standaard C taal.

antwoordde op 10/09/2012 om 13:21
bron van user

stemmen
4

De interrupt zoekwoord (was) gebruikt om een interrupthandler maken - dat wil zeggen, deze functie bedoeld om te worden aangeroepen door een interrupt. farbetekent wanneer het terugkeert, verwacht zowel CS en IP waarop de stapel (een gegeven alles wat via interrupt is aangeroepen).

De meest voorkomende gebruik was waarschijnlijk voor code die zou gaan om een ​​seriële poort te gebruiken - de BIOS / DOS seriële poort handler zou karakters verliezen bij hogere snelheden (iets over ongeveer 300 bps, oorspronkelijk) dus je moest een handler van je eigen te installeren . Wanneer een karakter kwam op de seriële poort, zou de seriële poort hardware een lijn die de processor onderbroken gelden. Op basis daarvan zou je interrupt handler routine worden ingeroepen. Uw code die nodig is om de gegevens te lezen vanuit de seriële poort in het geheugen (en doe een paar dingen zoals het opnieuw inschakelen van de interrupt) en rendement.

antwoordde op 10/09/2012 om 13:22
bron van user

stemmen
0

check out koppeling http://www.phanderson.com/printer/periodic_interrupt.html . De link bespreekt interrupts worden gebruikt met code voorbeelden - let wel een heel kort.

U kunt ook dit bericht te zien: Wat is het verschil tussen ver pointers en in de buurt van pointers? voor meer informatie over de verre trefwoord.

antwoordde op 10/09/2012 om 13:23
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more