inflearn logo
강의

Khóa học

Chia sẻ kiến thức

[Dành cho người mới bắt đầu] Phát triển nhúng thực tế được thực hiện như thế này.

Làm phòng sưởi. (Điều khiển máy sấy theo nhiệt độ) 4

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

Đã giải quyết

117

onestar

4 câu hỏi đã được viết

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 임베디드

Câu trả lời 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 초기화 문제를 해결해보세요. 다른 궁금한 점이 있으시면 이어서 질문해 주시면, 곧 지식공유자께서도 답변을 드릴 것입니다.

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

78번 강의 관련 온도센서 질문이 있습니다.

0

42

1

디버깅이 잘연결되다가 연결이 끊어졌어요

0

95

2

디버깅 오류

0

129

2

ST Link 유무에 따른 main 프로그램 시작 유무

0

89

2

111번째 강의까지 진행했는데, 온도 정보 받아오는 게 안돼요.

0

109

2

GPIO 간단 제어해보기 강의

0

182

2

브레이크포인트

0

100

2

STM IDE 설치 과정 중 에러 문의

0

105

1

STM IDE 설치 강의 중 문의

0

160

2

102. 난방실만들기4에서 디버깅 질문드립니다

0

83

2

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

0

195

3

IDE 설치 영상 관련 문의

0

107

2

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

0

461

2

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

0

140

2

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

0

139

2

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

0

159

2

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

0

166

2

빌드 및 디버깅 오류

0

315

2

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

0

163

2

씽크 오류

0

96

1

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

0

164

2

회로도 핀 연결 질문

0

121

2

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

0

171

2

Nucleo 보드로 대체

0

132

2