메모리와 레지스터를 저장 및 복원하는 C-SPY 매크로

기술노트 24166

아키텍처:

All

컴포넌트:

debugger

업데이트:

2021-05-18 오전 9:23

소개

디버깅을 보다 효율적으로 수행하기 위해 타겟(target)에서 메모리 혹은 레지스터를 저장해야 하는 경우 본 기술 노트를 참조하세요. 제공하는 예시는 Freescale 6812를 위한 것이지만, 적절하게 적용한다면 다른 칩에서도 사용할 수 있는 기법이 될것입니다.

이 매크로파일 예시에서는 간단한 hex 파일로 어떻게 레지스터와 메모리 셀의 범위를 저장할 수 있는지 방법이 나와있습니다. "c:\test.hex"로 이름 지어진 파일이 있습니다, 사용하기 편하신 대로 임의로 이름을 변경하시면 됩니다. - 저장, 복원할 때 동일한 이름을 사용해야 합니다.
또한, 편의를 위해, "Project -> Options -> C-SPY -> Setup file"에 이 파일을 명시하십시오. 그렇게 하면 C-SPY를 매번 시작할 때마다 로드될 것입니다. "Control -> Quick Watch" 대화상자(dialog)에서 매크로를 불러올 수 있습니다. - 매크로의 이름을 지정하세요, 이를 테면 memory_save() 그리고 return을 누르거나 "Recalculate"를 클릭합니다. "Add Watch"는 선택하지 마시길 바랍니다. "Add Watch"는 감시(watch)가 업데이트 될 때마다 매크로가 실행될 것입니다.

더 자세한 정보를 드리자면, 그 파일은 먼저 몇가지 변수들을 정의합니다. (빠른 보기 대화상자(quick watch dialog)에서 이것에 대해 접근할 수 있습니다) 가장 흥미로운 변수들은 mem_begin과 mem_end입니다. - 저장 및 복원할 메모리 범위를 지정하는데 사용됩니다. 이를 여러 범위로 확장하는 것은 간단해야 합니다.

여기 메모리 저장 함수가 있습니다:

  • 작성을 위해 파일을 엽니다. ("C:\test.hex")
  • 파일에 report 창에 표시되어 있는 레지스터 값을 저장합니다.
  • mem-begin과 mem_end을 파일에 저장합니다.
  • mem_begin부터 mem_end 까지의 메모리 내용을 저장합니다.

다음과 같이 시작하는 몇 라인이 있습니다

// Optional register:

필요한 경우에만 PP 레지스터를 저장/복원할 수 있도록 하기 위한 것입니다. (예: banking 사용시) 메모리 읽기 함수는 기본적으로 역함수이므로, 매우 간단합니다.

마지막으로 execUserSetup()은 mem_begin과 mem_end의 값이 어디에 정의되어 있는지 나타냅니다. 이 이름으로 매크로가 있으면, 타겟 프로그램(target program)이 다운로드된 후 자동으로 한 번 호출됩니다.
C-SPY 문서를 통해 비슷한 매크로에 대한 자세한 정보를 참조하세요.

추가 매크로

파일 이름을 지정할 수 있는 매크로에 대한 추가 예제가(매크로 소스를 업데이트 할 필요가 없는) 있습니다.

QuickWatch 명령줄에 입력하여 변수 내용을 이진형식으로 덤프하는 명령 예제:

DumpMem("dumpmem.bin", &trace_buffer, sizeof(trace_buffer))

QuickWatch 명령줄에 입력하여 ARM 레지스터 내용을 이진형식으로 덤프하는 명령 예제:

DumpReg("dumpreg.txt")

NOTE DumpReg

관심을 가지고 있는 주소을 위해 int형의 크기가 너무 작다면, (int)형 대신 (long)형으로 형변환을 시도해보세요.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.