Tôi có thể lập trình phần mềm gián đoạn trong C bằng cách nào? Tôi biết cần phải viết một thói quen phục vụ gián đoạn và sau đó ngắt CPU để các thói quen có thể được gọi, nhưng tôi không biết làm thế nào để làm điều đó trong C. Ngoài ra, tôi không biết làm thế nào để đăng ký thường xuyên với mô tả gián đoạn bàn. Tôi có một CPU x86-64 (AMD Turion64 X2) và tôi đang sử dụng trình biên dịch gcc. Mọi trợ giúp sẽ được đánh giá cao.Ngắt phần mềm
Trả lời
Sử dụng sigaction
. Xem man 2 sigaction
.
Để làm gián đoạn, hãy sử dụng raise
hoặc kill
.
Tôi không nghĩ rằng đây chính xác là những gì OP hỏi về .. –
Điều này không thực hiện được công việc, nó không làm gián đoạn thực sự. Trong trường hợp tôi không rõ ràng, tôi có nghĩa vụ phải ngắt CPU, chứ không phải ứng dụng. – protector
Hệ điều hành ẩn các ngắt thực sự khỏi ứng dụng. Theo tôi biết, điều đó là không thể, trừ khi bạn đang chạy trong lớp hạt nhân (vòng 0?)
Khái niệm ngắt không được bao gồm trong đặc điểm kỹ thuật C (và cũng phần nào là bộ xử lý cụ thể). Hầu hết các trình biên dịch, bao gồm GCC, cho phép bạn viết mã lắp ráp nội tuyến (hoặc bạn có thể liên kết khóa học một tệp được viết trong assembly cho chương trình của bạn). Nhưng vấn đề lớn là các hệ điều hành phổ biến (đặc biệt là các hệ điều hành chạy ở chế độ 64 bit) sẽ không cho phép bạn thay đổi bảng ngắt. Tôi đoán đặt cược tốt nhất của bạn là tìm một hệ điều hành nguồn mở đơn giản và cài đặt trình xử lý ngắt của bạn từ một chương trình bình thường (nếu hệ điều hành cho phép nó) hoặc thêm mã của bạn vào hạt nhân. Lý do tại sao bạn không thể chạy một đoạn mã nhỏ trong bộ mô phỏng bộ xử lý (hoặc máy ảo) là bộ vi xử lý cần khá nhiều thiết lập để vào chế độ 64 bit. Và các chi tiết chính xác về cách bạn thay đổi bảng ngắt phụ thuộc vào thiết lập đó.
viết ISR không phải là vấn đề Ngôn ngữ. Có, bạn có thể làm điều đó trong C.
Một vấn đề về sự hiểu biết về hạt nhân hệ điều hành của bạn, về các thói quen được gọi để đăng ký ISR của bạn trên một dòng ngắt nhất định với GIC hoặc bộ điều khiển ngắt khác và thực hiện một Entry trong bảng mô tả ngắt . Giống như với Linux trên ARM .. request_irq() của nó để đăng ký ISR với IRQ contoller và tạo một mục trong bảng IRQ_DESC.
Vì vậy, sẽ đề xuất khung ISR kiểm tra đầu tiên của hệ điều hành tương ứng của bạn.
- 1. Kiểm tra ngắt mạng trong phần mềm
- 2. Làm cách nào để đặt điểm ngắt phần mềm trên bộ xử lý ARM?
- 3. Phần mềm Screencast
- 4. mẫu tài liệu phần mềm
- 5. Website Thiết kế Phần mềm
- 6. Phát hiện phần mềm AdBlocking?
- 7. Tải phần mềm kiểm tra
- 8. Phần mềm và Bio-Mimicry
- 9. Viết Phần mềm tuyệt vời
- 10. Sự khác biệt giữa Phần mềm Tự do và Phần mềm Mã nguồn Mở
- 11. Phần mềm: Phần mềm nhận dạng bài hát như thế nào?
- 12. Dấu đơn trên cookie được xóa bởi phần mềm chống phần mềm gián điệp
- 13. Cài đặt phần mềm đạo đức - Ảnh hưởng đến các phần mềm khác
- 14. Phần mềm theo dõi lỗi phần mềm miễn phí tốt nhất cho Windows?
- 15. SIGTRAP mặc dù không có điểm ngắt được đặt; điểm ngắt phần cứng ẩn?
- 16. Tìm lỗ hổng trong phần mềm
- 17. C++ trong lập trình phần mềm nhúng
- 18. Phần mềm thiết kế mẫu video?
- 19. Phiên bản phần mềm tự động Qt?
- 20. Mẫu thiết kế phần mềm kế toán
- 21. Phần mềm cho Git trong doanh nghiệp?
- 22. Phần mềm trích xuất từ khóa
- 23. Các tiêu chuẩn phiên bản phần mềm
- 24. Phần mềm trung gian của Symfony2
- 25. Phần mềm Thư viện Synth cho Java
- 26. Chỉ số chất lượng phần mềm
- 27. Hiển thị phần mềm cho C#
- 28. Giải pháp thay thế phần mềm OpenGL
- 29. cách kiểm tra dự án phần mềm?
- 30. Phân phối phần mềm trên Linux?
Những điều bạn đang hỏi cách thực hiện là những việc bạn làm khi viết hệ điều hành chứ không phải ứng dụng. Bạn có thể giải thích thêm một chút về những gì bạn đang cố gắng để thực hiện? –
Thực ra, tôi đang làm bài tập cho giáo viên của mình, tôi cần kiểm tra hướng dẫn IRET, đó là lý do tại sao tôi cần một thói quen phục vụ gián đoạn. Sau khi tôi đã viết nó, tôi có nghĩa vụ phải "chơi" với mã hex của tập tin thực thi và thay đổi IRET (xóa nó hoặc một cái gì đó) để xem những gì sẽ xảy ra. – protector
Bạn không thể viết ISR trong C, nó yêu cầu (một số) lắp ráp. Bạn không thể kiểm tra ISR trên hệ điều hành chế độ được bảo vệ. Thay đổi IRET sẽ chỉ làm hỏng mã. Nói chuyện với nhà giáo dục của bạn về bài tập này. –