2016-09-13 3 views
-5

데이터 로거 프로젝트의 경우 6 시간마다 온도 값을 저장해야합니다. 티커의 최대 시간은 30 분입니다. 우리가 6 시간 또는 10 시간 같은 긴 duaration에서 인터럽트를 만들 수있는 방법이 있습니까 ??.6hrs마다 인터럽트를 만드는 방법

감사합니다.

+1

어쨌든? * 여러 가지 방법이 있습니다. 시스템에 이미 중앙 I/O 루프가있는 경우 먼저 이미 그와 같은 기능을 가질 가능성이 있으므로 먼저 살펴보십시오. –

+1

하나의 가능성 : 인터럽트 간격을 넣어 1 분을 말하고 자신을 계산하십시오. –

답변

2

그래서 30 분마다 방해를 할 수 있습니다. ..

volatile int interruptCounter = 0; 
void interruptFunction (void) 
{ 
    interruptCounter++; 
    if(interruptCounter == 12) 
    { 
     interruptcounter = 0; 
     /* 
      Do your stuff here 
     */ 
    } 
} 

왜 12 행의 모든 ​​11 개 인터럽트를 무시하고 단지 12 일을 처리 할 수있는 유일한 방법이 있었다면? 0.5 시간마다 발생하는 인터럽트를 처리 할 수 ​​있기 때문입니다. 따라서 6h max 카운터 값은 6/0.5 = 12, 10h는 10/0.5 = 20 등이 될 것입니다.

+0

감사 Gravell – Gandhi

+2

좋은 : +1. 그러나 여기에 '휘발성'은별로 의미가 없다. 로컬 범위 '정적 uint8_t'는 괜찮을 수 있습니다. 그리고'=='대신 항상'> ='를 검사하십시오. – LPs

+0

@LPs 당신은 변수가 내부와 외부 인터럽트 함수 모두에 사용될 때만 'volatile'을 사용합니다. 인터럽트 함수 안에서'volatile '을 사용하는 습관이 있습니다. :) 그리고 당신은'> ='check로 맞지만이 경우에는 "interruptCounter == 12"점검을 "놓치지"않을 것입니다. – Gravell