inflearn logo
강의

Course

Instructor

[Embedded Beginner's Guide] This is how embedded development is actually done.

Making a heating chamber. (Hair dryer control based on temperature) 4

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

32

onestar

3 asked

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로 주어지는 이유를 알 수 있을까요..??

Raspberry-Pi arduino 임베디드

Answer 2

1

ojtube5

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

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

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

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

0

onestar

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

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

0

ojtube5

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

0

communityai8509

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

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

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

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

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

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

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

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

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

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

13강 프로젝트생성해보기 관련 질문

0

6

1

IDE 설치 영상 관련 문의

0

47

2

[정보 공유] STM32CubeIDE 버전별 이슈 정리 (1.19 미만 / 2.0.0 이상)

0

109

2

스위치회로 value값 바뀌지 않음

0

42

2

FND 점등에 성공했는데, Controller.c 디버깅 중 문제가 생겼습니다.

0

59

2

FND 7세그먼트 처음 킬 때의 '7777'불이 안 들어옵니다.

0

69

2

포트에 안잡히면 x쉘에서 Port설정을 어떻게 하죠..?

0

57

2

빌드 및 디버깅 오류

0

112

2

보드에 불이 안들어옵니다.

0

71

2

씽크 오류

0

54

1

고추건조기 개발보드 전원연결 문제점..

0

70

2

회로도 핀 연결 질문

0

66

2

elf 파일을 찾을수 없다는 오류

0

71

2

Nucleo 보드로 대체

0

84

2

구매해야 하는 물품 문의

0

94

2

ST-Link 디버깅 에러

0

83

3

강의 사용하시는 pdf는 어디에 있나요?

0

108

2

이전 질문 재질문입니다.!

0

75

2

다른 개발 실습 보드 사용문의

0

95

2

smt32 Cube Ide 설치관련 에러입니다

0

220

2

제가 1년전에 구매해서 이제 뜯어봤는데 납땜이 겹쳐있는데 사용해도 괜찮을까요?

0

93

2

타이머 최대 주파수 질문

0

64

2

초기 신호에 대한 질문

0

88

2

targeted project type 에러 해결 방법 공유합니다.

0

100

2