인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

chltnckd7님의 프로필 이미지
chltnckd7

작성한 질문수

ARM Cortex-M 프로세서 프로그래밍

s704_원자적 액세스의 필요성 GPIO_BSRR

s704 원자적 엑세스 질문드립니다.

작성

·

237

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

안녕하세요. 잘 이해되지 않는 부분이 있어 질문드립니다.

Q1)ODR에 읽은 값을 다시 쓰는 동작이 아니라서 BSRR에 값을 써주기만 하면 LED가 꺼지기 때문에 비원자적 엑세스처럼 하나의 레지스터에 값이 꼬일 일이 없으니까정상 동작 할 수 있다고 이해했는데 맞나요?

Q2)강의 1분30 ~ 1분 40초 구간에서 bsrr에 쓰기 동작을 하기 전에 인터럽트가 발생할 일이 없다고 하셨는데 인터럽트가 중간에 발생할 수는 있지 않나요?

감사합니다.

 

 

답변 1

1

홍영기님의 프로필 이미지
홍영기
지식공유자

안녕하세요. chltnckd7 님!

Q1)ODR에 읽은 값을 다시 쓰는 동작이 아니라서 BSRR에 값을 써주기만 하면 LED가 꺼지기 때문에 비원자적 엑세스처럼 하나의 레지스터에 값이 꼬일 일이 없으니까정상 동작 할 수 있다고 이해했는데 맞나요?

ANS. 그렇습니다. 메모리나 하드웨어 레지스터의 값을 변경하기 위해서는 영상에서 말씀드렸던 것처럼 R-M-W 동작이 완성되어야 하죠. 하지만 BSRR 은 쓰기(W) 동작 만으로 연산이 완료될 수 있기 때문에 원자적 액세스 입니다.

Q2)강의 1분30 ~ 1분 40초 구간에서 bsrr에 쓰기 동작을 하기 전에 인터럽트가 발생할 일이 없다고 하셨는데 인터럽트가 중간에 발생할 수는 있지 않나요?

ANS. 인터럽트가 발생하지 않는다는 뜻이 아니고, 인터럽트가 발생하면 이미 실행 중이던 명령어(INSTRUCTION) 는 실행을 마치고 인터럽트 핸들러로 진입합니다. 이렇게 내용을 이해하시면 좋겠습니다.

예를들어 아래와 같은 쓰레드 코드가 있다고 했을 때 148번지의 STR 명령어 실행을 마치고 인터럽트 핸들러를 실행하겠죠. 인터럽트 핸들러를 실행한 이후에 14A번지 이후의 코드를 실행하게 됩니다.

@ r2에는 BSRR 의 주소가 저장되어 있다

08000148 STR r0, [r2] <-- 이 시기에 인터럽트가 발생했다고 가정
0800014A LDR r3, [r1]

 

chltnckd7님의 프로필 이미지
chltnckd7
질문자

아 넵 자세한 설명 감사드립니다!

chltnckd7님의 프로필 이미지
chltnckd7

작성한 질문수

질문하기