사이트맵 보기

활용사례

[이벤트 - 디버깅 경험 수상작] NV 디버깅 과 Reset

작성자 관리자

조회수 6849

첨부파일
* 문제점 및 증상

NV(Non-volatile) 관련 작업 중 Item을 추가한 후 Host 에서 명령을 내리면, NV Read/Write는 정상적으로 이루어지지만 개발 폰이 정상적으로 동작하지 않는 문제로 인해서 몇 일 동안 소스코드만 보고 디버깅 작업하였습니다.



또한 폰 개발 중 특정 곡만 다운 받으면 폰이 Reset 되는 현상이 발생하는 경우가 있었습니다.



* TRACE32로의 접근 방법(디버깅)





TRACE32를 통해 선언된 변수의 ENUM 값을 확인하고 디버깅을 해보니 특정 라인에서 ENUM의 Index를 잘못 주어서 폰이 동작하지 않았음을 발견할 수 있었습니다. 이를 수정한 이후에는 폰이 정상적으로 동작하였습니다.





TRACE32로 Exception Handler에 Breakpoint를 설정 후에 Running해 보았습니다. LR(R14)값이 유효했으므로 R14를 이용해서 역으로 계속 추적하면서 디버깅을 하였더니 특정 곡을 다운한 후에 메모리가 이상해지는 현상을 발견할 수 있었습니다.



특정 함수에 조건부 Breakpoint를 설정(자주 들어오는 함수로 인해서)하여 빠른 시간에 문제의 지점에 접근하였고, 결국 다운로딩 할 때 내부 Queue에서 메모리를 alloc/free 과정에서 Index 가 꼬이는 현상으로 리셋이 발생하는 것을 찾았습니다.



* 결론

TRACE32에서는 선언된 ENUM 값을 문자와 Index를 동시에 보여주므로, ENUM 값을 확인할 때 번거로운 작업을 쉽고 편리하게 해줍니다. 또한 ENUM 값의 내용을 파일로 저장 또는 출력해주는 기능까지 가지고 있어 유용하게 사용하고 있습니다.



그리고 TRACE32는 찾기 힘든 Reset 문제를 잡을 수 있는 유일한 솔루션이라고 생각합니다. 특히 Reset 문제의 경우 우리 회사에서 만든 코드가 아니었음에도 불구하고 TRACE32를 이용하여 쉽게 오류를 찾아 낼 수 있었습니다.
고객문의 기술지원/
데모/
SW요청
031-627-
3116