MDSTECH
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객지원
뉴스레터
Q&A
FAQ
원격지원
검색창
검색버튼
회원가입
로그인
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객 지원
뉴스레터
Q&A
FAQ
원격지원
사이트맵 보기
S/W 런타임 측정 문서 원본 보기
←
S/W 런타임 측정
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게만 가능합니다:
사용자
문서의 원본을 보거나 복사할 수 있습니다:
<p><span style="font-size: x-large;"><strong>1. </strong><strong>소개</strong></span></p> <p><span style="font-size: x-large;"><strong><br /></strong></span></p> <p><span style="font-size: large;"><strong>1.1. </strong><strong> Software Run Time </strong><strong>측정</strong></span></p> <p class="setextarea"> 개발된 SW 모듈의 성능을 판단하는 중요한 요소 중 하나는 SW의 실행 시간이다. 특히 안전과 관련된 기능(SW 모듈)들은 Worst Case시에도 문제 없이 SW기능이 동작되도록 설계 및 구현되어야 하기 때문에, 일반적으로 Run time을 필수로 측정하고 있다</p> <p class="setextarea"><br /> Run Time을 측정하기 위해 가장 많이 사용되는 방법 중 하나가 측정하고자 하는 SW의 Entry와 Exit 부분에 특정 Trigger를 발생시키는 코드를 삽입 한 후 이를 실행하여 측정하는 방법이다. 만약 HW GPIO를 Trigger 신호로 이용한다면, 오실로스코프와 같은 장비로 타이밍을 측정할 수 있다. 혹은 CPU 내부 Timer 레지스터를 이용한다면 특정 변수에 Run Time 값을 저장하게 한 후 변수 값을 관찰하여 타이밍 정보를 측정할 수 있다. 하지만 이러한 방법들은 타이밍 측정을 위한 코드가 삽입되기 때문에 발생되는 단점들이 있다.</p> <p class="setextarea">첫 번째로, 정확한 타이밍 측정이 어렵다. 장시간 측정하는 경우, 코드 삽입에 대한 타이밍 오차율이 거의 없지만 아주 짧은 코드에 대한 수행 시간을 측정하는 경우, 탐침 코드로 인해 발생되는 측정 오차가 클 수 있다.</p> <p class="setextarea"><br /> 두 번째로, 다양한 측정 Point를 설정하기 어렵고 불편하다. 예를 들어, GPIO를 사용하여 타이밍을 측정하는 경우, 사용할 수 있는 핀 개수가 제한적이기 때문에 다양한 측정 point를 동시에 측정하기 어렵고 이를 변경하려면 매번 ‘소스 코드 수정->컴파일->타겟 업로드->재연’ 과정을 거쳐야 한다.<br /> 세 번째로, 타이밍 오류가 발생되는 경우에 대한 디버깅이 어렵다. 타이밍 위반 사항을 발견했다고 하더라도 어떠한 경우(test case)에 문제가 발생되는지 디버깅 하는 것은 또 다른 문제다. 타이밍 측정과 디버깅에 필요한 정보를 추가로 저장하도록 코드를 수정한다면 이 또한 추가적인 CPU로드가 사용되므로, 정확한 타이밍 정보를 측정하는 것이 어렵게 된다.</p> <p class="setextarea"> </p> <p class="setextarea"> </p> <p class="setextarea"><span style="font-size: large;"><strong>1.2. </strong><strong>TRACE32</strong><strong>를 활용한 SW Runtime 측정 방식</strong><strong> </strong></span></p> <p class="setextarea">TRACE32는 기본적으로 SW 디버깅 목적으로 많이 사용되지만 SW 타이밍 측정도 TRACE32 기능들을 조합하여 구현이 가능하다.</p> <p style="text-align: left;"> <img src="/data/wiki/2017-09-08/1504847710.png" alt="" /></p> <p> <span style="color: #808080;"><그림 1> 1ms TASK의 주기 8회 측정 결과</span></p> <p class="setextarea"><그림 1> 은 1ms 마다 동작되는 TASK(function)의 실행 주기를 측정한 결과이다. 일관성 있고 정확한 측정 결과가 나오는 것을 볼 수 있다.</p> <p><a href="http://blog.naver.com/PostList.nhn?blogId=mdstec_auto&widgetTypeCall=true"> </a></p> <p> </p> <p> <img src="/data/wiki/2017-09-08/1504847800.png" alt="" /></p> <p> <span style="color: #808080;"> <그림 2> TRACE32를 활용한 Run Time 측정 방식</span></p> <p class="setextarea"> TRACE32 SW Run Time측정 기능의 동작 방식은 타이밍을 측정하고자 하는 곳에 trigger를 발생 시키도록 한다는 점에서 기존에 사용하던 GPIO 신호 측정 방식이나, 탐침 코드를 이용한 측정 방식과 비슷하다. 다른 점은 <그림 2>와 같이 실제로 측정을 원하는 시점에 break point를 활용하여 코어와 타이머 레지스터를 동시에 정지시킨 후 타이밍 정보를 측정하는 것이다. 따라서 TRACE32를 이용하면 위에서 언급한 방식으로 SW Run Time 측정 시 발생되는 단점 및 불편한 사항들을 개선할 수 있다.</p> <p class="setextarea"><br /> <span style="font-size: medium;"> <span style="white-space: pre;"> </span>1. <strong>정확성</strong>: 코어와 타이머 레지스터도 같이 정지 되기 때문에 정확한 Run time을 측정 가능</span><br /><span style="font-size: medium;"> <span style="white-space: pre;"> </span>2. <strong>편리성</strong>: HW pin연결, 코드 수정이 필요 없기 때문에(Break Point 활용) 원하는 SW Run time 정보를 바로 측정 가능</span><br /><span style="font-size: medium;"> <span style="white-space: pre;"> </span>3. <strong>디버깅</strong>: 만약 기준 Run Time을 초과하는 경우가 발생되면, 디버거는 바로 측정을 멈추고 현재 상황(Test Case)을 디버깅 가능</span></p> <p> </p> <p> </p> <p> </p> <p> </p> <p><span style="font-size: x-large;"><strong>2. </strong><strong>기능 사용 하기</strong></span></p> <p><span style="font-size: x-large;"><strong><br /></strong></span></p> <p><span style="font-size: large;"><strong>2.1. GUI </strong><strong>소개</strong></span></p> <p>실행 방법 : B::Do start_runtime_measure.cmm</p> <p>실행 하면 연결된 라이선스 모듈의 유지보수 기간을 체크 한다. 유지보수 기간이</p> <p>종료된 경우 ‘Run to NEXT Point’기능만 활용 가능하며 10회로 사용이 제한 됨</p> <p class="setextarea"> <img src="/data/wiki/2017-09-08/1504847955.png" alt="" /> <img src="/data/wiki/2017-09-08/1504847961.png" alt="" /></p> <p class="setextarea"><span style="color: #808080;"> <유지보수 기간 유효> <유지보수 기간 종료></span></p> <p class="setextarea"> </p> <p class="setextarea"><strong><span><span style="white-space: pre;"> </span>• </span>Timer Configuration – Timer Register Address</strong> : 타이밍 측정에 사용할 내부 타이머 레지스터 주소</p> <p class="setextarea"><strong><span><span style="white-space: pre;"> </span>• </span>Timer 1 Tick Time</strong> : Timer 1 tick 당 시간 정보</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>MAX Timer Value</strong> : 16bit or 32bit 선택, Max Timer 값 지정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Measuring Point – Run to Next Point</strong> : 현재 PC값부터 End point까지 실행 시간 측정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Cycle Run Time</strong> : Start Point에 설정된 함수의 실행 주기 측정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Interval Run Time</strong> : Start to End Point까지 실행 시간 측정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Start Point/End Point</strong> : Runtime 측정 할 함수 이름 또는 주소 값 입력</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Additional Setting – Set Test Count</strong> : 지정 된 횟수만큼 반복적으로 측정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Save Result to file</strong> : 측정 결과를 지정된 파일로 저장</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Check Timer </strong><strong>버튼</strong> : 설정된 타이머가 디버그 모드로 설정 되었는지 확인</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Start Measure </strong><strong>버튼</strong> : 타이머 설정이 올바르게 되었다면 버튼 활성화 됨 , Measuring Point에 설정된 SW Runtime 측정</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>Clear Result </strong><strong>버튼</strong> : 출력 창 메시지 clear</p> <p class="setextarea"><strong><strong><span style="white-space: pre;"> </span>• </strong>End </strong><strong>버튼</strong> : GUI 종료</p> <p> </p> <p>타이머 정보나, 타이머 설정을 자동으로 하고자 한다면 아래 파일에 필요한 정보를 입력한다.</p> <p>set_debug_mode.cmm : 내부 타이머를 debug 모드로 설정 하는 TRACE32 명령어로 사용하는 타이머에 따라서 주소와 write 값이 달라질 수 있다.</p> <p><img src="/data/wiki/2017-09-08/1504848147.png" alt="" /></p> <p> </p> <p>timer_info.txt : 타이머 레지스터의 주소나, 설정된 상태 정보를 입력</p> <p><img src="/data/wiki/2017-09-08/1504848158.png" alt="" /></p> <p> </p> <p> </p> <p> </p> <p><span style="font-size: large;"><strong>2.2. TRACE32 Run Time </strong><strong>측정 기능 사용 예제</strong></span></p> <p><strong>2.2.1. </strong><strong>부팅 시간 측정</strong></p> <p>- 현재 PC가 reset vector에 있고, StartOS함수가 호출 될 때까지의 run time을 측정해보는 예제</p> <p>- 타이밍 측정을 하기 전 타이머 레지스터 설정을 마치고 check timer를 실행 해 준다.</p> <p>- Run to Next Point기능을 이용하여 측정</p> <p><img src="/data/wiki/2017-09-08/1504848213.png" alt="" /></p> <p> </p> <p>- Start measure를 실행하여 Run Time 측정</p> <p><img src="/data/wiki/2017-09-08/1504848225.png" alt="" /></p> <p> </p> <p> </p> <p class="setextarea"> </p> <p class="setextarea"><span style="font-size: large;"><strong>2.2.2 </strong><strong>주기적으로 수행되는 TASK의 실행 주기 측정</strong></span></p> <p class="setextarea">-1ms 마다 실행되는 TASK의 주기를 측정 해보는 예제로 Cycle run Time측정 기능 이용</p> <p class="setextarea">-마찬가지로 측정을 하기 전에 Check Timer를 통해 타이머 설정이 잘 되었는지 확인 필요</p> <p class="setextarea">-타이밍 측정을 시작하는 PC의 위치는 관계 없다</p> <p class="setextarea"><img src="/data/wiki/2017-09-08/1504848296.png" alt="" /></p> <p class="setextarea"> </p> <p class="setextarea">-반복해서 여러 번 측정 하고자 한다면 Additional Setting의 ‘Set Test Count’ 메뉴를 사용</p> <p class="setextarea"><img src="/data/wiki/2017-09-08/1504848306.png" alt="" /></p> <p> </p> <p> </p> <p class="setextarea"> </p> <p class="setextarea"><span style="font-size: large;"><strong>2.2.3. </strong><strong>특정 구간에 대한 Run Time 측정</strong></span></p> <p class="setextarea">-TASK_1ms의 시작 위치부터 종료 위치까지 Run Time을 측정 해보는 예제로</p> <p class="setextarea"> Interval Run Time 측정 기능 이용</p> <p class="setextarea">-Start Point(TASK 함수 시작)와 End Point(TerminateTask 함수 호출) 설정이 정확한지 확인</p> <p class="setextarea">-측정을 시작하는 위치(PC)는 무방</p> <p class="setextarea"><img src="/data/wiki/2017-09-08/1504848379.png" alt="" /></p> <p class="setextarea"> </p> <p class="setextarea">-반복해서 여러 번 측정하고자 한다면 마찬가지로 ‘Set Test Count’ 설정 이용</p> <p class="setextarea"><strong> <img src="/data/wiki/2017-09-08/1504848394.png" alt="" /></strong></p> <p class="setextarea"> </p> <p class="setextarea"> </p> <p class="setextarea"><span style="font-size: x-large;"><strong>3. </strong><strong>유의 사항</strong></span></p> <p class="setextarea"><span style="font-size: large;"><strong>3.1 </strong><strong>타이머 레지스터 디버그 모드 설정</strong></span></p> <p>정확한 타이밍을 측정하기 위해서는 타겟 코어 제어(run/stop)시에 동기화 되어 Timer 레지스터도 제어(run/stop)가 되어야 한다. 이를 가능하게 하는 것이 타이머 레지스터를 디버그 모드로 설정하는 것이다. 디버그 모드로 Timer를 설정하기 위해서는 TRACE32를 활용하거나 startup코드를 활용하는 방법이 있다. 만약 TRACE32에서 타이머를 디버그 모드로 설정 했으나 중간에 내부 SW가 실행되면서 다시 정상 모드로 타이머를 초기화 하면 안된다.</p> <p>아래는 AURIX TC277T MCU의 타이머 레지스터 및 디버그 모드 설정의 예이다. SUS field에 Suspended로 설정하면 코어의 동작에 따라 같이 동기화 되어 run/stop된다.</p> <p><img src="/data/wiki/2017-09-08/1504848453.png" alt="" /></p> <p>부팅 시간을 측정하는 경우에는 reset vector부터 startos까지 실행되는 동안 초기화 되지 않는 Timer를 사용해야 한다.</p> <p> </p> <p class="setextarea"><span style="font-size: large;"><strong>3.2 Timer</strong><strong>를 이용한 최대 측정 시간</strong></span></p> <p>만약 측정하고자 하는 코드가 타이머 레지스터의 1cycle 시간내에 실행되지 않는다면 overflow가 발생 되고 정확한 시간을 측정 할 수 없다. 예를 들어 타이머 레지스터 1cycle이 1ms 라면 이 타이머로는 1ms 이상으로 동작되는 SW run time을 측정 하면 안 된다. 따라서 설정된 타이머의 최대 측정 가능 시간을 확인하고 그 이하의 시간을 측정 해야 한다. 아래 설정을 예로 들자면 약687(160ns * 0xFFFFFFFF)초 이내로 실행되는 SW를 측정 할 수 있다.</p> <p><img src="/data/wiki/2017-09-08/1504848512.png" alt="" /></p> <p> </p> <p><span style="font-size: large;"><strong>3.3. Run Time </strong><strong>중 Timer설정 변경</strong></span></p> <p>타겟 SW가 동작 하면서 타이밍 측정에 사용되는 타이머의 설정이나 값을 변경하면 정확한 타이밍 측정이 어렵다. 이런 경우에는 다른 타이머를 run time측정에 활용하는 것을 권장한다.</p> <p> </p> <p> </p> <p class="setextarea"><span style="font-size: x-large;"><strong>4. TRACE32 Run Time </strong><strong>측정 기능 응용</strong></span></p> <p> TRACE32의 장점은 강력한 스크립트 기능을 이용하여 반복되는 상황이나, 특정 시나리오 상황에서 원하는 동작을 자동으로 수행하도록 구현 가능하다는 점이다. 이 스크립트 자동화 기능과 Run time측정 기능을 함께 사용하면 예를 들어 아래와 같은 기능도 구현할 수 있다.<br /> <br /> <span style="text-decoration: underline;">Run Time</span><span style="text-decoration: underline;">측정 기능 응용 예)</span><br /> 1) 디버깅: 타이밍 조건을 설정하여 조건에 fail되는 경우 테스트를 중지하고 현재 타겟 상태를 확인하여 디버깅 할 수 있다.<br /> 2) 타이밍 측정 결과 저장: SW타이밍 측정 후, 이를 TRACE32 file I/O기능을 이용하여 측정 결과를 파일로 저장할 수 있다.<br /> 3) 타이밍 측정 자동화: 다양한 point의 SW 타이밍 측정이 필요하다면 시나리오를 만들고 이를 TRACE32 스크립트로 구현하여 자동화 할 수 있다.<br /> 4) SW 유닛 테스트에 활용: TRACE32 기능 중 가장 많이 사용 되는 것 중 하나가 원하는 시점에 변수에 값을 read/write하는 기능일 것이다. 이 기능과 SW Run Time 측정을 같이 사용한다면 특정 조건(변수 값)일 때 SW Run Time측정하는 것이 가능하다.<br /> 5) Data Access Timing 측정: Program Break Point를 이용하면 SW 타이밍을 측정 가능하고, 마찬가지로 Data Break Point를 이용하면 Data가 read/write되는 타이밍을 측정할 수 있다.</p>
S/W 런타임 측정
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
행위
검색
TRACE32 Dummy
TRACE32
iTSP User's Guide
aTSP User's Guide
Linux Debugging
Debugging Tips
Trace Analysis
Virtual Target
TRACE32로 바라본 ARM
TRACE32 FAQ
TRACE32 Trouble Shooting
TRACE32 Software Update
Software Revision History
DT10 / DT-Win
다운로드
DT10 Evaluation
DT-Win Evaluation
TestPoint 삽입 Error
Build Error
DT10 FAQ
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보