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
Odpowiedz
Użyj . Zobacz man 2 sigaction
. Aby uzyskać przerwanie, użyj raise
lub kill
.
Nie sądzę, że to jest dokładnie to, o co OP pyta ... –
To nie działa, nie powoduje prawdziwego przerwania. W przypadku, gdy byłbym niejasny, mam przerwać procesor, a nie aplikację. – protector
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?)
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.
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.
- 1. Przerwanie sprzętowe synchronicznego zbierania danych
- 2. Przerwanie wątku spania
- 3. Przerwanie wątku w DatagramSocket.receive
- 4. Przerwanie magazynowe (Linux/General)
- 5. AutoHotKey przerwanie naciśnięcia klawisza
- 6. Ruby - ukrywania "^ C" Przerwanie
- 7. HTML.fromHtml Linia Przerwanie znika
- 8. Przerwanie przesyłania AWS S3
- 9. Wyczyść przerwanie metody BeginGetContext HttpListenera
- 10. Wdrażanie aktualizacji oprogramowania w wersji Beta i oprogramowania Sparkle
- 11. Jak działa aktywacja oprogramowania?
- 12. Tryb renderowania oprogramowania - WPF
- 13. Opcje rozwoju oprogramowania komputerowego
- 14. Qt auto wersja oprogramowania?
- 15. Wykrywanie szkodliwego oprogramowania sygnatur
- 16. Książki dotyczące architektury oprogramowania
- 17. Standardy bezpieczeństwa oprogramowania
- 18. Wsparcie starszego oprogramowania enquire.js
- 19. Symulacja oprogramowania komputera kwantowego
- 20. Wykrywanie oprogramowania AdBlocking?
- 21. Przerwanie pętli for z bloku przechwytywania
- 22. Przerwanie dwóch pthreadów blokujących według sygnałów
- 23. W jaki sposób KVM obsługuje przerwanie fizyczne?
- 24. Android Studio 0.8.2: Usuń pionowe przerwanie linii
- 25. Maksymalny poziom zagnieżdżenia funkcji "100" osiągnięty, przerwanie
- 26. overflow-x: ukryty zrywa przerwanie jquery scroll
- 27. D3.js: Przerwanie przejść jest przerywane?
- 28. Gdzie dodać przerwanie w sieci neuronowej?
- 29. Co to jest "przerwanie suwaka" na Androidzie
- 30. jak złapać przerwanie karty sieciowej (góra/dół)?
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ąć? –
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
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. –