강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

장한별님의 프로필 이미지
장한별

작성한 질문수

[임베디드 입문용] 임베디드 개발은 실제로 이렇게 해요.

난방실 만들기. (온도에 따른 드라이기 제어) 4

난방실만들기.4 진행 중, m_state 값 초기화가 안됩니다..

작성

·

23

0

안녕하세요 온도 센서 값에 따라 릴레이를 붙이고 띄고 하는 동작을 하려는 데요,

main.c 파일에서 첫 동작 시 m_state가 0으로 할당하니 elseif문을 타야 될 거 같은데 안 탔어서 m_state 값을 라이브로 찍어보니 127 '\177'의 값으로 처음 할당 되는 걸 확인 했습니다.
이 값의 문제가 맞나 해서 "getHeaterState() == t_OFF" 소스 값을 "getHeaterState() != t_ON" 으로 바꾸니 정상 작동 했었습니다..

heaterController.c 에서 m_state 는 확실히 0으로 할당 해주었고, heaterController.h 에서 enum 타입도 선언 해주었는데도, 초기 값이 127로 주어지는 이유를 알 수 있을까요..??

퀴즈

이 프로젝트에서 릴레이 모듈의 주요 역할은 무엇일까요?

온도 센서 데이터를 읽는 것

마이크로컨트롤러에 전원을 공급하는 것

저전압 제어 신호로 고전압 AC 장치를 켜고 끄는 것

GPIO 핀의 입출력 방향을 설정하는 것

답변 2

1

ojtube5님의 프로필 이미지
ojtube5
지식공유자

코드를 한번 직접 봐야 정확하게 판단할 수 있을 것 같습니다.
다만 경험상 몇 가지 방향은 추려볼 수 있습니다.

만약 매번 동일하게 127로 나온다면, 단순히 초기화가 안 된 랜덤 값이라기보다는
어딘가에서 해당 값이 반복적으로 설정되고 있는 명확한 원인이 있을 가능성이 큽니다.
(예: 잘못된 메모리 접근, 다른 변수 참조, 초기화 순서 문제 등)

반대로, 초기값이 실행할 때마다 다르게 나온다면
0으로 초기화한 코드가 실제로 적용되지 않는 범위에 있거나,
초기화 자체가 제대로 이루어지지 않았을 가능성을 의심해볼 수 있습니다.

그래서 이 경우는 단순 자료형 문제보다는
변수의 실제 선언 위치, 접근 방식, 초기화 시점을 먼저 확인해보는 것이 좋겠습니다.

장한별님의 프로필 이미지
장한별
질문자

정확히는 매번 127 값이 들어오고, 처음 main.c while 문 들어오기 전에는 0값으로 들어옵니다. 그런데 Ds18b20_ManualConvert 함수 브레이크 걸린 후에 127이 할당 되는 것 같습니다.

그래서 지금은 개인 소스 초기화 영역에 "heaterControll(t_OFF)" 를 넣어서 초기화 한 후 원래 강의대로의 소스를 넣어서 쓰면 정상 작동하긴 합니다..

ojtube5님의 프로필 이미지
ojtube5
지식공유자

그러면 값을 어디선가 127을 넣기는 하는 것 같네요.
ohjiwan@gmail.com 나중에 소스 주시면 제가 한번 구경해볼게요.

0

안녕하세요, 인프런 AI 인턴입니다. 장한별님!

언급하신 문제는 초기화 과정에서 변수 m_state가 예상치 않은 값으로 설정되는 것으로 보입니다. 이와 같은 경우, 몇 가지 가능한 원인을 점검해 보시는 것을 권장드립니다.

  1. 전역 변수 초기화 문제:

    • main.c 내에 글로벌 변수로 선언된 경우에 초기화를 하지 않는다면 기본적으로 0이 아닌 임의의 값으로 시작할 수 있습니다. 함수 내부에서 초기화를 보장하는지 확인해 보세요.
  2. 메모리 상의 초기값:

    • 만약 변수가 로컬 변수라면 초기화되지 않은 채로 다른 객체의 잔존 값이 들어갈 수도 있습니다.
  3. 컴파일러 설정:

    • 일부 컴파일러 및 최적화 설정에 따라 초기화가 제대로 되지 않는 경우도 있습니다. 컴파일러 옵션을 검토하고, 최적화 설정을 조정해 보세요.
  4. 변경 전후의 코드 비교:

    • 기존 코드 구조와 변화를 주기 전후의 코드를 비교하여 흐름의 차이가 있는지 점검합니다. 변경 후 작동한 원인을 탐구함으로써 초기 문제의 근본 원인을 발견할 수 있습니다.

다음의 게시물을 통해 유사 문제에 대한 추가적인 해결책을 확인해 보시기 바랍니다:
- 변수 초기화 및 메모리 할당의 이해
- 임베디드 개발에서의 전역 변수와 초기화 문제

이 정보를 바탕으로 m_state 초기화 문제를 해결해보세요. 다른 궁금한 점이 있으시면 이어서 질문해 주시면, 곧 지식공유자께서도 답변을 드릴 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

장한별님의 프로필 이미지
장한별

작성한 질문수

질문하기