inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

바닥부터 시작하는 STM32 드론 개발의 모든 것

4-2. i-Bus 메시지 분석 및 체크섬 검사

인터럽트안에서 변수처리

593

젓인

작성한 질문수 158

1

18분 즈음에 cnt 변수 선언할 때 static 변수는 volatile 같은 키워드는 생략해도 될까요?? 대부분 volatile은 생략하는데 왜 그러신거죠??

드론-개발 iot

답변 3

1

ChrisP

지역변수의 경우엔 큰 문제가 되지 않는것 같습니다.

더 확실하게 확인하시려면 컴파일러 최적화 옵션에 따른 기계어 번역 결과를 보셔야 하는데 어셈블리어를 이해하기는 쉽지 않을 겁니다. 사실 저 역시도 어셈블리어를 보면서 분석하진 않습니다.

volatile을 붙이면 아무래도 덜 위험하지 않을까 싶긴 합니다.

한번 volatile을 붙여서 해보세요!

1

젓인

static도 정적변수로 함수 내에서 선언되어도 volatile 없이는 취약하지 않나요?

1

ChrisP

함수 내에서 선언된 지역변수의 경우는 volatile을 생략해도 괜찮을 겁니다.

문제는 전역변수인데 그 값이 인터럽트 함수 내에서 변하는 경우입니다.

그 경우 컴파일러가 최적화 옵션에 따라서 그 변수의 값을 임의로 바꾸지 않는 경우가 있습니다 (코드상으로는 바꾸도록 잘 작성했는데도 말이죠)

그래서 그런 전역변수의 경우 앞에 volatile 키워드를 붙여서 컴파일러가 임의로 최적화 시키는걸 방지합니다.

최적화 옵션이 -0(none)으로 되어있으면 큰 문제없이 잘 동작하는데 그 외의 경우 이상하게 동작하는 경우는 변수 앞에 volatile을 붙여주시면 됩니다.

사실 인터럽트 안에서 값이 변하는 모든 지역변수 앞에 volatile을 붙여주는 편이 안전하겠지요.

비행승인 문의드립니다

0

37

0

드론의 M4 모터가 느리게 작동합니다.

0

63

2

STM32CubeIDE 관련해서 질문이 있습니다.

0

91

2

while문 루프 속도

0

60

2

변수 선언

0

51

2

FS-i6를 꺼도 LED 토글되는 이유

0

67

2

Fs-i6 i-bus 수신 데이터 이상

0

109

3

3-4. UBX 위도 경도 정보 Terminal에서 깨짐 현상

0

88

2

3-4. LED 토글 안됨

0

50

1

3-1. M8N GPS 강의 통신 연결 관련 문의

0

78

1

2-3. LPS22HH 강의 수행값이 아두이노 IDE Plotter 및 Terminal에서 인식 안됨

0

77

2

6-4 SwC 2000

0

104

2

6-4 ESC Calibration

0

68

1

esc, 모터 교체

0

111

2

부저 소리가 안납니다.

0

134

2

비행 질문

0

63

1

7-5. offset

0

75

2

sysmem.c

0

75

2

전체 제어의 주기를 1KHz로 설정한 이유가 궁금합니다.

0

89

2

부품 구매 관련 문의

0

65

1

PID 게인 문제

0

84

3

3d telemetry cp210x 연결

0

122

2

8-1. 3DR Telemetry HAL_UART_Receive_IT(&huart1, &uart1_rx_data, 1); 관련 문의

0

71

2

PID제어 질문

0

124

2