'DV Crane'에 해당되는 글 1건

  1. [2008/01/11] [AVR][ATmega8535] Out of Memory (2)

[AVR][ATmega8535] Out of Memory

[Embedded/AVR]
복학 이후 귀차니즘에 빠진 본인이
두 번의 학기와 두 번의 방학을 보내고 나니 퇴직금도 모아놓은 돈도 모두 바닥을 보이고
머나먼 선배들로부터 이어져 온 알바 하나 이외에는 일체 손대지 않는 생활을 해 온지 1년이 되어간다.

알바 내용을 간략히 소개하면 지미짚 또는 DV 크레인이라 불리는 장비의 컨트롤 보드를 제작하는 것인데,
간만에 설계 변경이 들어와서 납땜이 아닌 다른 작업을 빡시게 하게 되었다.

토픽에 그리 중요한 연관성이 있지는 않으나
개발환경은 다음과 같다.

Windows XP SP2
AVR Studio 4.12 + SP1 + SP2
WinAVR-20071221

좌측 상단의 박스는 두 축의 방향과 속력를 저장하는 구조체를 선언을 붙여놓은 것이고,
2번은 해당 데이터의 히스토리를 저장하기 버퍼이며 간단한 방법을 통해 링버퍼로 활용한다.

문제의 발단은 응답성 조절 기능 추가에 관한 것이었다.
해결방안으로 링버퍼를 이용해 히스토리를 저장한 후
입력 값을 시간 오프셋으로 변환하여 과거의 상태값을 불러내어 적용하는 것으로 확정...

먼저 하드 리팩토링(코드의 80%를 들어냈다.)을 통해
메모리 사용을 최대한 줄여버리고 버퍼 크기를 50까지 확보 했었다.

그러나 동작 불능...
버퍼는 유지한 채로 링버퍼 구현을 전부 다 띠어내니 동작... -_-;;
계속되는 작업을 통해 최후의 일격 1번 코드와의 싸움만 남겨놓았다.
1번 코드의 offset을 0으로 유지하면 반응이 오긴 오는데 연산식을 넣으면 다시 동작불능...

그러다가 3번의 메모리 사용량을 본 후 문득 생각이 스쳤다.
Windows XP도 메모리 페이징을 위해 시스템 하드의 85%까지만 사용하기를 권장하는데...
혹시 이놈도?

결국 버퍼 크기를 30까지 낮추니 동작... -_-;;
코드를 5번이나 갈아버리고 하루밤을 꼬박 샌 이유가... 하~

최종 확인 끝에 기본 RAM 사용비율이 80%를 넘어가면 프로세서가 정지한다.
결론은 'Out of Memory == 내 기억력은 금붕어' 되시겠다.
좀 더 정확히는 함수 스택 부족이라고 해야하나...

결론은 메모리 사용량을 항상 확인하고
가능하면 메모리가 넉넉한 놈을 사용할 것~!!

참고로 ATmega8535의 SRAM은 512byte... ㄷㄷㄷ
2008/01/11 08:44 2008/01/11 08:44