2010-08-14 38 views
5

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

+1

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? –

+0

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

+3

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. –

Trả lời

-1

Sử dụng sigaction. Xem man 2 sigaction.

Để làm gián đoạn, hãy sử dụng raise hoặc kill.

+2

Tôi không nghĩ rằng đây chính xác là những gì OP hỏi về .. –

+0

Đ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

1

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?)

3

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 đó.

0

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.

Các vấn đề liên quan