소프트웨어 인터럽트 대 기능


10

약 3 년 동안 MCU와 함께 작업 한 후에도 소프트웨어 인터럽트의 용도를 모르겠습니다. STM32로 여러 작업을 수행했으며 소프트웨어 인터럽트를 사용한 적이 없습니다. 실제로 이것은 나에게 큰 질문입니다.

간단한 기능을 사용하여 작업을 수행 할 수있는 경우 소프트웨어 인터럽트를 사용해야합니까? 소프트웨어 인터럽트와 기능의 차이점은 무엇입니까?

원할 때마다 함수 (작업용으로 작성한 함수)를 호출 할 수 있습니다. 간단한 기능 대신 소프트웨어 인터럽트를 사용하면 몇 가지 이점이 있습니다. 확실하지는 않지만 소프트웨어 인터럽트에 대한 이점이 있다고 생각합니다. 소프트웨어 인터럽트에 우선 순위를 할당 한 다음 하드웨어 인터럽트가 작업을 중단하지 않도록 소프트웨어 인터럽트에 우선 순위를 지정할 수 있습니다.


1
인터럽트를 사용하는 주된 목적은 다른 일이 일어나기를 기다리는 동안과 타이밍이 항상 일정하지 않을 때 다른 중요한 작업을 계속 수행 할 수 있다는 것입니다. 또한 대부분의 경우 폴링보다 약간 빠르다고 생각합니다.
— MrPhooky

1
@MrPhooky 그것은 당신이 말하는 하드웨어 인터럽트입니다. OP가 소프트웨어 인터럽트에 대해 이야기하고 있습니다.
— brhans

답변:


19

함수와 소프트웨어 인터럽트의 주요 차이점은 컨텍스트 입니다.

  • 함수는 기본 프로그램의 컨텍스트 내에서 실행됩니다.
  • 인터럽트는 인터럽트 핸들러의 컨텍스트 내에서 실행됩니다.

간단한 시스템에서 이것은 실제 차이가 아닐 수 있으며 소프트웨어 인터럽트는 ROM으로 하드 코딩 된 라이브러리 루틴을 제공하는 편리한 방법으로 간단하게 사용될 수 있습니다-모든 루틴의 주소를 알 필요는 없으며 ID 코드와 주요 진입 점. 이것은 코드를 더 이식성이있게 만듭니다.

그러나보다 복잡한 시스템에서는 소프트웨어 인터럽트가 완전히 다른 환경 ( 커널 컨텍스트) 에서 실행될 수 있습니다 . 일반적으로 응용 프로그램은 리소스에 대한 액세스가 제한된 보호 된 사용자 컨텍스트 에서 실행됩니다 . 커널 컨텍스트에서 실행하는 경우에만보다 복잡한 작업을 수행 할 수 있습니다. 실제로 일부 시스템은 실행할 수있는 명령을 제한하기 때문에 커널 컨텍스트에서 코드를 트리거하는 메커니즘이 필요하며 인터럽트가 사용됩니다.


1
또한 인터럽트는 프로그램의 진행을 임의로 중단시켜 시스템이 다른 작업 (예 : 하드웨어 인터럽트)을 수행 할 수있게합니다. 프로그램의 관점에서 인터럽트의 발생 시점과 기능 상태가 변경되지 않기 때문에 프로그램은이를 고려할 필요가 없습니다. 구형 시스템에서는 TSR (Terminate / Stay Resident) 프로그램이 타이머 / 클록 인터럽트를 연결하여 멀티 태스킹을 시뮬레이트 한 방식입니다. IOPL 수준이 없어도 시스템 시계를 최신 상태로 유지하면 이점이있었습니다.
— phyrfox

4
아마도 "소프트웨어 인터럽트"는 "동기 인터럽트"라고도합니다. 왜냐하면 애플리케이션 코드는 "비동기 인터럽트"와는 달리, 이러한 인터럽트가 발생하는시기와 이유를 정확히 알고 있기 때문입니다. 응용 프로그램은 기본적으로 원치 않는 방식으로 언제든지 발생합니다.
— JimmyB

@ HannoBinder : OP가 Cortex-M3 벡터 인터럽트 컨트롤러에 인터럽트 요청을 게시하는 것에 대해 이야기하고 있다고 생각합니다. 우선 순위가 높은 인터럽트에 대한 코드가 우선 순위가 낮은 인터럽트를 게시하는 경우 우선 순위가 높은 모든 인터럽트가 완료된 후 나중에 요청이 지연됩니다.
— supercat

12

소프트웨어 인터럽트를 사용하여 우선 순위가 낮은 인터럽트 작업을 완료 할 수 있습니다. 지연 시간을 너무 많이 피하기 위해 타이밍 중요 코드에 인터럽트 우선 순위가 높은 경우가 종종 있습니다. 타이밍 중요 부품이 완료되면 메인 루프에 너무 타이밍 중요하지만 다른 우선 순위가 높은 인터럽트를 유지하는 데 중요하지 않은 추가 작업이있을 수 있습니다. 우선 순위가 낮은 소프트웨어 인터럽트를 트리거하면이 작업을 수행 할 수 있습니다.

예를 들어 각각 자체 타이머가있는 스테퍼 모터가 여러 개 있다고 가정합니다. 스텝 지터를 최소화하기 위해 타이머 인터럽트에 우선 순위가 높습니다. 타이밍이 가장 중요한 작업은 스텝 펄스를 설정하거나 지우거나 위상 출력을 높이는 것만 큼 간단 할 수 있습니다. 가속 램프 계산, 센서 처리 등의 추가 기능이 필요할 수 있습니다.이 단계는 매 단계마다 처리해야하므로 메인 루프 타이밍이 너무 길기 때문에 main ()에서이를 처리하는 것이 적절하지 않을 수 있습니다. 이러한 추가 작업은 우선 순위가 낮은 다른 소프트웨어 인터럽트에 의해 처리되어 다른 우선 순위가 높은 스테퍼 채널의 대기 시간이 증가하지 않도록 할 수 있습니다.

소프트웨어 인터럽트와 기능의 차이점은 무엇입니까?

함수는 호출 된 곳에서 즉시 호출되며 인터럽트에서 호출 된 경우 현재 인터럽트 우선 순위 레벨을 변경하지 않습니다. 소프트웨어 인터럽트는 우선 순위가 올 때 인터럽트를 호출하게하는 인터럽트 트리거입니다. 우선 순위가 높은 인터럽트 끝에 함수 호출이 삽입 된 경우 해당 우선 순위 내에 함수가 포함됩니다. 우선 순위가 낮은 소프트웨어 인터럽트를 트리거 한 다음 우선 순위가 높은 인터럽트에서 복귀함으로써 기능이 새로운 (낮은) 우선 순위로 호출됩니다.


2
또 다른 일반적인 패턴은 타이밍에 중요한 요소를 처리하기 위해 100KHz 인터럽트가 있고 1kHz 타이머 틱이 필요하지만 두 개의 별도 타이머를 사용할 수는 없다는 것입니다. 100kHz 인터럽트 루틴이 말하는 데 시간이 많이 걸리지 않습니다 if ((timer_count--) & 0x80000000) SET_TICK_INTERRUPT_FLAG(); else timer_count = temp-1; . 다른 인터럽트는 그 일을 할 수 있고 인터럽트가 잠시 비활성화되면 timer_count에 100을 더합니다. 1kHz 루틴이 실행하는 데 10us를 초과하더라도 100kHz를 방해하지 않습니다.
— supercat

비슷한 방법으로, 간단한 시스템 (전체 RTOS가없는)에서 소프트웨어 스케줄러를 의사 스케줄링 자로 사용했는데, 하드웨어 요구 사항은 ISR에 의해 처리되지만 콜백 함수 및 기타 긴 작업은 변경 사항에 따라 수행됩니다. 하드웨어 상태는 소프트웨어 인터럽트에 위임됩니다.
— Evil Dog Pie

기본적으로 "하반부"의 변형을 설명했습니다. "소프트웨어 인터럽트"라고도하는 이것에 대한 언급이 있습니까? Majenko의 답변과는 상당히 다른 의미이며 질문에는 ARM 태그가 지정되어 있습니다. 아키텍처에는 실제로 SWI (소프트웨어 인터럽트) 명령이 있습니다.
— domen

3
@ domen 어떤 종류의 참조가 필요한지 잘 모르겠습니다. 이를 "소프트웨어 인터럽트"라고합니다. ARM과 관련하여 OP는 STM32를 구체적으로 참조하고 RM0008 참조 매뉴얼에 대한 링크를 제공했습니다. 이것은 ARM 핵심 참조 설명서가 아닙니다. RM0008에 포함 된 유일한 "소프트웨어 인터럽트"는 실제 하드웨어 핀이 인터럽트에 사용되는지 여부에 관계없이 소프트웨어 인터럽트를 생성하는 데 사용될 수있는 EXTI_SWIER (소프트웨어 인터럽트 이벤트 레지스터)입니다. 개인적으로 SWI (SWC) 명령을 사용하지 않았습니다.
— Tut

감사! 어떤 "소프트웨어 인터럽트"가 무엇인지 명확히하기 위해이 정보 중 일부를 답에 포함시키는 것이 좋습니다.
— domen

7

Majenko의 답변을 약간 확장하기 위해 소프트웨어 인터럽트는 운영 체제, 특히 시스템 호출 인터페이스를 구현하는 데 사용됩니다. 이것은 기능 호출을 위해 응용 프로그램을 운영 체제와 연결할 필요가 없으며 컨텍스트 스위치를 사용하면 OS가 하드웨어에 대한 액세스를 제한하고 보호 된 메모리와 같은 기능을 활용할 수 있습니다.

OS를 사용하지 않고 MCU의 모든 코드를 제어하는 ​​경우 소프트웨어 인터럽트를 사용할 필요가 없습니다. (Tut이 언급했듯이 다른 용도로도 사용할 수 있습니다.)

x86 의 Linux 및 MS-DOS 시스템 호출 인터페이스는 소프트웨어 인터럽트를 사용하므로 예제로 링크합니다.


1
그리고 os가 소프트 인터럽트를 사용하는 많은 경우에, 그것들은 삶을 더 단순하게 만드는 함수로 싸여 있습니다.
— 초에 hildred

1
나는 여전히 DOS를 위해 새로운 것을 프로그래밍하고 int 21 핸들러에 매우 익숙하다. I / O가 현명하게 필요한 거의 모든 것은 DOS ISR로 처리됩니다.
— R Drast

Linux에 인용 된 페이지는 1993-1996 년입니다.
— CVn

링크를 최신 링크로 교체했습니다.
— Adam Haun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.