태그 보관물: stm32

stm32

소프트웨어 인터럽트 대 기능 인터럽트를 사용한

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

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

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



답변

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

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

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

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


답변

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

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

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

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


답변

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

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

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


답변