뉴티씨



  • HOME
  • 고객지원
  • 질문답변

 

 
FOR 문으로 하면 이상이 없는데 While로 하면 1비트가 오버플로우 되는 걸까요?
 글쓴이 : 관리자
작성일 : 17-11-16 08:12
조회 : 3,074  
안녕하세요? 고객님,
저희 뉴티씨를 이용하여주셔서 감사합니다.

소스에서 보면 Z는 unsigned char형으로 선언되어 있습니다.
즉, 0~255까지인데요.

z가 while문에서 255라도 루틴은 진행되기 때문에 다음으로 넘어가서 z++까지 되므로 256이 되야하지만 범위가 255까지이므로 overflow되어서 0이 됩니다.
그러므로 다음 while문에서 검사시 255보다 작으므로, 다시 싱행됩니다.
그래서 무한루프가 도는 것으로 보입니다.
status register에서 overflow를 체크하시거나, while (z < 255)로 허셔야 겠습니다.

감사합니다.
>
>
> 먼저, 딜레이 값을 없애면 8비트 255 값 전체 켜집니다.
> 하지만 내부 딜레이 값을 주면 254까지는 제대로 동작합니다. 7비트까지 켜져 있음.
> 그런데 255로 값을 주게 되면 계속 무한 루프를 반복합니다. if 문을 주어서 루프를 빠져 나오게 해봐도 안됩니다. 알 수가 없네요. 다만 Char을  int 로 재정의 해 보면 255까지 led가 켜진채로 정지해 있습니다. 이 걸 근거로 본다면 뭔가 1비트를 차지하고 있다는 건지? 모르겠네요. 이유가 뭘까요? ㅋ
>
>
> #ifndef F_CPU
> #define F_CPU 16000000UL // 16 MHz clock speed
> #endif
> #include <avr/io.h>
> #include <util/delay.h>
>
> int main(void)
> {
>
> unsigned char z;
>
> DDRC = 0xFF;
> // PORTC = 0x00;
>
> z = 0;
>
> while (z <= 255)
>
> {
>
>
> PORTC = z;
>
> _delay_ms(50);  //255 값으로 딜레이를 사용하면 무한 루프 반복. 이유 모름 254까지는 전혀 이상 없음.
>
> z++;
>
> //      PORTC = 0x00;  //10번까지 카운트 하고 꺼짐
>

> }
> }
>

 
   
 

 


1