임베디드 시스템과 펌웨어

MMU가 없는 작은 마이크로컨트롤러에서 스택 과다 사용에 대해 주의해야 할 점으로 올바른 것은 무엇입니까?

  1. A스택은 자동으로 얼마든지 커지므로 신경 쓰지 않아도 된다
  2. B스택이 넘치면 반드시 오류 화면이 표시된다
  3. C스택이 넘쳐도 즉시 검출되지 않고 이웃한 데이터를 조용히 망가뜨릴 수 있으므로, 깊은 재귀나 큰 지역 배열을 피하고 사용량을 추정한다
정답과 해설 보기

정답: C. 스택이 넘쳐도 즉시 검출되지 않고 이웃한 데이터를 조용히 망가뜨릴 수 있으므로, 깊은 재귀나 큰 지역 배열을 피하고 사용량을 추정한다

PC의 OS에서는 스택 끝에 접근 금지 페이지를 두어 오버플로를 검출할 수 있지만, MMU가 없는 마이크로컨트롤러에는 그런 구조가 없는 경우가 많아, 스택이 넘치면 그 앞에 있는 변수 등을 조용히 덮어씁니다. 증상이 다른 곳에 나타나므로 원인을 찾기 어려워집니다. 깊은 재귀나 큰 지역 배열을 피하고, 도구로 최대 사용량을 추정하거나, 스택 끝에 표식을 써 두고 손상되지 않았는지 검사합니다.

이 분야 연습하기 분야로 돌아가기

임베디드 시스템과 펌웨어의 다른 문제

  1. 기준 전압 3.3 V인 12비트 AD 컨버터에서 읽은 값이 2048이었습니다. 입력 전압에 가장 가까운 것은 무엇입니까?
  2. 마이크로컨트롤러에서 AD 컨버터의 변환 결과를 일정한 간격으로 대량으로 가져올 때 DMA를 사용하는 이점으로 올바른 것은 무엇입니까?
  3. C 언어의 비트 필드를 사용한 구조체로 주변 회로의 레지스터를 나타낼 때 주의가 필요한 점으로 올바른 것은 무엇입니까?
  4. 많은 마이크로컨트롤러에서 변경하지 않는 큰 테이블(폰트 데이터 등)을 const를 붙여 선언하는 이점으로 올바른 것은 무엇입니까?
  5. JTAG나 SWD 같은 디버그용 인터페이스로 할 수 있는 것으로 올바른 것은 무엇입니까?

이 분야의 비교