예를 들어 Linux를 실행하는 내 컴퓨터(예: Raspberry Pi)와 통신하기 위해 SPI 또는 다른 통신 프로토콜을 사용하는 장치가 있다고 가정해 보겠습니다. 이 통신이 성공하려면 중단이 허용되지 않습니다. 그러나 Linux에서는 프로세스를 중단하고 다음 프로세스를 실행하기 위해 컨텍스트 전환을 수행하지 않습니까? 제가 설명한 경우에 이러한 일이 발생하지 않는 이유는 무엇입니까? 얼어붙은 것 같나요?
또한, 클럭 신호가 높거나 낮아질 때 피어가 정확하게 데이터를 쓰거나 읽는다는 것을 어떻게 보장할 수 있습니까? 피어가 시계가 변경될 때 모니터링하는 것 이외의 다른 작업을 수행하는 경우 어떻게 될까요? Arduino가 다른 작업을 수행하는 동안 직렬이 어딘가에 버퍼에 저장되어 있습니까?
답변1
인터럽트 우선순위가 들어오는 곳은 다음과 같습니다.
인터럽트는 우선순위가 낮은 인터럽트만 중단할 수 있습니다(백그라운드 처리는 우선순위가 가장 낮습니다). 선점 인터럽트는 시간 결정적 인터럽트보다 우선순위가 낮으므로 작업 스위치에 의해 중단되지 않습니다. 기다리다.
이 작업을 수행하려면 시스템(하드웨어 및 커널) 디자이너가 따라야 하는 몇 가지 규칙이 있습니다.
- 시간이 중요한 인터럽트의 우선순위가 더 높습니다.
- 높은 우선순위 인터럽트는 가능한 한 빨리 작업을 수행하고 방해가 되지 않도록 해야 합니다. 예를 들어 데이터를 이동하거나 데이터를 이동하도록 하드웨어를 더 잘 설정하면 낮은 우선순위 인터럽트 또는 일반 프로세스를 수행하도록 요청할 수 있습니다. 처리.