isr 여러개인 경우 deferred task
512
작성한 질문수 2
안녕하세요
수업듣고 심도있게 학습하고 있는 학생입니다.
인터럽트 처리를 공부하고 있는데 질문이 있습니다.
exti가 여러 개인 경우 어떻게 처리하는지 궁금합니다.
저의 처리방식은 인터럽트gpio가 4개로 가정했을때
char 전역변수;
void 콜백함수(gpio)
{
if(gpio==1){전역변수+=1;}
if(gpio==2){전역변수+=2;}
if(gpio==3){전역변수+=4;}
if(gpio==4){전역변수+=8;}
vTaskNotifyGiveFromISR(xHandle1, &xHigherPriorityTaskWoken);
portYIELD_FROM_ISR(&xHigherPriorityTaskWoken);
}
이런식으로 하고자 하여 전역변수를 뮤택스로 묶으려 했는데 isr에서는 뮤택스를 사용하면 안된다고 하신 걸로 학습했습니다.
다른 여러 자료를 찾아보아도 예시를 찾기가 어려워 질문드리게 되었습니다.
제가 질문드리고자 하는 핵심은 여러 인터럽트를 동시에 사용할경우 어떻게 사용해야하는지 궁금합니다.
답변 1
0
안녕하세요. 이상민님!
main() 함수를 포함하는 일반 컨텍스트와 ISR 인터럽트 컨텍스트에서 공유하는 전역변수에 대한 질의를 하셨습니다.
질문하신 내용은 다음과 같은 두 가지 시나리오 하에서 설명드려야 될 것 같습니다.
(case1) 개별적인 GPIO 인터럽트의 우선순위를 모두 동일하게 처리한 경우
이런 경우 일반적으로 일반 컨텍스트에서만 다음처럼 처리하면 ISR() 로부터 전역변수를 안전하게 보호할 수 있습니다. ISR() 에서는 상호배제에 대한 별도의 처리는 필요없습니다.
taskEnter_CRITICAL();
/* Critical Section */
보호하려는 공유 변수(전역 변수) 액세스
taskEXIT_CRITICAL();(case2) GPIO 인터럽트들의 우선순위를 서로 다르게 처리한 경우(인터럽트 중첩이 발생할 수 있는 환경)
결론부터 말씀드리자면 이 방법으로의 구현은 지양하는 것이 좋습니다. 인터럽트가 중첩이 됩니다. 그렇다면 질문자께서 우려하셨던 문제가 발생될 수 있습니다. 이 경우 인터럽트가 재 진입이 가능하게 되기 때문에 ISR 내부에 임계구역이 형성되며 개발자는 이에 대한 대비를 하여야 합니다. 결론적으로 case1 방법으로 구현하시는 것을 추천드립니다. 인터럽트 중첩은 개발자에게 항상 양날의 검으로 다가옵니다. 꼭 필요한 경우에만 사용되어야 할 것입니다.
혹시 질문하신 의도와 정확히 일치하지 않는 답변이었다면 재 질문해주세요 :)
만약에 포팅을 할때 1년에 한번 잡는 치명적인 문제를 해결하는 코드가 들어갔다고 가정하면
0
60
2
STM32 포팅할 때 STM32 Project가 없음
0
176
2
FreeRTOS 멀티코어 지원안됨?
0
90
2
[소스코드 분석-configUSE_TIME_SLICING] TASK1,2의 우선순위가 동일할 때, configUSE_TIME_SLICING값 변경에 따른 출력 변화
0
87
2
포팅 부탁드립니다!
0
61
1
포팅 부탁드립니다. <NUCLEO-G071RB>
0
68
2
상호배제 후 되지를 않아서 질문드립니다.
0
62
1
수료증 발급 기준 수정 요청
1
74
1
재진입가능여부에 관한 질문
1
68
1
01_TASKMAN프로젝트 디버깅 모드 실패
1
77
2
그러면 malloc/free가 아닌 동적할당자를 써서 메모리를 할당했기떄문에
1
72
2
실행순서
1
77
2
uart 전송중에는 스위칭이 금지되나요?
1
75
2
스택오버플로우 실습 중 stack size 설정 질문
0
84
2
포팅 원합니다.
2
77
2
코루틴 실습질문
1
102
2
TODO 2번 문제
1
141
4
10. 선점형 커널 그림 설명중 우선순위가 반대인 경우에도 Task B가 먼저 수행되나요?
1
82
2
디버거모드에 진입이 안됩니다.
0
177
2
prvExampleTaskHook 함수 호출 부분에 대해 문의드립니다.
0
121
2
보드 STM32H735IG와 강의 호환 여부 문의
1
153
3
[ L152RE ] 원샷 소프트타이머 실행 잘 되시나요?
1
159
2
Deferred Interrupt Processing 샘플 예제 문의 드립니다.
1
121
2
포팅 서비스 부탁드립니다
1
125
2





