Interrupt là gì

*

cảnh báo này bên trong series tập vừa lòng những định nghĩa lộ diện khi bắt đầu làm cho quen với thiết kế hệ thống nhúng, những có mang này hoàn toàn có thể xuất phát điểm từ tên sản phẩm, tên hiện tượng hoặc một kinh nghiệm như thế nào kia, ….

Bạn đang xem: Interrupt là gì

Khái niệm đầu tiên mà lại tôi ước ao liệt kê là interrupt. 

Interrupt hoàn toàn có thể đọc là một bộc lộ (biểu thị vật lý hoặc bộc lộ logic) phun tới processor. Tín hiệu này tạo ra vày phần cứng hoặc phần mềm, thay mặt đại diện cho một event rất cần phải up date ngay mau lẹ.

Tín hiệu trang bị lý rất có thể đọc là bộc lộ tạo ra từ bỏ những nguồn đồ lý (vi tinh chỉnh, nút thừa nhận, công tắc nguồn, …….), rất có thể đo – đếm được.

Tín hiệu xúc tích rất có thể gọi là những lệnh, các lời call hàm….

Hardware interrupt: nằm trong giao diện asynch. Hành đụng init hardware interrupt còn được gọi là IRQ. Số lượng hardware interrupt bị số lượng giới hạn bởi vì số mặt đường IRQ của processor.

Software interrupt: nằm trong phong cách synch, gây ra do exceptional condition trong nội trên processor (trường hòa hợp này rất có thể hotline là exception hoặc trap), hoặc gây nên vì chưng một instruction quan trọng đặc biệt trong instruction set. Số lượng software interrupt dường như như không trở nên giới hạn

Interrupt tương tự như cùng với signal, biệt lập duy nhất thân chúng là:

signal được thực hiện đến IPC, bao gồm trung gian là kernel (mediated by the kernel) cùng được up load bởi processes (handled by process),

interrupt thì tất cả trung gian là processor (mediated by processor) với xử lý vày kernel.

Kernel rất có thể pass một interrupt dưới dạng một signal cho tới process tạo ra nó.

Interrupt là một trong những kỹ năng phổ cập vận dụng vào computer multitasking, đặc biệt là RTC. Cụ thể, hardware interrupt giúp nâng cấp hiệu năng vị nó góp Hartware chưa phải wait trong một vòng lặp rất nhiều của phương thức polling. Tức là trong khi “chờ đợi” interrupt xảy ra, khối hệ thống vẫn có thể làm cho những câu hỏi không giống, giả dụ tất cả interrupt, hệ thống bắt đầu tạm ngưng công việc hiện tại nhằm chuyển qua xử lý interrupt thông qua 1 Interrupt Handler hoặc Interrupt Service Routine (ISR)

Có thể phân một số loại interrupt theo 5 nhánh sau:

Maskable Interrupt – IRQ: hardware interrupt có thể bỏ qua dựa vào cấu hình một bit vào IMR – interrupt mask register.

Non-maskable Interrupt – NMI: hardware interrupt không tồn tại Bit-mask đi kèm theo. NXiaoMi MI hoàn toàn có thể là các interrupt chẳng thể làm lơ hoặc là interrupt của các task tất cả độ ưu tiên tối đa (tương quan tới timers cùng watchdog timer…)

Inter-processor Interrupt IPI: một case đặc biệt của interrupt, IPI được tạo thành bởi một processor để interrupt processor khác (trong khối hệ thống những processor)

Software interrupt: interrupt do processor tạo thành Khi thực hiện một lệnh. Software interrupt hay dùng làm implement system calls vì nó thường xuyên kéo theo một subroutine calls với việc thay đổi vào CPU ring level.

Spurious interrupt: hardware interrupt không hề muốn. thường xuyên được tạo thành bởi system condition.

Cũng rất có thể phân các loại interrupt theo 2 mẫu mã nhỏng sau (phụ thuộc vào tác ứ đọng của nó lên tâm lý của khối hệ thống thời gian xẩy ra interrupt):

precise interrupt: là loại interrupt Khi xẩy ra thì bảo đảm an toàn 4 đặc thù sau mang đến hệ thống:

Tkhô nóng ghi PC được giữ lại

Tất cả lệnh ở trước vị trí bây giờ của PC được tiến hành trả chỉnh

Các lệnh mà PC không trỏ qua thì không thực hiện.

Trạng thái thực thi các lệnh nhưng PC vẫn trỏ qua được lưu giữ lại

imprecise interrupt là loại interrupt Khi xảy ra không bảo vệ 4 tính chất bên trên mang đến hệ thống.

Ta vẫn tồn tại một biện pháp khác để phân các loại interrupt nlỗi sau:

Level- triggered – ngắt theo mức: Là một interrupt báo cáo việc xuất hiện thêm của nó vì chưng Việc gia hạn interrupt line ở tầm mức xúc tích và ngắn gọn cao hoặc tốt. Một sản phẩm công nghệ hy vọng phun ra level-triggered interrupt vẫn gia hạn IRQ line của chính nó tại mức ACTIVE (rất có thể là high hoặc low tùy khái niệm của nsx), và bảo trì level đó cho đến Khi ISR hoàn chỉnh. Level-triggered interrupt line rất có thể đựa phân chia sẽ giữa những sản phẩm. Line này cần phải có pull-up hoặc pull-down resistor để line này tự động về quý giá mang định lúc không có interrupt xẩy ra. Điểm hạn chế của hình dạng interrupt này là interrupt của những thứ gồm nút ưu tiên cao có thể “đậy mất” interrupt của các lắp thêm có nấc ưu tiên rẻ hơn….

Edge-triggered – ngắt sườn: Là một vẻ bên ngoài interrupt xảy ra Khi gồm sự đổi khác của interrupt line (đi từ cao-phải chăng hoặc tốt – cao), xuất xắc nói cách khác là khi interrupt signal bao gồm sự biến đổi quý giá (tăng hoặc giảm). Các thứ rất có thể share 1 edge-triggered interrupt line.

Hybrid Interrupt – đẳng cấp lai: Một số khối hệ thống thực hiện phối hợp cả 2 một số loại ngắt vừa nêu sinh hoạt bên trên. Kiểu lai này thường áp dụng cùng với NXiaoMi MI đầu vào (non-maskable interrupt).

Xem thêm: Hướng Dẫn Cài Đặt Autocad 2014 Bản Full Active + Hướng Dẫn Cài Đặt

Message – signaled – interrupt dựa trên message: Interrupt dạng hình này không thực hiện hardware interrupt line nlỗi những interrupt vừa liệt kê. Ttuyệt vào đó, nó gửi một message trên một kênh liên lạc bình thường (thường là bus của hệ thống) nhằm request for service. Mesage-signaled có tương đối nhiều đường nét tương đồng cùng với edge-triggered interrupt,.

Doorbell: Khái niệm này dùng để biểu hiện một hiệ tượng Lúc nhưng mà ứng dụng hoàn toàn có thể “thông báo” cùng với phần cứng rằng “còn một vài Việc đề nghị trả thành”. Thông thường phần mềm sẽ đựat dữ liệu vào trong 1 vùng ghi nhớ đã làm được “thống nhất” cùng “rung chuông báo hiệu” bằng phương pháp ghi vào vùng ghi nhớ không giống cùng với vùng lưu giữ đã có thống độc nhất vô nhị. Vùng ghi nhớ khác này còn được gọi là doorbell region. Có các doorbell Ship hàng các mục đích không giống nhau

Độ ưu tiên giữa những interrupts – interrupt priorities

Do interrupt là asynch event (hardware interrupt) phải processor bắt buộc định nghĩa ra các cường độ ưu tiên cho những interrupt để cách xử lý trường hợp những interrupt xảy ra bên cạnh đó. Các cường độ ưu tiên này được ghi vào doc của processor.

Trong ngôi trường hợp interrupt có độ ưu tiên phải chăng đang được giải pháp xử lý thì xảy ra interrupt có ưu tiên cao hơn thế thì interrupt ưu tiên rẻ sẽ bị tạm ngưng xử lí… hành động này Gọi là interrupt nesting,

Cần để ý size của stack lúc nesting interrupt, Mỗi ISR của interrupt được nest đề nghị lưu quý hiếm những tkhô giòn ghi của chính nó vào stack, việc này có thể mang tới stackoverflow nếu như không điều hành và kiểm soát chính xác size staông xã.

Interrupt priorities được set vày Hartware, ứng dụng hoặc cả hai.

Ta chẳng thể thao tác làm việc cùng với global interrupt flags bằng ngôn từ C, ráng vào kia, phải cần sử dụng asembly.

Interrupt Mapping

lúc một interrupt xẩy ra cùng không trở nên không đồng ý cách xử lý thì processor sẽ nhảy đầm cho ISR – tập thích hợp các đoạn code được lập trình trường đoản cú trước nhằm cách xử lý interrupt khớp ứng. Để đảm bảo được ISR tương ứng với interrupt vừa xảy ra, cần có một chế độ mapping thân ISR cùng interrupt source.

Cơ chế mapping này lâu dài dưới dạng interrupt vector table. Nó là một trong mảng các con trỏ hàm (pointer khổng lồ function, Processor sẽ thực hiện một số lượng được gán mang đến từng interrupt làm index để chăm nom mảng này. Và cực hiếm tại index khớp ứng đang là con trỏ hàm trỏ cho tới ISR cần phải triển khai.

Việc thiết đặt ISR mang đến tất cả interrupt là cần thiết, của cả với mọi interrupts chưa được áp dụng trong khối hệ thống (rời triệu chứng hệ thống going off inlớn the weeds – mất kiểm soát). Nếu cảm giác việc cài đặt ISR cho từng interrupt không áp dụng là một vấn đề tốn thời hạn, bình thường sta hoàn toàn có thể setup một ISR tầm thường cho những interrupt không thực hiện.

ISR – Interrupt Service Routine

Mục đích của chúng ta là không để interrupt ảnh hưởng tới quá trình processor xúc tiến chương trình ngày nay bắt buộc bọn họ bắt buộc viết ISR càng ngắn gọn càng giỏi. Nếu yêu cầu thêm một trong những thao tác làm việc giải pháp xử lý đối với một interrupt cụ thể như thế nào kia, hãy thao tác này ở kế bên ISR bằng một hàm khác…. Hàm này được hotline là DSR – deffered service routine.

Thường thì ISR không sở hữu và nhận tđắm say số truyền vào và không tồn tại quý hiếm trả về. Một ISR cnạp năng lượng bạn dạng vẫn thực hiện đầy đủ công việc sau:

Saving processor context

Acknowleding the interrupt

Restoring processor context

Một có mang kèm theo cùng với interrupt là interrupt latency – đó là thông số kỹ thuật đo khoảng chừng thời hạn trường đoản cú Khi interrupt xẩy ra mang đến đén lúc processor bắt đầu triển khai ISR tương xứng.

Shared data & race conditions

Việc share tài liệu (tóm tắt data) thân ISR và main program là 1 trong vụ việc Lúc thiết kế embedded software có thực hiện interrupt.

Race condition là 1 trường hợp xẩy ra Khi kết quả đổi khác dựa trên vật dụng trường đoản cú tiến hành các lệnh trong main code và ISR. Cần tránh tình huống này.

Race condition được xem như là hết sức khó khăn phạt hiện vì interrupt là asynch event và race condition thì không hẳn dịp nào thì cũng xuất hiện….

Khái niệm race condition kéo theo có mang critical section. Critical section là 1 trong đoạn công tác bắt buộc được thực hiện tiếp tục từ trên đầu mang đến cuối, không được phxay xẩy ra interrupt ở giữa (Trong ngôn ngữ C có thể chỉ là 1 trong những mẫu lệnh mà lại trên thực tế, đề xuất cho tới 4-5 loại lệnh asm tương tự…).

Giải pháp mang lại race condition đó là disable interrupt trước khi lấn sân vào tiến hành critical section và enable interrupt lúc đang xúc tiến xong critical section dồng thời tinh giảm về tối phần lớn lượng với độ dài của critical section.