*

Note này phía trong series tập vừa lòng những định nghĩa mở ra khi mới làm thân quen với thiết kế khối hệ thống nhúng, các có mang này có thể khởi đầu từ tên sản phẩm công nghệ, thương hiệu hiện tượng lạ hoặc một kĩ thuật làm sao kia, ….

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

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

Interrupt rất có thể hiểu là một trong những bộc lộ (bộc lộ thứ lý hoặc dấu hiệu logic) phun cho tới processor. Tín hiệu này gây nên bởi Hartware hoặc phần mềm, thay mặt cho 1 sự kiện rất cần phải xử lý tức thì mau chóng.

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

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

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

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

Interrupt tựa như cùng với signal, khác biệt độc nhất thân chúng là:

signal được thực hiện mang đến IPC, tất cả trung gian là kernel (mediated by the kernel) và được xử lí vì processes (handled by process),

interrupt thì tất cả trung gian là processor (mediated by processor) và xử trí vì kernel.

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

Interrupt là 1 trong kinh nghiệm phổ biến áp dụng vào computer multitasking, đặc biệt là RTC. Cụ thể, hardware interrupt góp nâng cấp hiệu năng vì chưng nó giú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 pháp polling. Tức là trong khi “hóng đợi” interrupt xảy ra, khối hệ thống vẫn có thể có tác dụng các việc không giống, ví như bao gồm interrupt, hệ thống new tạm dừng quá trình hiện nay nhằm chuyển hẳn qua xử trí interrupt thông sang một Interrupt Handler hoặc Interrupt Service Routine (ISR)

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

Maskable Interrupt – IRQ: hardware interrupt rất có thể bỏ qua nhờ vào thông số kỹ thuật một bit vào IMR – interrupt mask register.

Non-maskable Interrupt – NMI: hardware interrupt không có Bit-mask kèm theo. NXiaoMi MI có thể là những interrupt cần yếu bỏ lỡ hay là interrupt của các task có độ ưu tiên cao nhất (liên quan cho tới timers với watchdog timer…)

Inter-processor Interrupt IPI: một case đặc biệt của interrupt, IPI được tạo thành do một processor nhằm interrupt processor khác (trong khối hệ thống nhiều processor)

Software interrupt: interrupt bởi vì processor tạo thành khi xúc tiến một lệnh. Software interrupt thường xuyên dùng để làm implement system calls do nó hay kéo theo một subroutine calls với sự biến hóa vào CPU ring màn chơi.

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

Cũng hoàn toàn có thể phân một số loại interrupt theo 2 mẫu mã nhỏng sau (phụ thuộc vào tác ứ của chính nó lên trạng thái của hệ thống thời gian xảy ra interrupt):

precise interrupt: là nhiều loại interrupt lúc xảy ra thì bảo đảm 4 đặc điểm sau cho hệ thống:

Thanh khô ghi PC được lưu lại

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

Các lệnh nhưng mà PC không trỏ qua thì chưa triển khai.

Trạng thái tiến hành những lệnh mà PC đã trỏ qua được lưu giữ lại

imprecise interrupt là nhiều loại interrupt Lúc xảy ra không đảm bảo 4 đặc điểm trên mang đến khối hệ thống.

Ta vẫn còn đó một cách không giống nhằm phân các loại interrupt nhỏng sau:

Level- triggered – ngắt theo mức: Là một interrupt báo hiệu việc lộ diện của nó vì bài toán bảo trì interrupt line tại mức ngắn gọn xúc tích cao hoặc phải chăng. Một sản phẩm mong mỏi phun ra level-triggered interrupt đã 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 có mang của nsx), cùng gia hạn màn chơi đó cho đến Lúc ISR hoàn tất. Level-triggered interrupt line hoàn toàn có thể đựa phân tách đã thân những trang bị. Line này cần có pull-up hoặc pull-down resistor để line này tự động về cực hiếm mang định Khi không tồn tại interrupt xẩy ra. Điểm giảm bớt của hình trạng interrupt này là interrupt của những sản phẩm công nghệ gồm mức ưu tiên cao rất có thể “bịt mất” interrupt của các thứ có nút ưu tiên phải chăng hơn….

Edge-triggered – ngắt sườn: Là một mẫu mã interrupt xẩy ra lúc tất cả sự chuyển đổi của interrupt line (đi từ cao-rẻ hoặc tốt – cao), xuất xắc nói cách khác là khi interrupt signal gồm sự thay đổi giá trị (tăng hoặc giảm). Các thiết bị hoàn toàn có thể share 1 edge-triggered interrupt line.

Hybrid Interrupt – hình dạng lai: Một số hệ thống áp dụng phối hợp cả hai các loại ngắt vừa nêu ngơi nghỉ trên. Kiểu lai này thường xuyên áp dụng cùng với NMI input đầu vào (non-maskable interrupt).

Xem thêm: Đăng Ký - Trạng Nguyên

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

Doorbell: Khái niệm này dùng để làm biểu đạt một qui định Khi nhưng mà phần mềm có thể “thông báo” với Hartware rằng “còn một số trong những Việc phải hoàn thành”. Thông thường ứng dụng đã đựat dữ liệu vào một vùng lưu giữ đã có được “thống nhất” cùng “rung chuông báo hiệu” bằng cách ghi vào vùng nhớ khác với vùng nhớ đã có thống độc nhất vô nhị. Vùng lưu giữ không giống này có cách gọi khác là doorbell region. Có nhiều doorbell giao hàng những mục tiêu 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 cần quan 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 đôi khi. Các mức độ ưu tiên này được ghi trong doc của processor.

Trong ngôi trường thích hợp interrupt gồm độ ưu tiên tốt đang rất được cách xử lý thì xảy ra interrupt bao gồm ưu tiên cao hơn thế thì interrupt ưu tiên rẻ có khả năng sẽ bị tạm dừng xử lí… hành động này điện thoại tư vấn là interrupt nesting,

Cần chăm chú kích thước của staông xã khi nesting interrupt, Mỗi ISR của interrupt được nest phải giữ cực hiếm những thanh hao ghi của chính nó vào staông chồng, vấn đề này có thể dẫn đến stackoverflow còn nếu như không kiểm soát điều hành đúng chuẩn size staông chồng.

Interrupt priorities được phối bởi Hartware, phần mềm hoặc cả hai.

Ta thiết yếu thao tác cùng với global interrupt flags bằng ngôn từ C, cầm vào kia, yêu cầu cần sử dụng asembly.

Interrupt Mapping

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

Cơ chế mapping này mãi mãi dưới dạng interrupt vector table. Nó là 1 trong những mảng các con trỏ hàm (pointer to lớn function, Processor vẫn áp dụng một con số được gán mang đến từng interrupt làm cho index nhằm xem xét mảng này. Và quý hiếm trên index tương xứng vẫn là bé trỏ hàm trỏ cho tới ISR rất cần được xúc tiến.

Việc thiết đặt ISR mang lại toàn bộ interrupt là quan trọng, bao gồm cả cùng với đầy đủ interrupts không được sử dụng trong khối hệ thống (rời tình trạng khối hệ thống going off inlớn the weeds – mất kiểm soát). Nếu Cảm Xúc Việc thiết đặt ISR cho từng interrupt chưa thực hiện là một bài toán tốn thời gian, bình thường sta rất có thể thiết lập một ISR thông thường cho các interrupt không áp dụng.

ISR – Interrupt Service Routine

Mục đích của bọn họ là ko nhằm interrupt tác động cho tới quy trình processor xúc tiến chương trình bây chừ đề nghị họ nên viết ISR càng nđính thêm gọn gàng càng xuất sắc. Nếu buộc phải thêm một trong những thao tác xử lý đối với một interrupt ví dụ nào đó, hãy thao tác này ngơi nghỉ không tính ISR bởi một hàm khác…. Hàm này được Call là DSR – deffered service routine.

Thông thường ISR không nhận tđam mê số truyền vào với không tồn tại quý giá trả về. Một ISR căn uống bạn dạng đang triển khai số đông các bước sau:

Saving processor context

Acknowleding the interrupt

Restoring processor context

Một quan niệm đi liền với interrupt là interrupt latency – đây là thông số kỹ thuật đo khoảng chừng thời gian trường đoản cú Lúc interrupt xảy ra cho đén lúc processor ban đầu triển khai ISR tương ứng.

Shared data & race conditions

Việc chia sẻ dữ liệu (giới thiệu data) thân ISR cùng main program là một trong vụ việc Lúc xây dựng embedded software có thực hiện interrupt.

Race condition là 1 tình huống xẩy ra Lúc hiệu quả đổi khác dựa trên máy tự triển khai những lệnh vào main code với ISR. Cần tránh trường hợp này.

Race condition được xem là hết sức khó khăn phát hiện nay bởi interrupt là asynch event với race condition thì không phải thời điểm nào cũng xuất hiện….

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

Giải pháp mang đến race condition đó là disable interrupt trước khi đi vào thực hiện critical section cùng enable interrupt Khi đang xúc tiến kết thúc critical section dồng thời giảm bớt tối phần nhiều lượng với độ lâu năm 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 *