변수와표현식 (Variables and expressions) 변수와표현식을 C-SPY 에서사용할수있는방법에대해설명합니다. 1. 변수와표현식작업소개 변수와표현식에대해알아보고 C-SPY 에서표현식및변수의제한사항에대해살펴봅니다. 1.1 C-SPY 표현식 C-SPY 표현식은함수호출을제외하고 C 표현식의모든종류를포함할수있습니다. 심볼의이러한유형으로미리작성된표현식을 C-SPY 표현식이라고말하며, C-SPY 에서이러한내용을모니터링하기위한여러가지방법이있습니다. 유효한 C-SPY 표현식의예제입니다. i + j, i = 42, myvar = cvar, cvar = myvar + 2, #asm_label, #R2, #PC, my_macro_func(19) 서로다른함수에서같은이름으로정의된정적변수가있는경우모니터할변수를지정하기위해 function::variable 표기법을사용합니다. C/C++ 심볼 C 심볼은응용프로그램의 C 소스코드에서정의한심볼이며, 예를들어인스턴스변수, 상수및함수 ( 함수는심볼로사용할수있지만실행될수는없습니다.) C 심볼들은이름에의해참조될수있습니다. 어셈블러심볼어셈블러심볼은어셈블러레이블이나레지스터가될수있습니다. 예를들어프로그램카운터, 스택포인터, 또는다른 CPU 레지스터들입니다. # 을접두어로하는경우어셈블러심볼은 C-SPY 표현식에서사용할수있습니다. Example #PC++ myvar = #SP myvar = #label 동작설명프로그램카운터의값증가 C-SPY 변수에스택포인터레지스터의현재값을지정 label 의어드레스를정수값으로 myvar 설정 myptr = #label7 표 1 : C-SPY 어셈블러심볼표현 label7 의어드레스를 int * 포인터값으로 myptr 설정 C-SPY 매크로함수 매크로함수는 C-SPY 매크로변수정의와매크로가호출될때실행되는매크로문장으로 구성되어있습니다.
Page 2 C-SPY 매크로변수매크로변수는응용프로그램의외부에서정의되고할당되며, 그리고 C-SPY 표현식에서사용할수있습니다. C 심볼과 C-SPY 매크로사이에이름충돌의경우 C-SPY 매크로변수는 C 변수보다우선순위가높습니다. 매크로변수의할당은값과타입을모두지정합니다. sizeof 사용표준 C 에따르면, 두가지구문형태가있습니다 sizeof(type) sizeof expr 1.2 VARIABLE 정보에대한제한사항 C 변수의값은스텝포인트에서만유효합니다. 즉, 문 (statement) 의첫번째명령어이거나함수 호출상태에서입니다. 이것은편집기창에서밝은녹색강조표시색상으로표시됩니다. 최적화의효과컴파일러는응용프로그램소프트웨어를최적화하는데무료입니다. 최적화는코드에영향을미칠수있으므로디버깅을더욱어렵게만들수있습니다. 소스코드와생성된코드간의관계가덜명확하기때문입니다. 일반적으로, 높은최적화수준을사용하면, 예상대로변수의값을볼수없는상황으로코드에영향을줄수있습니다. 다음예제를살펴보십시오. myfunction() { int i = 42;... x = computer(i); /* Here, the value of i is known to C-SPY */... } 변수 i 가선언되고실제로사용되기전까지컴파일러는스택이나레지스터를낭비하지하지않습니다. 컴파일러가최적화를할수있으며, 이는 C-SPY 에서실제로사용되기전까지는값을표시할수없습니다. 임시적으로사용할수없는변수의값을보려한다면, C-SPY 는 Unavailable 라는문구를표시합니다. 디버깅기간중에변수의값에대한자세한정보가필요하면, 컴파일동안가장낮은최적화단계인 None 을사용하십시오. 2. 변수와표현식사용 변수와표현식을사용하는것과관련된다양한작업에대해설명합니다. 2.1 변수와표현식에관련된윈도우사용하기 표현식들을추가, 수정및제거할수있고변수와표현식에관련된윈도우들의표시형식을 변경할수있습니다.
Page 3 값을추가하려면점선사각형을클릭하고검사를원하는표현식을입력할수있습니다. 표현식의값을수정하려면값 (Value) 필드를클릭하고그내용을수정합니다. 표현식을제거하려면항목을선택하고 Delete 키를누릅니다. Trace 윈도우를제외한이러한윈도우들은열에서너무큰폭의텍스트에대해서는가리게되며, 마우스포인터를그텍스트에놓은면툴팁정보로표시됩니다. 추가적인명령을포함하고있는문맥메뉴 (context menu) 를액세스하기위해윈도우에서마우스오른쪽버튼을클릭하십시오. Locals 윈도우, Data logging 윈도우, 그리고 Quick Watch 윈도우를제외하고윈도우사이의편리한드래그앤드롭이지원됩니다. 2.2 어셈블러변수보기 어셈블러레이블은전혀형식정보를전달하지않습니다. 즉, C-SPY 가별도의정보없이레이블에있는데이터를쉽게표시할수없습니다. 편리하게데이터를보기위해 C-SPY 는기본적으로어셈블러레이블에있는모든데이터를 int 형의변수로취급합니다. 하지만, Watch, Quick watch, 그리고 Live Watch 윈도우에서좀더변수의선언에맞게다른해석을선택할수있습니다. 이그림에서는 Watch 윈도우에서네개의변수와왼쪽의어셈블러소스파일에해당되는선언을볼수있습니다. 그림 1 : Watch 윈도우에서어셈블러변수보기 2.3 데이터로그 (Data Log) 를사용하기 1 데이터로그를설정하려면, C-SPY 드라이버 > SWO 구성을선택합니다. 대화상자에서 추적 (trace) 데이터에대한 serial-wire output 통신채널을설정합니다. 특히 CPU 클럭옵션을주의하십시오. 2 중단점또는메모리윈도우에서중단점대화상자를열기위해마우스오른쪽버튼을클릭하고 New Breakpoints>Data Log 를선택합니다. 로그정보를수집하려면 Data Log breakpoint 를설정하십시오. 4 개까지 Data Log breakpoint 를설정하실수있습니다. 3 데이터로그윈도우를열려면 C-SPY driver>data Log 를선택하십시오. 선택적으로, 또한다음에서선택할수있습니다. Data Log Summary 윈도우를열려면 C-SPY driver>data Log Summary Data Log Graph 를보기위해 Timeline 윈도우를열려면 C-SPY driver>timeline 4 데이터로그창에서사용할수있는컨텍스트메뉴에서로그활성화를위해 Enable 을선택합니다.
Page 4 5 SWO Configuration 대화상자에서데이터로그가활성화되어있는데이터로그이벤트영역에나타날수있습니다. 원하는로그의수준을선택하십시오. PC only / PC + data value + base addr / Data value + exact addr C-SPY 시뮬레이터를사용하는경우이단계를무시할수있습니다. 6 로그정보를수집하기위해응용프로그램을실행하십시오. 7 데이터로그정보를보려면, 데이터로그, 데이터로그요약, 타임라인윈도우에서데이터그래프를살펴보십시오. 8 파일에로그또는요약을저장하려면윈도우에서문맥메뉴중 Save to log file 을선택하십시오. 9 데이터및인터럽트로그를사용하지않으려면각각의활성화한윈도우에서각문맥메뉴를호출하여 Disable 을선택하십시오. 2.4 이벤트로그 (Event Log) 사용하기 1 이벤트를생성할응용프로그램소스코드의위치를지정하려면 arm_itm.h(arm\inc\c 에위치 ) 에서미리정의된전처리매크로를사용하십시오. 응용프로그램소스코드에서다음과같이작성하십시오. #include <arm_itm.h> void func(void) { ITM_EVENT8_WITH_PC(1,25); ITM_EVENT32_WITH_PC(2, get_psp()); } 첫번째줄은채널 1 에값을 25 로이벤트를보냅니다. 두번째라인은채널 2 에스택포인터의현재값으로이벤트를보냅니다. 2 이벤트로그정보를보려면, 다음대안중하나를선택할수있습니다 : 타임라인윈도우를열기위해 C-SPY driver>timeline 을선택하시고 Event Log Graph 에서문맥메뉴중 Enable 을선택합니다. 이벤트로그윈도우를열기위해 C-SPY driver>event Log 선택하시고문맥메뉴에서 Enable 을선택하십시오. 이벤트로그요약윈도우를열기위해 C-SPY driver>event Log Summary 를선택하시고문맥메뉴에서 Enable 을선택하십시오. 3 표시형식을변경하려면 ( 값을 2 진수또는 10 진수형식으로표시하는것을선택할수있습니다 ) 타임라인윈도우에서형식을변경하기를원하는이벤트그래프를선택하십시오. 마우스오른쪽버튼을클릭하고문맥메뉴에서원하는형식을선택하십시오. 4 로그정보를수집하기위해응용프로그램을실행합니다. 5 이벤트로그정보를보려면이벤트로그, 이벤트로그요약, 또는타임라인창에서특정채널에대한이벤트그래프를보시면됩니다.. 6 파일에로그또는요약내용을저장하려면해당윈도우에서 Save to log file 을선택하십시오. 7 이벤트로깅을사용하지않으려면활성화되어있는각윈도우에서문맥메뉴중 Disable 을선택하십시오.
Page 5 3. 변수와표현식사용에대한참조정보 윈도우및대화상자에대한여러관련정보를제공합니다. 3.1 Auto 윈도우 Auto 윈도우는 view 메뉴에서사용할수있습니다. 이윈도우에서현재문안에서또는근처에서변수와표현식의선택된정보를표시합니다. C-SPY 에서실행이중지될때마다 Auto 윈도우의값들은다시계산됩니다. 마지막으로실행이중지된이후값이변경되었을경우에는빨간색으로강조표시됩니다. 그림 2 : Auto 윈도우 3.2 Locals 윈도우 Local 윈도우는 View 메뉴에서사용할수있습니다. 이윈도우는현재함수의지역변수와매개변수를표시합니다. C-SPY 에서실행이중지될때마다 Locals 윈도우의값들은다시계산됩니다. 마지막으로실행이중지된이후값이변경되었을경우에는빨간색으로강조표시됩니다. 그림 3 : Local 윈도우 3.3 Watch 윈도우 Watch 윈도우는 View 메뉴에서사용할수있습니다. C-SPY 표현식또는변수의값을모니터링하려면이윈도우를사용하십시오. 이윈도우는최대 4 개까지열수있으며, 표현식을추가, 수정및제거할수있습니다. 배열, 구조체, 그리고유니온 (union) 의트리구조는확장이가능하며, 각항목에대해조사할수있습니다. C-SPY 에서실행이중지될때마다 Locals 윈도우의값들은다시계산됩니다. 마지막으로실행이중지된이후값이변경되었을경우에는빨간색으로강조표시됩니다. 그림 4 : Watch 윈도우
Page 6 3.4 Live Watch 윈도우 Live Watch 윈도우는 View 메뉴에서사용할수있습니다. 이윈도우는반복적으로응용프로그램이실행하는동안표현식의값을수집하고표시합니다. 표현식에있는변수는전역변수처럼정적으로위치해야합니다. 이윈도우는이기능을지원하는하드웨어타겟시스템에서사용할수있습니다. 그림 5 : Live Watch 윈도우 3.5 Static 윈도우 Static 윈도우는 View 메뉴에서사용할수있습니다. 이윈도우는선택되어있는동안정적저장소기간의변수의값을표시합니다. 정적저장소기간에 volatile 로선언된변수들은표시되지않음을주의하십시오. 마지막으로실행이중지된이후값이변경되었을경우에는빨간색으로강조표시됩니다. 그림 6 : Static 윈도우 3.6 Macro Quicklaunch 윈도우 Macro Quicklaunch 윈도우는 View 메뉴에서사용할수있습니다. 일반적으로 C-SPY 매크로를평가하려면이윈도우를사용하십시오. Macro Quicklaunch 윈도우는빠른 Watch 윈도우와비슷하지만주로 C-SPY 매크로를평가하도록설계되었습니다. 이윈도우는표현식을평가하는경우정확한제어를할수있습니다. 그림 7 : Macro Quicklaunch 윈도우
Page 7 3.7 Quick Watch 윈도우 Quick Watch 윈도우는 View 메뉴또는편집기윈도우에서문맥메뉴에서도사용할수있습니다. 특정시점에서변수또는표현식의값을보거나표현식을평가하려면이윈도우를사용하십시오. Watch 윈도우와대조적으로, C-SPY 매크로함수와같은표현식에대해통제된조건하에서평가를수행할수있습니다. 그림 8 : Quick Watch 윈도우 3.8 Symbol 윈도우 심볼윈도우는 View 메뉴에서사용할수있습니다. 이윈도우는고정된위치를가진모든기호를표시합니다. 즉, C/C++ 함수, 어셈블러레이블과의심볼을포함한정적저장기간의변수들이며, 런타임라이브러리에서제공되는심볼도포함되어있습니다. 그림 9 : Symbol 윈도우 3.9 Data Log 윈도우 데이터로그윈도우는 C-SPY 드라이버메뉴에서사용할수있습니다. 최대 4 개까지서로다른 메모리위치또는영역에액서스를기록하려면이윈도우를사용하십시오. 그림 10 : Data Log 윈도우
Page 8 3.10 Data Log Summary 윈도우 데이터로그요약윈도우는 C-SPY 드라이버메뉴에서사용할수있습니다. 이윈도우는특정 메모리위치또는영역에접근하는데이터의요약된내용을표시합니다. 그림 11 : Data Log Summary 윈도우 3.11 Event Log 윈도우 이벤트로그윈도우는 C-SPY 드라이버메뉴에서사용할수있습니다. 응용프로그램코드에서특정위치를실행할때윈도우는이벤트로그의내용을표시합니다. Cortex-M ITM 통신채널들은실행중인응용프로그램에서 C-SPY Event Log 시스템으로이벤트로그를전달하는데사용됩니다. 그림 12 : Event Log 윈도우 3.12 Event Log Summary 윈도우 이벤트로그요약윈도우는 C-SPY 드라이버메뉴에서사용할수있습니다. 이윈도우는응용프로그램코드에서특정위치를실행할때이벤트로그의요약내용을표시합니다. Cortex ITM 통신채널들은 C-SPY 프로그램이벤트로그시스템으로실행중인응용프로그램에서이벤트로그를전달하는데사용됩니다. 그림 13 : Event Log Summary 윈도우