Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Interrupt Service Routine

capt.501
6 antwoorden
  • Ey,

    Hoe kan ik een Interrupt Service Routine (ISR) gebruiken onder Win2k? Ik heb al veel sites afgezocht via google, maar kan nergens een site vinden die mij praktische dingen verteld. Iedereen verteld hoe PIC's werken en wat er gebeurt als er een interrupt gegeven wordt aan de CPU, maar niet hoe ik een ISR kan 'bekend maken' aan het systeem.

    Nu heb ik wel iets gevonden op msdn over de functie IoConnectInterrupt, maar hier wordt ik ook niet echt veel wijzer uit.

    Heeft iemand meer info voor mij?

    MVGR,

    René

    P.S.: Als iemand (ook) informatie heeft over ISR's onder linux is dit ook welkom.
  • In het algemeen:
    * sla oude interrupt vector op
    * voeg jouw functie in
    * bij afsluiten programma de oude interrupt vector terug zetten

    Helaas geeft je niet aan welke programmeer taal, maar 'google search op interrupt C program' vond onder andere http://www.learn-c.
    Even zoeken op interrupt en je vind wat info over programmeren.


    [code:1:ac3c10e5ea]
    // voorbeeld van bovengenoemde site
    // http://www.learn-c.com/experiment6.htm.

    // timer6h.c

    #include <dos.h>
    #include <stdio.h>
    #include <bios.h>
    #include "extern6h.h"

    long get_timer_counter(void);
    void set_up_new_timer(void);
    void wait(double seconds);
    void restore_old_timer(void);
    double get_frequency(void);

    void interrupt new_timer(), interrupt (far *old_timer)();

    unsigned long timer_counter;

    // save the old vector, set up new vector, zero out counter
    void set_up_new_timer(void)
    {
    disable(); // turn off interrupts

    old_timer = getvect(0x1c);

    setvect(0x1c, new_timer);

    timer_counter = 0L;

    enable(); // turn interrupts back on
    }

    // restore former table entry and rate
    void restore_old_timer()
    {
    disable();

    setvect(0x1c, old_timer);

    enable();
    }

    // return the value of the counter to the caller
    long get_timer_counter(void)
    {
    return timer_counter;
    }

    // the interrupt handler
    interrupt new_timer()
    {
    disable();

    timer_counter++;

    enable();
    }

    // end timer6h.c
    [/code:1:ac3c10e5ea]
    Of het onder W2K allemaal is toegestaan, durf ik zo niet te zeggen. Voor Linux kun je vanuit http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html verder zoeken.
  • Interrupts afvangen in Windows 2000? Vergeet dat maar want daar heb je in principe geen rechten toe. Alleen diep in de kernel kun je dit voor elkaar krijgen. Maar goed, als je een device driver maakt, dan kan het in principe wel…

    Een betere plek om te zoeken is Google. http://www.google.com/search?sourceid=navclient&ie=UTF-8&oe=UTF-8&q=IoConnectInterrupt zal al enige interessante sites opleveren zoals http://www.beyondlogic.org/interrupts/winnt_isr_dpc.htm maar ook http://www.osr.com/ddk/kmarch/k104_7h9u.htm maar wat ook interessant kan zijn is om op http://www.osr.com/ddk/ de documentatie van de DDK na te lezen.
  • [quote:045ae346f3="shoekie"]
    Hoe kan ik een Interrupt Service Routine (ISR) gebruiken onder Win2k? Ik heb al veel sites afgezocht via google, maar kan nergens een site vinden die mij praktische dingen verteld. Iedereen verteld hoe PIC's werken en wat er gebeurt als er een interrupt gegeven wordt aan de CPU, maar niet hoe ik een ISR kan 'bekend maken' aan het systeem.[/quote:045ae346f3]
    Wat is je uiteindelijke doel?
    [quote:045ae346f3="shoekie"]Heeft iemand meer info voor mij?[/quote:045ae346f3]
    How To Ask Questions The Smart Way
  • [quote:4299c5914a="h4xX0r"]Wat is je uiteindelijke doel?[/quote:4299c5914a]
    Infrarood ontvanger gebruiken. Parallele poort pollen duurt te lang, omdat het signaal ongeveer 8 mili sec duurt (gemeten met osciloscoop). Dit signaal bestaat dan een x aantal pulsen (ongeveer 10) die de status van de acknoledge bit van hoog naar laag brengt. Met pollen kan ik niet naukeurig genoeg de signaal opvangen.

    [quote:4299c5914a="h4cC0r"]How To Ask Questions The Smart Way[/quote:4299c5914a]
    Dat sloeg dus op de functie IoConnectInterrupt. Daar wou ik wat meer info over mbt de arguments, hoe te gebruiken e.d.
  • [quote:9a2458ff6a="H4xX0r"]Wat is je uiteindelijke doel?[/quote:9a2458ff6a]
    [quote:9a2458ff6a="shoekie"]Infrarood ontvanger gebruiken. Parallele poort pollen duurt te lang, omdat het signaal ongeveer 8 mili sec duurt (gemeten met osciloscoop). Dit signaal bestaat dan een x aantal pulsen (ongeveer 10) die de status van de acknoledge bit van hoog naar laag brengt. Met pollen kan ik niet naukeurig genoeg de signaal opvangen.[/quote:9a2458ff6a]
    Wellicht heb je wat aan de win32 API WinCommEvent

    [size=9:9a2458ff6a]Oeps: bestaand bericht per ongeluk gewijzigd.[/size:9a2458ff6a]

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.