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


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 의 LinuxMS-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.