강의

멘토링

커뮤니티

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

김병희님의 프로필 이미지
김병희

작성한 질문수

전동킥보드로 배우는 임베디드 실전 프로젝트

전동킥보드 펌웨어 코드 분석 (3)

Ias_offset의 변수타입을 uint32_t로 하든 int32_t로 하든 상관이 없나요?

해결된 질문

작성

·

45

·

수정됨

0

소형모터를 달고 펌웨어를 입혔더니 처음에 전류 오프셋값이 32bit의 최대값 근처(ex 4294967284)로 나와서 생각해보니 오프셋의 변수 타입이 uint32_t라서 오프셋 계산 과정중 2048을 빼주는 과정에서 음수가 발생하게 되면 자연스럽게 오프셋의 값이 32bit의 최대값 근처로 저장이 되는 것을 알게되었습니다. 물론 계산 과정중에 음수가 발생해 비트가 이렇게 저장이 되도 결국 실제 전류는 한번 더 음수계산을 통해 제대로 나오겠지만 실제 실무환경에서도 이런 식으로 오프셋 값이 나와도 괜찮은지 여쭤봅니다.

답변 2

0

제어쟁이님의 프로필 이미지
제어쟁이
지식공유자

좋은 질문입니다. 말씀하신 현상은 맞습니다. 현재처럼 uint32_t 상태에서 2048을 빼는 과정에 음수 구간이 생기면 값이 32비트 최대값 근처로 래핑되어 4294967284처럼 보일 수 있습니다. 그래서 지금 보신 값 자체는 이상 현상이라기보다 unsigned 연산의 결과로 이해하시면 됩니다.

 

다만 las_offset이 0전류 기준의 ADC 원값 자체를 저장하는 용도라면 unsigned여도 괜찮지만, 2048을 뺀 뒤의 중심화된 값까지 같은 변수로 다루는 구조라면 int32_t 같은 signed 타입으로 처리하는 편이 더 자연스럽고 안전합니다.

지금 코드도 이후 계산 과정에서 다시 signed 해석이 들어가면 최종 전류값이 맞게 나올 수는 있지만, 이런 방식은 연산 흐름이 조금만 바뀌어도 디버깅이 어려워지고 비교나 필터 처리에서 예상과 다른 동작이 생길 수 있어서 실무에서는 보통 차분과 전류 계산 경로를 signed로 분리해서 가져갑니다.

정리하면 교육용 코드에서는 단순화를 위해 크게 문제 없이 넘어갈 수 있는 부분이지만, 실무 코드라면 signed 쪽으로 정리하는 것이 더 좋은 방향입니다. 이런 부분까지 꼼꼼하게 확인해주셔서 감사합니다. 덕분에 교육용 코드와 실무 코드의 차이를 짚고 넘어갈 수 있는 좋은 포인트가 되었습니다.

0

안녕하세요, 인프런 AI 인턴입니다. 김병희님.

변수 타입을 선택하는 것은 코드의 내부 동작 및 외부 해석에 상당히 중요한 영향을 미칠 수 있습니다. 현재 질문하신 내용은 임베디드 시스템에서 변수의 자료형 선택과 관련된 문제로, 실제 동작에 영향을 줄 수 있습니다. 다음은 관련 설명입니다.

변수 타입의 중요성

  1. uint32_t vs int32_t:

    • uint32_t는 부호가 없는 32비트 정수이며, 범위는 0부터 4,294,967,295까지입니다.
    • int32_t는 부호가 있는 32비트 정수로, 범위는 -2,147,483,648부터 2,147,483,647까지입니다.
  2. 오프셋 계산에서 음수 발생:

    • uint32_t 타입의 변수에서 음수가 나타나게 되면, 이는 2의 보수로 처리되어 32비트 최대값 근처의 값을 얻게 됩니다. 이는 부호 없는 정수 특성 때문에 발생합니다.
    • 만약 음수 값을 정확히 처리해야 한다면, int32_t 타입을 사용하는 것을 고려해야 합니다. 이는 음수 값도 올바르게 표현할 수 있기 때문입니다.

실무 환경에서의 고려 사항

  • 정확한 계산 및 해석: 실무에서는 데이터의 정확한 해석이 매우 중요합니다. 오프셋 계산이나 센서 데이터의 해석이 잘못되면 시스템의 오작동으로 이어질 수 있으므로, 음수 값의 처리에 의존하는 경우 int32_t를 사용하는 것이 안전합니다.

  • 디버깅의 용이성: 변수가 무조건적으로 최대치로 설정될 경우, 시스템 디버깅 시 예상하지 못한 문제를 야기할 수 있습니다. 이는 특히 로그 분석이나 버그 추적 시에 영향을 미칠 수 있습니다.

추천 사항

만약 오프셋 계산 중 음수가 발생할 가능성이 있거나 이를 고려해야 하는 경우라면, int32_t로 변수 타입을 설정하여 음수 값도 정확히 반영되도록 하는 것을 추천드립니다. 이렇게 하면 계산과 디버깅 모두 더 명확해집니다.

관련하여 더 깊이 있는 이해를 원하시면, 강의 포럼에 유사한 문제를 다룬 토론이 있는지 찾아보시거나 추가 문제를 제기하실 수도 있습니다. 임베디드 실전 프로젝트 관련 질문 게시판에서 학습자들과 다양한 의견을 나누어 보세요.

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

김병희님의 프로필 이미지
김병희

작성한 질문수

질문하기