*

Note này bên trong series tập đúng theo những khái niệm lộ diện Khi bắt đầu làm cho quen thuộc với lập trình khối hệ thống nhúng, các định nghĩa này có thể xuất phát từ thương hiệu sản phẩm, thương hiệu hiện tượng lạ hoặc một kĩ thuật nào đó, ….

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

Khái niệm trước tiên mà lại tôi muốn liệt kê là interrupt. 

Interrupt rất có thể hiểu là 1 trong những biểu thị (biểu đạt vật dụng lý hoặc tín hiệu 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, đại diện cho 1 sự kiện rất cần được cập nhật tức thì chớp nhoáng.

Tín hiệu vật lý có thể gọi là tín hiệu tạo ra tự những mối cung cấp đồ lý (vi điều khiển và tinh chỉnh, nút ít dấn, công tắc nguồn, …….), hoàn toàn có thể đo – đếm được.

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

Hardware interrupt: nằm trong hình dạng asynch. Hành cồn init hardware interrupt nói một cách khác là IRQ. Số lượng hardware interrupt bị giới hạn bởi vì số đường IRQ của processor.

Software interrupt: nằm trong hình dáng synch, gây ra bởi exceptional condition vào nội trên processor (trường thích hợp này rất có thể Call là exception hoặc trap), hoặc gây nên vị một instruction đặc biệt trong instruction phối. Số lượng software interrupt có vẻ nhỏng không bị giới hạn

Interrupt giống như với signal, biệt lập nhất thân chúng là:

signal được sử dụng mang đến IPC, bao gồm trung gian là kernel (mediated by the kernel) với được xử lí bởi vì processes (handled by process),

interrupt thì gồm trung gian là processor (mediated by processor) và cách xử lý bởi vì kernel.

Kernel rất có thể pass một interrupt bên dưới dạng một signal tới process gây nên nó.

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

cũng có thể phân loại interrupt theo 5 nhánh sau:

Maskable Interrupt – IRQ: hardware interrupt có thể bỏ qua nhờ 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 kèm theo. NXiaoMI rất có thể là các interrupt quan yếu bỏ lỡ hay những interrupt của các task bao gồm độ ưu tiên tối đa (liên quan tới timers và watchdog timer…)

Inter-processor Interrupt IPI: một case đặc biệt quan trọng của interrupt, IPI được tạo thành vì một processor để interrupt processor không giống (trong khối hệ thống các processor)

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

Spurious interrupt: hardware interrupt không mong muốn. hay được tạo ra bởi vì system condition.

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

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

Tkhô hanh ghi PC được lưu lại

Tất cả lệnh nằm trước địa chỉ bây chừ của PC được thực hiện trả chỉnh

Các lệnh cơ mà PC không trỏ qua thì không tiến hành.

Trạng thái triển khai những lệnh nhưng PC vẫn trỏ qua được giữ lại

imprecise interrupt là một số loại interrupt khi xảy ra ko đảm bảo 4 đặc điểm bên trên mang lại hệ thống.

Ta vẫn còn đấy một phương pháp không giống nhằm phân loại interrupt nhỏng sau:

Level- triggered – ngắt theo mức: Là một interrupt báo cáo việc lộ diện của nó vì Việc bảo trì interrupt line ở mức xúc tích và ngắn gọn cao hoặc rẻ. Một trang bị mong bắn ra level-triggered interrupt đã gia hạn IRQ line của nó ở mức ACTIVE (có thể là high hoặc low tùy khái niệm của nsx), với duy trì level đó cho tới Lúc ISR hoàn toàn. Level-triggered interrupt line hoàn toàn có thể đựa chia sẽ giữa các lắp thêm. Line này cần có pull-up hoặc pull-down resistor nhằm line này auto về giá trị mang định Lúc không tồn tại interrupt xẩy ra. Điểm tinh giảm của loại interrupt này là interrupt của những lắp thêm tất cả nút ưu tiên cao có thể “che mất” interrupt của các thiết bị có mức ưu tiên rẻ hơn….

Edge-triggered – ngắt sườn: Là một đẳng cấp interrupt xẩy ra khi bao gồm sự đổi khác của interrupt line (đi tự cao-thấp hoặc thấp – cao), hay nói cách khác là lúc interrupt signal gồm sự đổi khác quý giá (tăng hoặc giảm). Các sản phẩm có thể chia sẻ 1 edge-triggered interrupt line.

Hybrid Interrupt – thứ hạng lai: Một số khối hệ thống thực hiện phối kết hợp cả 2 một số loại ngắt vừa nêu ở trên. Kiểu lai này hay vận dụng với NXiaoMi MI input (non-maskable interrupt).

Xem thêm: Spi Là Gì - Chuẩn Giao Tiếp Spi

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

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

Độ ưu tiên thân những interrupts – interrupt priorities

Do interrupt là asynch event (hardware interrupt) đề nghị processor phải khái niệm ra những cường độ ưu tiên cho những interrupt nhằm cách xử trí trường hợp nhiều interrupt xẩy ra bên cạnh đó. Các mức độ ưu tiên này được ghi vào doc của processor.

Trong trường thích hợp interrupt có độ ưu tiên rẻ đang rất được xử trí thì xảy ra interrupt tất cả ưu tiên cao hơn nữa thì interrupt ưu tiên phải chăng sẽ bị tạm dừng xử lí… hành vi này call là interrupt nesting,

Cần chăm chú form size của staông chồng Lúc nesting interrupt, Mỗi ISR của interrupt được nest nên giữ quý giá các tkhô giòn ghi của nó vào stack, câu hỏi này hoàn toàn có thể dẫn tới stackoverflow nếu như không điều hành và kiểm soát đúng chuẩn form size staông xã.

Interrupt priorities được set vị phần cứng, phần mềm hoặc cả hai.

Ta bắt buộc thao tác làm việc cùng với global interrupt flags bằng ngôn ngữ C, cố vào kia, bắt buộc sử dụng asembly.

Interrupt Mapping

lúc một interrupt xảy ra cùng không bị khước từ xử lý thì processor đang khiêu vũ cho ISR – tập hòa hợp những đoạn code được lập trình sẵn từ trước để giải pháp xử lý interrupt khớp ứng. Để đảm bảo được ISR khớp ứng với interrupt vừa xẩy ra, cần có một phương pháp mapping giữa ISR với interrupt source.

Cơ chế mapping này trường thọ bên dưới dạng interrupt vector table. Nó là một mảng các con trỏ hàm (pointer to function, Processor vẫn sử dụng một con số được gán cho từng interrupt làm index để coi ngó mảng này. Và quý giá trên 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 lập ISR mang đến toàn bộ interrupt là quan trọng, kể cả cùng với rất nhiều interrupts chưa được áp dụng vào hệ thống (tách tình trạng khối hệ thống going off inkhổng lồ the weeds – mất kiểm soát). Nếu cảm thấy bài toán thiết đặt ISR mang đến từng interrupt không áp dụng là một trong những vấn đề tốn thời hạn, tầm thường sta hoàn toàn có thể cài đặt một ISR tầm thường cho các interrupt không thực hiện.

ISR – Interrupt Service Routine

Mục đích của họ là ko nhằm interrupt ảnh hưởng cho tới quy trình processor triển khai lịch trình hiện nay phải họ buộc phải viết ISR càng ngắn gọn gàng càng giỏi. Nếu yêu cầu thêm một vài 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 đó, hãy thao tác làm việc này nghỉ ngơi bên cạnh ISR bởi một hàm khác…. Hàm này được điện thoại tư vấn là DSR – deffered service routine.

Thông thường ISR không sở hữu và nhận tmê mẩn số truyền vào cùng không có quý hiếm trả về. Một ISR căn bạn dạng đang tiến hành số đông công việc sau:

Saving processor context

Acknowleding the interrupt

Restoring processor context

Một tư tưởng kèm theo cùng với interrupt là interrupt latency – đấy là thông số kỹ thuật đo khoảng tầm thời gian từ khi interrupt xẩy ra cho đén lúc processor bước đầu triển khai ISR khớp ứng.

Shared data và race conditions

Việc chia sẻ dữ liệu (nội dung data) giữa ISR và main program là 1 vụ việc lúc kiến thiết embedded software gồm sử dụng interrupt.

Race condition là một trong những trường hợp xảy ra lúc công dụng biến đổi dựa trên thiết bị từ bỏ tiến hành những lệnh vào main code cùng ISR. Cần tách tình huống này.

Race condition được xem là hết sức khó khăn phát hiện vì interrupt là asynch event cùng race condition thì chưa phải dịp nào cũng xuất hiện….

Khái niệm race condition kéo theo định nghĩa critical section. Critical section là 1 trong những đoạn chương trình bắt buộc được tiến hành thường xuyên từ trên đầu cho cuối, không được phnghiền xảy ra interrupt trọng tâm (Trong ngữ điệu C hoàn toàn có thể chỉ là 1 trong những mẫu lệnh nhưng mà trên thực tế, buộc phải tới 4-5 dòng lệnh asm tương tự…).

Giải pháp mang lại race condition đó là disable interrupt trước lúc bước vào xúc tiến critical section với enable interrupt khi đang thực thi ngừng critical section dồng thời hạn chế tối đa phần lượng với độ dài của critical section.

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *