배너
닫기

테크노트

배너

[기고] 멀티 코어 디버깅

  • 등록 2019.02.25 10:23:05
URL복사

[첨단 헬로티]


MCU를 사용하는 임베디드 시스템 제품의 성능 요구사항이 높아지고 기능이 복잡해짐으로 임베디드 시스템을 제어하는 MCU의 성능또한 요구사항이 높아지고 있습니다. 이에따라 MCU의 제조사에서 MCU를 다양한 방법으로 성능 개선을 하고 있습니다. 

성능 향상의 방법으로 동작 클럭를 높이는 방법은 에너지 소비율, 발열 등의 문제가 따르므로 하나의 MCU에 멀티 코어를 사용하는 방법이 많이 검토되고 있습니다. 멀티 코어, 다시말해 여러개의 코어를 하나의 MCU에 사용하는 경우 성능을 높이며 에너지 소비율, 발열 등의 감소에 많은 이점이 있습니다. 이러한 멀티 코어의 MCU를 사용하는 경우 소프트웨어 개발과 디버깅 방법을 알아봅니다.


멀티 코어의 종류


1) 대칭 멀티 코어 디버깅(SYMMETRIC MULTICORE DEBUGGING)

대칭 멀티 코어 디버깅은  하나의 MCU 디바이스에 두 개 이상의 동일한 코어를 가지고 있는디바이스를 말하며, 일반적으로 단일 디버그 프로브를 통해 액세스 할 수 있습니다.


대칭 멀티 코어 디버깅을 위한 특별한 기능으로 모든 응용 프로그램을 자동으로 시작하고 중지할 수 있으며, 서로 독립적으로 코어를 제어/실행할 수 있습니다. 또한 디버깅을 원하는 코어에 대해 별도 제어할 수 있습니다. 이때 편집기 및 디스 어셈블리, 레지스터, watch, Locals, Call Stack 윈도우 등이 함께 동작하게 됩니다. 코어 윈도우에는 사용 가능한 모든 코어의 목록을 표시하고 각 코어에 대한 실행 상태와 같은 정보를 제공합니다.


스택 윈도우는 전용 스택 섹션을 통해 각 코어에 대한 스택을 표시 할 수 있습니다. RTOS 지원은 별도의 멀티 코어 인식 플러그인(plugin)으로 가능하며, 일반적으로, 싱글 코어 플러그인처럼 동작하지만, 별도의 코어에서 여러 개의 활성 태스크를 처리 할 수 있습니다. 또한 플러그인은 선택한 태스크에 대한 스택을 표시할 스택 윈도우에 필요한 정보를 제공 할 수 있습니다.


2) 비대칭 멀티 코어 디버깅(ASYMMETRIC MULTICORE DEBUGGING)

비대칭 멀티 코어는 서로 다른 아키텍처를 기반으로 두 개 이상의 코어를 가지고 있는 것을 의미합니다. 코어 개수별 IDE 인스턴스가 사용되며, 각각 하나의 코어용으로 인스턴스가 만들어지고 프로젝트가 사용됩니다. 여러개의 IDE 인스턴스는 디버깅 세션을 시작 및 중지의 제어가 동기화되어 있으며, 각 인스턴스에서 코어들을 각각 제어 할 수 있습니다. 공유 메모리를 제외하고, 각 디버깅 세션은 자신의 코어에 대한 정보 (변수, 호출 스택 등)를 표시 할 수 있습니다.


수동으로 하나의 IDE 인스턴스를 시작하고 이 인스턴스가 마스터로 간주됩니다. 비대칭 멀티 코어 디버깅 세션을 시작하면, 마스터는 다른 인스턴스(슬레이브)를 시작합니다. 슬레이브(slave)가 이미 실행중인 경우 슬레이브 인스턴스는 그대로 사용됩니다.


마스터와 슬레이브는 각각의 프로젝트가 필요합니다. 프로세서 종류, 링커, 디버거 등의 옵션들을 각각 프로젝트에서 설정해야 합니다. 마스터 프로젝트는 멀티 코어 마스터 역할 또는 멀티 코어 마스터 모드를 활성화하도록 설정해야 합니다.


다운로드에 있어서는 하나에 코어의 이미지를 결합하고 마스터 프로젝트가 결합된 이미지를 다운로드 할 수 있도록 하는 것입니다. 이 시나리오에서 슬레이브는 다운로드를 방지하기 위해 사용하는 대상에 연결하도록 구성해야 합니다 (attach to running target).


비대칭 멀티 코어 디버깅에 대한 특별한 기능으로 모든 응용 프로그램을 자동으로 시작하고 중지할 수 있으며, 각각의 코어를 별도 실행할 수 있습니다. 자동으로 시작하고 모든 응용 프로그램을 중지하거나 서로 독립적으로 코어를 실행할지 여부에 대해 제어 할 수 있습니다.


각 IDE 인스턴스는 접속되어 있는 코어에 대한 디버그 정보를 표시합니다. 코어 윈도우에 사용 가능한 모든 코어의 목록을 표시하고 각 코어에 대한 실행 상태와 같은 정보를 제공합니다. 하나의 코어만 브레이크 포인트가 연결되어 있고 브레이크 포인트가 트리거되면 해당 코어는 멈추게 됩니다.


멀티 코어 디버깅을 위한 요구 사항 및 제한 사항

C-SPY 시뮬레이터는 멀티 코어 디버깅을 지원하며 구체적인 요구 사항이나 제한이 없습니다. 

하드웨어 디버거 시스템에서 멀티 코어 디버깅을 사용하려면, C-SPY 드라이버 및 디버그 프로브의 특정 조합이 필요합니다.

 I-jet, JTAGjet, 또는 JTAGjet-Trace debug probe 사용

참고: 사용하고 있는 하드웨어의 한계 때문에 Trace 기능 지원에 제한적 일 수 있습니다.


멀티 코어의 디버깅 방법


1) 대칭 멀티 코어 디버깅 설정

① Project > Options > Debugger> Multicore를 선택하고 사용하는 코어의 수를 지정하십시오.

② 대칭 멀티 코어 디버깅이 가능합니다.


2) 비대칭 멀티 코어 디버깅 설정

① 하나의 워크스페이스(workspace)에 각 코어에 대한 여러개의 프로젝트를 만듭니다.

② 마스와 슬레이브 프로젝트로 구분되며 다음과 같이 설정합니다.

   - 마스터 프로젝트에서는 Project>Options>Debugger>Multicore 를 선택하고 Enable multicore master mode를 선택합니다. 슬레이브 세션을 시작할 때 사용할 워크스페이스 경로, 프로젝트 이름 및 구성 이름(configuration name)을 지정합니다. 그리고 Attach slave to running target 을 선택하고 슬레이브 코어 개수를 입력합니다.


   - Project > Options > C-SPY driver > Setup을 선택하고, 마스터 모드 프로젝트는 일반적으로 Hardware Reset 설정으로 선택합니다. 슬레이브 프로젝트는 일반적으로 Software Reset으로 설정합니다

③ 두 프로젝트에 대한 디버그 프로브의 호환되는 설정을 사용해야 합니다.

④ 마스터와 슬레이브 인스턴스는 메인 윈도우 제목 표시 줄에 표시됩니다.


3) 멀티 코어 디버그 세션의 시작 및 중지

- 멀티 코어 디버그 세션을 시작하려면, 예를 들어, 마스터 또는 슬레이브 세션 중에서 표준 다운로드 및 디버그 명령을 사용합니다.

- 멀티 코어 디버그 세션을 중지하려면, 예를 들어, 두 디버깅 세션을 정지하는 표준 디버깅 중지 명령을 사용합니다.


멀티 코어 디버깅에 대한 참조 정보


1) 코어 윈도우(Cores window)

멀티 코어 디버깅을 사용하도록 설정 한 경우 코어 윈도우는 View 메뉴에서 사용할 수 있습니다. 


이 윈도우는 사용 가능한 모든 코어의 목록을 표시하고, 각 코어에 대해 실행 상태와 같은 정보를 제공합니다. 굵은 글씨로 강조된 라인은 현재 포커스가 있는 코어이며 코어에 대한  특정 정보를 표시하는 윈도우에 코어의 상태를 반영하기 위해 업데이트됩니다. 편집기, 디스어셈블리, 레지스터, Watch, Locals, Call Stack 윈도우 등에서 강조 부분이 포함됩니다.  코어에서 포커스하는 라인을 두 번 클릭 하십시오.


참고 : 비대칭 멀티 코어 디버깅인 경우 로컬 코어만이 초점이 될 수 있습니다.

두 개의 코어가 실행되고, 그 중 어느 하나가 중단점 (또는 프로그램 실행을 멈추게 하는 어떤 상태)을 만나게 될 경우엔 디버거는 자동으로 그 코어에 초점을 둡니다.


2) 요구 사항

An I-jet, JTAGjet, or JTAGjet-Trace 디버그 프로브.


3) 표시 내용

이 영역의 각 행은 코어 중 하나에 대한 정보를 표시하고 컬럼의 내용은 다음과 같습니다.

Execution status(실행 상태)

코어의 실행 상태를 표시하기 위해 다음의 아이콘 중 하나를 표시합니다. 


Core : 코어의 이름.

Status : 실행 상태를 표시합니다. 정지, 실행, 또는 휴면(sleep) 중 하나가 될 수 있습니다.

PC : 프로그램 카운터(program counter)의 값.

Cycles : 싸이클 카운터(cycle counter)의 값.


4) 컨텍스트 메뉴(Context menu)

대칭 멀티 코어 디버깅에 있어 다음의 컨텍스트 메뉴를 사용하실 수 있습니다. 

아래 명령들을 사용할 수 있습니다.

- Start Core : 선택된 코어를 시작시킵니다.

- Stop Core : 선택된 코어를 멈춥니다.

- Focus on Core (also double-click) : 선택된 코어의 정모를 표시합니다.

- Run/Step/Stop affect all cores : 모든 코어에 Run, Step, Stop 명령이 실행됩니다.

- Run/Step/Stop affect current core only : 현재 코어 만이 Run/Step/Stop 명령이 실행됩니다. 이 메뉴 명령어는 사용하시는 디바이스에서 지원되어야 사용하실 수 있습니다.

참고 : 이 명령은 모든 타겟 하드웨어에서 지원되지 않습니다.


5) 코어 툴바(Cores toolbar)

멀티 코어 디버깅을 사용하도록 설정한 경우 코어 툴바는 View 메뉴에서 사용할 수 있습니다. 


이 도구 모음을 보완하고 코어 윈도우와 동일한 상태를 나타냅니다. 각 코어는 인접한 드롭 다운 메뉴 버튼이 있습니다. 그 코어에 대해 C-SPY 포커스를 하기 위해 버튼을 클릭하십시오.

참고 : 비대칭 멀티 코어 디버깅의 경우 관련된 디버깅 세션에서 코어를 시작하고 중지하는 도구 모음 명령을 사용할 수 있습니다.


맺음말

점점 소형화되고 다양한 기능의 추가가 요구되는 요즘의 임베디드 시스템에 사용되는 MCU또한 많은 성능 향상의 요구사항이 있습니다. 다양한 방법으로 MCU의 성능 향상의 방법이 있지만 그 중 여러개의 코어를 사용하는 멀티코어를 사용하는 방법이 많이 검토됩니다. 멀티 코어를 사용하는 경우 좀 더 효과적으로 디버깅 할 수 있도록 IAR Embedded Workbench의 기능을 활용하십시오.


글 / 이현도 IAR 시스템즈(IAR Systems) 기술지원팀 과장



















주요파트너/추천기업