AVR 또는 STM32 MCU에서 실제 이벤트 (예 : 3 초 동안 버튼 누름)를 할 때까지 기다리는 중이며 다음과 같은 코드에 문제가 있습니다.Loop "while"이 인터럽트로 두 조건을 만족시키지 못합니다.
#define PRESS_BUTTON
int waiting = 0;
int t_ms = 0; // time counter
//...
int main(void)
{
while(1)
{
waiting = t_ms + 3000; // waiting button 3 sec
while ((t_ms < waiting) && (!PRESS_BUTTON)) // infinite loop
{}
printf("out"); // not printed
waiting = t_ms = 0;
}
}
ISR(TIMER0_OVF_vect) // timer interrupt
{
t_ms++;
}
하지만이 while
루프 내부의 printf()
를 추가하는 경우, 그것을 작동합니다!
do...while
루프를 사용하면 동일한 문제가 발생합니다. 이 원인은 무엇입니까?
'휘발성'키워드의 강력 함. 'volatile int t_ms = 0;'로 변경하십시오. – LPs
'휘발성'을 추가하는 것 이외에, 어떻게 단추를 디 바운스합니까? 이 작업은 소프트웨어 또는 하드웨어로 수행해야합니다. 그렇지 않으면 프로그램이 항상 제대로 작동하지 않습니다. – Lundin
만월 5 회마다 한 번만 stackoverflow에 적절히 필요한 '휘발성'이 표시됩니다. 좋은 질문. –