2014-01-27 2 views
2

나는 run-to-completion 스테이트 머신 RTOS에서 일하고있다. 내가 놓친 상황이 무엇인지 궁금하다. 최대 CPU 사용률 조건 (100 %)으로 인해 인터럽트가 누락 될 수 있습니까? 또한 동일한 틱에서 다른 핸들러를 가지고 있지만 인터럽트 라인이 동일한 두 개의 타이머가 타임 아웃되면 ISR이 먼저 실행됩니까? 타이머 인터럽트가 충돌/놓치게되는 상황은 무엇입니까?

는 [제한된 하드웨어 기술과 소프트웨어/펌웨어 엔지니어의 관점에서 응답을 평가한다.] 인터럽트 최초로 출현 번째 발생 전에 서비스되지 않은 경우

답변

3

인터럽트가 누락되는 전형적인 방법은 같은 인터럽트 소스의 첫 번째 발생을 충분히 빠르게 처리하지 않으면 첫 번째 발생과 구별 할 수 없으므로 다음 발생을 놓치게됩니다. 인터럽트가 여러 번 발생할 때까지 대기열이 없으므로 해당 인터럽트가 다시 발생하기 전에 각 인터럽트를 처리하고 지울 필요가 있습니다. (서로 다른 인터럽트 소스는 동시에 보류 될 수 있고 구별 될 수 있기 때문에 따로 따로 처리 될 수 있습니다. 하나의 인터럽트 소스를 놓칠 수있는 두 가지 인터럽트 소스가 있습니다.)

100 % CPU 사용률은 필연적으로 인터럽트가 누락되는 원인이 될 수 있지만 그것이 기여할 수 있다고 생각합니다. 다른 문제도 발생할 수 있습니다.

많은 마이크로 컨트롤러에는 어떤 인터럽트 소스가 다른 인터럽트보다 어설 션되는지 정의하는 인터럽트 우선 순위 매커니즘이 포함되어 있습니다. 이는 하나의 마이크로 컨트롤러에 따라 다르므로 자세한 내용은 해당 마이크로 컨트롤러의 데이터 시트를 확인해야합니다.

업데이트 : 어떤 조건으로 인해 인터럽트가 충분히 빠르게 처리되지 않을 수 있습니까? 인터럽트가 너무 오래 비활성화 된 경우 인터럽트가 충분히 빠르게 처리되지 않을 수 있습니다. 또는 우선 순위가 높은 인터럽트 처리기가 너무 오래 걸리면 우선 순위가 낮은 인터럽트가 충분히 빨리 처리되지 않을 수 있습니다.

이러한 상황을 방지하려면 인터럽트가 비활성화 된 기간과 인터럽트 처리 루틴을 모두 단시간으로 유지하십시오.

+0

@UncleO : 첫 번째 문장에서 "서비스 완료"를 "서비스 완료"로 변경했습니다. 그리고 인터럽트가 충분히 빨리 처리되지 않는 이유에 대한 업데이트를 추가했습니다. – kkrambo