"TRACE32 스크립트 활용한 디버깅 자동화"의 두 판 사이의 차이

TRACE32
이동: 둘러보기, 검색
(새 문서: <h2 class="MsoNoSpacing" style="margin: 0cm 0cm 0pt 38pt; text-indent: -17.85pt; mso-outline-level: 1; mso-list: l0 level1 lfo1;"><span style="mso-fareast-font-family: "맑은...)
(차이 없음)

2015년 12월 29일 (화) 15:36 판

1.     소프트웨어 문제 재현

Q : 소프트웨어의 문제가 랜덤하게 발생합니다. 최초 실행 후, 3~4초 이내에 문제가 발생하지 않으면, 소프트웨어를 계속 사용이 가능합니다. 하지만, 문제가 발생하면, 그 이후에는 오동작을 합니다. 디버깅의 어려운 점은 문제 재현이 100~200회 수행할 때 한번 발생합니다. 이 경우 문제 재현을 자동화 할 수 있습니까?

 

A : 소프트웨어 디버깅을 하는 과정에서 가장 많은 시간을 소비하는 것이 바로 문제 재현입니다. 문제 재현이 되어야 실제 디버깅 작업을 수행할 수 있는데, 경우에 따라서 문제 재현이 잘 되지 않는 경우가 있습니다. 위의 사례처럼 문제를 재현하기 위해서 100~20회 반복적으로 소프트웨어를 수행/문제 재현 여부 확인 작업을 해야 하는 경우, 개발 효율을 매우 떨어지게 됩니다.

 

TRACE32는 위와 같은 상황을 위해 스크립트로 자동화가 가능합니다. 자동화를 통해 문제 재현 여부까지 확인할 수 있습니다.

 

먼저, 전원을 외부에서 제어하여 리셋 관리도 동시에 되는 경우와, TRACE32를 이용하여 리셋을 이용하는 경우의 스크립트입니다.

TRACE32를 이용하여 리셋하는 경우

외부에 전원 제어 장치가 있는 경우

system.resetout

Wait state.power()

 

System.resetout 스크립트는 반드시 TRACE32systemready 상태에이어야 합니다 TRACE32 system 상태를 ready로 설정하는 방법은 다양한 방법이 존재합니다. 그 중 가장 쉬운 방법은 system.up이라는 스크립트를 이용하는 것입니다.

 

Wait state.power()는 타겟에 전원이 공급될 때까지 대기하는 스크립트입니다. 만일 전원이 꺼지는 것을 감지하길 원한다면, wait !state.power()를 이용하면 됩니다. 만일 전원이 정상적으로 공급되고 있는 상태라면, wait state.power()는 대기 없이 수행이 진행됩니다.

 

그런데, 외부의 전원 제어 장치의 동작을 감지하는 목적이라면, 먼저 wait !state.power()를 수행하고, wait state.power()를 이용해야 합니다. 이 순서의 스크립트를 이용하면 전원이 on/off되는 것을 감지할 수 있습니다.

 

위의 예제에 더불어, 실졔 사례에 해당하는 스크립트를 완성해보도록 하겠습니다. 예를 들어, 문제가 발생하면 특정 함수까지 수행하는 것이 불가능한 경우를 찾아내기 위한 스크립트를 작성해보도록 하겠습니다.

 

TRACE32를 이용하여 리셋하는 경우

외부에 전원 제어 장치가 있는 경우

System.cpu xxx-architecture

System.jc 10.Mhz

System.up

 

L1:

system.resetout

 

go my_function

wait !run()

 

goto L1

 

Enddo

System.cpu xxx-architecture

System.jc 10.Mhz

 

L1:

Wait !state.power()

Wait state.power()

 

System.up

 

go my_function

wait !run()

 

goto L1

 

Enddo

 

TRACE32를 이용하여 타겟을 reset하는 경우는 system.up 1회만 수행합니다. 하지만, 외부 전원 제어 장치를 이용하는 경우는 전원이 공급될 때마다 system.up을 수행합니다. System.up을 수행한 후 전원이 지속적으로 공급되면 시스템은 ready상태가 유지됩니다. 이 경우 system.resetout을 수행하더라도 계속 유지가 되므로, 다시 system.up을 할 필요가 없습니다.

 

하지만, system.up을 수행한 후 전원이 끊어지면, systemdown 상태가 됩니다. 이 경우 전원이 공급된 후, 다시 system.up을 수행해야만 ready 상태가 됩니다.

 

위의 예제는 둘 모두, 타겟이 정상적으로 my_function까지 수행되면 타겟을 리셋시켜 처음부터 재실행합니다. my_function까지 수행되지 않으면, 무한히 대기상태로 동작합니다.

 

만일 my_function3초 이내에 수행될 수 있도록 코드가 작성되어 있다면, 다음과 같이 수정할 수 있습니다.

 

TRACE32를 이용하여 리셋하는 경우

외부에 전원 제어 장치가 있는 경우

System.cpu xxx-architecture

System.jc 10.Mhz

System.up

 

L1:

system.resetout

 

go my_function

wait 3s

 

if run()

(

   Beep

   Enddo

)

 

goto L1

 

Enddo

System.cpu xxx-architecture

System.jc 10.Mhz

 

L1:

Wait !state.power()

Wait state.power()

 

System.up

 

go my_function

wait 3s

 

if run()

(

   Beep

   Enddo

)

 

goto L1

 

Enddo

 

위 예제는 3초 대기후에도 타겟이 실행 중인 경우를 이상 현상이 발생한 것으로 판단하는 스크립입니다. 정상적인 수행을 한 경우, 3초 후에 타겟은 my_function에 정지한 상태가 되고, 다시 테스트를 수행합니다.

 

그러나 3초 대기후에 타겟이 계속 실행 중이라면, 소리를 발생시키고, 스크립트를 종료합니다.