mọi người đều biết rằng trình xử lý ngắt phải ngắn nhất có thể. và thêm các chức năng như printk
để gỡ lỗi bên trong trình xử lý ngắt là điều không nên thực hiện. Trên thực tế, tôi đã thử nó trước khi tôi gỡ lỗi hạt nhân Linux cho một thiết bị gián đoạn điều khiển char tôi viết, và nó phá hỏng thời gian của người lái xe.printk bên trong một handler ngắt, là nó thực sự là xấu?
Câu hỏi tôi có, là lý do tại sao điều này xảy ra? Chức năng printk
được lưu vào bộ đệm! nó có nghĩa là, theo như tôi hiểu rằng dữ liệu được chèn vào trong một hàng đợi, và nó đang được xử lý sau, có lẽ nhất là sau khi trình xử lý ngắt được kết thúc.
Vậy tại sao nó không hoạt động?
Xem xét khả năng cuộc gọi in của bạn vừa lấp đầy bộ đệm, buộc nó phải tuôn ra. Điều gì sẽ xảy ra khi thực hiện I/O trong trình xử lý ngắt của bạn? –
CÓ, nó thực sự là xấu. Cảm ơn và chúc ngủ ngon. –
Nó * hoạt động *. 'printk' được thiết kế để gọi từ ngữ cảnh ngắt hoặc quá trình. Nếu không, nó sẽ không được sử dụng nhiều để gỡ lỗi. Bạn rõ ràng là không gọi nó trong bối cảnh gián đoạn trong một trình điều khiển sản xuất, mặc dù. – EML