2010-08-14 15 views
5

Jak mogę zaprogramować przerwanie oprogramowania w C? Wiem, że trzeba napisać procedurę obsługi przerwań, a następnie przerwać procesor, aby można było wywołać procedurę, ale nie wiem, jak to zrobić w C. Ponadto, nie wiem, jak zarejestrować tę procedurę z deskryptorem przerwań stół. Mam procesor x86-64 (AMD Turion64 X2) i używam kompilatora gcc. Każda pomoc będzie doceniona.Przerwanie oprogramowania

+1

Rzeczy, o które pytasz, to rzeczy, które robisz, pisząc system operacyjny, a nie aplikację. Czy możesz wyjaśnić nieco więcej o tym, co próbujesz osiągnąć? –

+0

Właściwie pracuję nad zadaniem dla mojej kadry, muszę przeanalizować instrukcję IRET, dlatego potrzebuję procedury obsługi przerwań. Po napisaniu go mam "zagrać" za pomocą kodu szesnastkowego pliku wykonywalnego i zmienić IRET (usunąć lub coś podobnego), aby zobaczyć, co się stanie. – protector

+3

Nie można pisać ISR w języku C, wymaga to (niektórych) złożenia. Nie można testować ISR w systemie operacyjnym chronionym. Zmiana IRET spowoduje awarię kodu. Porozmawiaj z pedagogiem o tym zadaniu. –

Odpowiedz

-1

Użyj . Zobacz man 2 sigaction. Aby uzyskać przerwanie, użyj raise lub kill.

+2

Nie sądzę, że to jest dokładnie to, o co OP pyta ... –

+0

To nie działa, nie powoduje prawdziwego przerwania. W przypadku, gdy byłbym niejasny, mam przerwać procesor, a nie aplikację. – protector

1

System operacyjny ukrywa prawdziwe przerwań od aplikacji. O ile mi wiadomo, nie jest to możliwe, chyba że używasz warstwy jądra (ring 0?)

3

Koncepcja przerwań nie jest zawarta w specyfikacji C (i jest również nieco zależna od procesora). Większość kompilatorów, w tym GCC, pozwala pisać wbudowany kod zespołu (lub oczywiście można połączyć plik napisany w zespole z programem). Ale dużym problemem jest to, że popularne systemy operacyjne (szczególnie te działające w trybie 64-bitowym) nie pozwolą ci zmienić tabeli przerwań. Domyślam się, że najlepiej jest poszukać prostego systemu operacyjnego open source i zainstalować program obsługi przerwań od normalnego programu (jeśli system operacyjny na to pozwala) lub dodać kod do jądra. Powodem, dla którego nie można po prostu uruchomić małego kawałka kodu w symulatorze procesora (lub maszynie wirtualnej) jest to, że procesor potrzebuje sporo konfiguracji, aby przejść do trybu 64-bitowego. Dokładne szczegóły dotyczące zmiany tabeli przerwań zależą od tej konfiguracji.

0

pisanie ISR nie jest kwestią języka. tak, możesz to zrobić w C.

To jest kwestia zrozumienia twojego jądra systemu operacyjnego, o procedurach, które są wywoływane, aby zarejestrować twój ISR na pewnej linii przerwań z GIC lub innymi kontrolerami przerwań i zrobić wpis w tabeli deskryptorów przerwań . Podobnie jak w Linuksie na ARM .. Jego request_irq(), aby zarejestrować ISR z konterem IRQ i zrobić wpis w tabeli IRQ_DESC.

Zasugeruj więc, aby najpierw sprawdzić ramy ISR danego systemu operacyjnego.

Powiązane problemy