타이머관련 소프트웨어 오류와 수정...

by 이희철 | 2016-12-29 14:18

소프트웨어로 타이머를 구현했고...


남은 시간을 막대그래프 (time bar)의 형태로 구현했는데...


짦은 시간(예: 5분)을 입력하면...


아래화면에서 보는 것과 같은 남은시간(remain_second  300초)가 제대로 설정이 되는데...



남은시간에 숫자가 큰 값 (예: 11시간 39,600초)를 입력하면...


아래 그림과 같이 너무 큰 숫자값(4294941360초)이 표시된다...



remain_second변수는 unsigned long으로 선언되어 있는데 변수를 모니터링해보면 너무 큰 값이 되어 있다...


해서...


unsigned long을 long으로 선언을 바꾸어보았더니...


아래 화면캡춰와 같이 음수값을 나타내었다...




오류는 변수 선언과 핸들링에 의한 것으로 보이나...


원인을 알 수 없다...





값을 계산하는 부분의 소프트웨어는 아래와 같다...



무엇이 잘못된 것일까?


작은 숫자는 아래 사진과 같이 정상적으로 작동을 하고...


큰 숫자에만 에러가 나는 상황...



혹시...


이유를 아시는 분...


조언 부탁합니다.


혹시 몰라...


전체 프로그램도 첨부화일로 올렸습니다...




/*********************************************************************/

/  프로그램 오류를 잡았습니다...

/*********************************************************************/



오류는 set_time_hr가 byte로 설정이 되어 있었다는 것...


때문에 숫자가 작을 때는 정상 작동하다가...


숫자가 커지면 오버플로우가 되면서 - 값을 가졌던 것...


위 화면캡쳐와 같이...


long타입의 변수인 long_set_time_hr을 새로 선언하고


set_time_hr을 long타입으로 형변환을 해서 대입해서 사용하니 잘 작동...


자문 자답이 되어 버렸다..



정상 작동...


제대로된 변수값이 들어가고...



위 화면과 같이 time bar도 정상 작동...



댓글 2

MADE BY

이희철

요리, 전자회로설계
PID콘트롤을 적용하다... #1 다음글 타이머관련 소프트웨어 오류와 수정...현재글 온도센서 관련 오류 수정... 이전글