문제

임베디드 프로세서의 인터럽트 컨트롤러 하드웨어를 제어하는 ​​인터럽트 처리 모듈이 있습니다.이제 더 많은 테스트를 추가하고 싶습니다.현재 테스트에서는 ISR 내에서 두 개의 소프트웨어 인터럽트(하나는 낮은 우선순위, 다른 하나는 높은 우선순위)를 만들어 인터럽트 중첩이 작동하는지 테스트합니다.이 모듈을 추가로 테스트하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

다른 자극도 만들어 보는 것이 좋습니다.

종종 하드웨어 인터럽트는 플래그를 설정하여 소프트웨어(자동 테스트) 또는 디버거에 의해 트리거될 수도 있습니다.또는 I/O를 통한 인터럽트로 사용됩니다.또는 타이머 인터럽트.또는 단일 스테핑을 수행하는 동안 디버거를 통해 인터럽트 컨트롤러에서 인터럽트 비트를 설정할 수도 있습니다.

일어나지 않아야 할 일에 대한 런타임 검사를 추가할 수 있습니다.때로는 외부에서 모니터링하기 위해 출력 핀을 설정하기로 선택합니다(오실로스코프나 로직 분석기가 있는 경우 좋습니다...).

low_prio_isr(void)
{
    LOW_PRIO_ISR=1;
    if (1 == HIGH_PRIO_ISR)
    { this may never happen. dummy statement to allow breakpoint in debugger }

}

high_prio_isr(void)
{
    HIGH_PRIO_ISR=1
} 

소프트웨어 인터럽트의 단점은 순간이 고정되어 있다는 것입니다.항상 같은 지시.나는 당신이 그것이 항상 작동한다는 증거를 보고 싶어한다고 믿습니다.교착상태 없음.

인터럽트 서비스 루틴의 경우 코드 검토가 매우 중요하다고 생각합니다.결국에는 상상한 상황만 테스트할 수 있으며 어느 시점에서는 테스트에 드는 노력이 매우 높아질 것입니다.ISR은 디버깅하기가 매우 어렵습니다.

나는 다음에 대한 테스트를 제공하는 것이 유용하다고 생각합니다.-ISR은 우선 순위가 낮은 인터럽트를 위해 중단되지 않습니다. -ISR은 동일한 우선 순위 인터럽트에 대해 중단되지 않습니다. -ISR은 우선 순위가 높을수록 중단됩니다.

일부 테스트는 코드에 계측으로 유지될 수 있습니다(예를 들어 최대 중첩 수준을 모니터링할 수 있음).

아, 그리고 한 가지 더:나는 일반적으로 ISR을 너무 짧게 유지하여 중첩을 자제할 수 있었습니다....가능하다면 추가 단순성과 더 많은 성능을 얻을 수 있습니다.

[편집하다]물론 ISR은 시스템의 하드웨어에서도 테스트되어야 합니다.비트별, 단계별 접근 방식 외에도 다음을 증명할 수 있습니다.- 최대 인터럽트 부하에서 시스템의 안정성(가급적이면 예상 최대 부하의 몇 배;115kbps 직렬 드라이버가 2Mbps를 처리 할 수 ​​있다면 괜찮을 것입니다!) - ISR을 활성화 / 비활성화하는 올바른 순간, 특히 시스템이 잠자기 모드에 들어가는 경우 - 인터럽트의 #.기계식 스위치, 기계식 회전식(안정적인 상황에 도달하기 전에 수백 번의 차단/접촉 순간)을 추가하면 놀라울 수 있습니다.

다른 팁

실제 하드웨어 테스트를 권장합니다.인터럽트 처리는 본질적으로 무작위적이고 예측할 수 없습니다.

신호 발생기를 사용하고 적절한 인터럽트 핀에 구형파를 공급하십시오.여러 생성기(또는 여러 출력이 있는 생성기)를 사용하여 여러 IRQ 라인을 테스트하고 우선 순위 처리를 확인합니다.

신호 발생기의 주파수를 위아래로 조절하여 실험하고(그들 사이의 속도를 변경함) 무슨 일이 일어나는지 확인하십시오.다양한 상태에서 인터럽트 컨트롤러의 상태를 확인하기 위한 많은 진단 코드가 있습니다.

대안: 플랫폼에 인터럽트를 트리거할 수 있는 타이머가 있는 경우 외부 하드웨어 대신 이를 사용할 수 있습니다.

저는 임베디드 개발자가 아니기 때문에 이것이 가능한지는 모르겠지만 콜백 등록 메커니즘에서 인터럽트를 처리하는 코드를 분리하는 것은 어떻습니까?이렇게 하면 원하는 대로 인터럽트 이벤트를 발생시키는 시뮬레이터 코드를 작성할 수 있습니다.

이와 같은 것에 대해서는 다음과 같은 것을 적극 권장합니다. SPIN 모델 검사기.코드가 아닌 알고리즘을 테스트하게 되지만 테스트는 철저한.예전에, 에서 버그를 발견했습니다 gdb 이 기술을 사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top