본문 바로가기

Lecture/AVR

unsigned int 출력하기...... %u (뻘짓....)

HDD Clock 를 만드는중.....

외부인터럽트를 받아서 타이밍을 Timer 의 Input Capture 기능을 이용하여 시간을 체크하려고 하는데

아무리 해도 안되는것임....

그래.... 지난번에 뻘짓을 알아보면.....
  
    temp=ICR1L;
    clock=(ICR3H)<<8;
    clock=clock|temp;

이렇게 되면 ICR3H 레지스터는 8bit 이기 때문에 0x00이 되어버린다..........
하위비트만 줄기차게 출력되어 버리는거지.........
  
    temp=ICR1L;
    clock=(ICR3H);
    clock=clock<<8;
    clock=clock|temp;
그래서 위와 같이 16비트짜리 변수에 넣어준 후 연산해주면 됨........

이 코드는 지난번에 RPM측정기 만들때 했던 대표 적인 뻘짓이고.....

이버너에는 저 clock 값을 uart로 출력해서 모니터링 하려고 하는데......

아무리 해도 값이 안나오는거......
MCU의 출력이 바르긴 하다지만......

clock : -3109 
clock : 26593 
clock : -14044 
clock : -29154 
clock : 10713 
clock : -533 

왜....unsigned int 값이 음수가 나오는거지!!!!!!  (참고로 변수 clock는 unsigned int로 선언되었음)

이유는 %d 에 있었다.  unsigned 정수형의 경우 %u 로 출력한다고 하네........(이걸 몰라서....ㅠㅠ)

괜한 뻘짓..... C 언어를 배운지 너무 오래된게야.......