태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

◆ 목적

CCS - Code Composer Stdio 의 유용한 기능 디버깅 기능을 배워본다.

 

◆ 참고

싱크웍스( www.tms320.co.kr ), 28x CPU 핸드북(백종철 저)

 

◆ 준비

PC, EVM 보드, 280x 계열의 DSP, CCS 2.1이상, JTAG 에뮬레이터( TDS510USB 권장 ), 점퍼선 8, 정전기 방지 손목띠

 

◆ 예제파일
05_calculation_280x.zip (싱크웍스 홈페이지 활용예제 게시판 참조)




이번에는 이동평균기를 구현한 예제 파일을 가지고 CCS의 유용한 기능들에 대해 알아보도록 합니다. CCS DSP 개발 환경의 대표적인 조건으로, DSP를 잘 다루기 위해서는 CCS에 대해 먼저 잘 알아야 합니다. 그러나 CCS에 관한 내용만으로, 책 한권 정도가 나올 분량이기 때문에 여기에서는 자주 사용하는 CCS의 몇 가지 기능에 대해 알아 보도록 하겠습니다.

 

1. EVM의 회로를 다음과 같이 결선하십시오.

 

  

[LED]

PWM1 ~ J5100 1

PWM2 ~ J5100 2

PWM3 ~ J5100 3

PWM4 ~ J5100 4

PWM5 ~ J5100 5

PWM6 ~ J5100 6

PWM7 ~ J5100 7

PWM8 ~ J5100 8

 

 


2. EVM
을 동작 시키고, CCS를 활성화 시키십시오.

 

 

 

 

3. 예제 파일을 중 "05_Calculation.pjt"를 열어서, Rebuild All 하십시오.




Watch Window

예제의 실행 준비가 완료됐으면, 우선 Watch Window 기능에 대해 알아봅니다. Watch Window DSP의 레지스터 상태, 혹은 프로그램 변수의 데이터 상태를 관찰 할 수 있도록 하는 기능을 담당합니다. 이는 DSP 프로그래밍 시 아주 요긴하게 쓰이는데, 많은 설명보다 한번 해보시는 게 더 이해가 쉬울 듯 합니다.




4. [View] → [Watch Window]
를 눌러, 다음 그림과 같이 Watch Window창을 활성화 시키십시오.

 

 

  

 

5. 코드에서 루프변수인 'loopcnt' 드래그 한 다음, 마우스 오른쪽 버튼 클릭. Add to Watch Window를 클릭하십시오.

 

 

 

  

6. Watch Window상에 loopcnt 변수가 추가된 것을 확인하면 DSP를 실행 시키십시오.


※참고: Watch Window 창에 나타난 loopcnt 변수의 값이 16진수로 표기되어 있으면, "Radix"를 클릭하여, unsigned 로 바꿔주시면 됩니다.

실행 중인 DSP를 멈추면 Watch Window에 있는 loopcnt 변수 안의 데이터가 바뀌어 있는 것을 확인할 수 있을 것입니다. 이로써, 개발자는 프로그래밍 시에 변수의 값을 확인할 수 있는 것입니다. 변수 이외에도 레지스터의 상태를 확인할 수도 있습니다. 확인하는 방법은 변수 관찰 할 때와 똑같이 드래그와 Add to~ Watch Window에 추가해 주시면 됩니다. 본인이 관찰을 원하는 레지스터가 있다면 직접 한번 해 보시길 바랍니다. 마지막으로 Watch Window와 이후에 배울 Real Time Mode 기능을 더하면 실시간으로 데이터의 변화를 관찰할 수 있습니다.


◈ 브레이크 포인트
 
브레이크 포인트는 C 개발환경에서의 그것과 동일합니다. 프로그램 수행 도중 브레이크 포인트가 찍힌 코드를 만나면 프로그램은 그 동작을 멈추게 됩니다. 브레이크 포인트 기능은 프로그램 디버깅에 아주 유용합니다.




7.
다음 그림을 참고로 해당 지점에 브레이크 포인트를 설정하십시오.



                                                                                             

             브레이크 포인트 설정                                                      브레이크 포인트 해제


※ 해당 코드 앞에서 더블 클릭으로도, 브레이크 포인트의 설정과 해제가 가능합니다. 
  
키보드의 F9 키를 이용하여 설정/해제의 Toggle이 가능합니다.

 


8. [Dubug] → [Reset CPU] 한 후, 다시 [Dubug] → [Restart]를 클릭하십시요. 이는 DSP를 처음 상태로 돌리기 위함입니다.

 


9. DSP를 실행시키십시오.
DSP를 실행 시키면, 위의 브레이크 포인트를 설정한 곳에서 프로그램이 멈추게 되는 것을확인 할 수 있습니다. 이처럼 브레이크 포인트 기능을 활용하면 프로그램을 개발자가 원하는 곳에서 프로그램을 멈춰서 볼 수 있기 때문에, 앞서 말했듯이 코드 디버깅하는데 많이 사용됩니다.


Real Time Mode

리얼 타임 모드는 CCS의 가장 강력한 디버깅 기술이라고 할 수 있습니다. CCS에서 스톱 모드(현재 사용하고 있는 모드)를 리얼 타임 모드로 전환하게 되면, 코드의 변화나 수정을 실시간으로 관찰할 수 있게 됩니다.




10.
아까와 같이 칩을 처음 상태로 돌려 놓고, 브레이크 포인트는 모두 해제 합니다.

 



11. [Debug] → [Real Time Mode]
를 눌러 현재의 스톱 모드에서 리얼 타임 모드로 전환합니다.

 

 
리얼 타임 모드로 전환 시 화면에 다음과 같은 경고창이 나타납니다. 이는 스톱 모드에서 리얼 타임 모드로 전환하기 위해서는 ST1 레지스터의 1번 비트를 0으로 강제 변환 해야 한다는 내용의 경고창입니다. 물론 해당 레지스터 비트가 0으로 되어 있으면 나타나지 않은 경고창이고, 설령 나왔다고 하더라고 프로그램 실행에 문제 될 것은 없으므로, (Y)를 누르고 지나갑니다.

 

 


12.
다음 그림 처럼 리얼 타임 모드가 활성화 되면, DSP를 실행 시킵니다.

 

 

 

 

13. 다음은 Watch Window 창에 오른쪽 마우스를 클릭하고, [Continuous Refresh]를 클릭합니다.

 

  
Continuous Refresh가 활성화 되면 DSP를 실행시켜 보십시요. 그러면 Watch Window에 있는 변수의 변화가 실시간으로 나타나게 됩니다. 이 기능을 활용하면 현재 데이터의 변화나 레지스터의 변화를 관찰함으로써, 프로그램이 수행되고 있는 상황을 효과적으로 알 수 있습니다. 게다가 리얼 타임 기능은 이후 그래프 기능과 더불어 신호를 다루는 주변회로( ADC, PWM..)에 대해 공부하는데 아주 유용합니다.


※ 참고: 리얼 타임 모드에서 프로젝트를 Rebuild하면 CCS가 멈출 수도 있습니다. 그러므로 프로젝트를 Rebuild할 때는 항상 스톱모드 상태로 환경을 전환해 주시기 바랍니다.

 


◈ 그래프

그래프 기능은 말 그대로 데이터의 값을 그래프 상에 표시하는 것입니다. 이는 데이터의 변화를 알아보는데 아주 유용합니다. 그러나 그래프 기능을 사용할 때, 유의할 점은 그래프로 데이터의 변화를 관찰하기 위해서는 반드시 배열을 사용해야 한다는 점입니다.




14. [View] → [Graph] → [Time/Frequency...]
클릭 합니다.

 

 


15. 다음 그림을 참고로 그래프 설정 창을 수정합니다.

 

 


16. 수정을 마치면 ok 버튼을 클릭하여, CCS 화면에 나타나는 그래프 창을 확인합니다.

 

 
이는 x[700]에 있는 데이터를 그래프로 표현 한 것입니다. Watch Window x를 추가하여, Watch Window상의 값과 그래프 상의 값이 일치하는지 확인해 봅니다. 그러나 그래프의 값을들 비교하기 용이하지 않기 때문에, 그래프의 설정을 조금 변경하여 비교가 수월하도록 해 보겠습니다.

 


17. 그래프 창에 마우스 오른쪽 버튼을 클릭하고, [Fixed Scale]을 클릭합니다.

 

 


결과 화면

 


Fixed Scale
을 체크하면 그래프가 이전보다 훨씬 보기 수월해 집니다. 따라서 Watch Window의 값들과 비교하면 눈짐작으로 일치하는지를 확인할 수 있습니다.

 
그래프 기능은 데이터의 전체적인 형태나 변화를 표현하는데 아주 유용하지만 여기에 주의할 점이 있습니다. 그래프의 설정을 잘못 해주면, 같은 데이터를 표현하는데도 그래프의 표현이 다룰 수 있기 때문에 개발자는 자칫 착각할 수 있습니다. 쉬운 예로 Uint16의 데이터 형을 가진 변수를 Uint32 데이터 형을 가진 변수로 설정해서 그래프로 보면 우리가 원하는 그림 형태를 볼 수 없습니다. 간단하지만 자주 틀리는 내용이므로, 이에 관해서는 잘 기억해두시기 바랍니다.


◈ 프로파일링
 
마지막으로 프로파일링 기능은 프로그램 내의 어떤 함수를 분석하는 기능을 담당합니다. 그러나 대개는 함수에서 소비된 클럭을 계산하는데 많이 사용됩니다. 코드의 클럭 정보에 대해 아는것은 매우 중요합니다. 이는 곧 프로그램 동작의 시간 정보를 알 수 있기 때문에 가령 1초 주기로 LED를 점멸하는 프로그램을 구현할 때 시간 정보등을 계산하는데 필요한 것이 클럭 정보입니다.


프로파일링 기능을 알아보기 위해 프로그램 내의 다음 함수를 분석해 보도록 하겠습니다.




18. DSP
를 처음 상태로 돌려 놓습니다. ( [Reset], [Restrat] )



19.
메뉴 표시줄에서 [Profile] → [setup]을 누르고, 나타나는 창 하단에 [Ranges]탭을 클릭 합니다.

 

 
프로파일링 창을 살펴보면, Functions, Loops, Ranges 영역이 따로 나뉘어져 있는데, 이는 CCS에서 자동적으로 각 영역을 나눠준 것입니다. 여기서 우리는 프로파일링을 원하는 함수나 루프를 선택해서 관찰해 보면 됩니다.  처음에는 모든 영역이 Disabled되어 있습니다. 프로파일링 창 위에 타이머()를 클릭하면 clock enable되서, CCS에서 다음 그림과 같은 화면을 볼 수 있을 것입니다.

 

 


20. 다음 그림과 같이 소스 창의 회색 부분의 크기를 늘려 놓습니다.

 

 


21. 프로파일링 창에서 Loops 63-68부분을 나타내는 루프를 클릭하고, 스페이스 바를 누릅니다.

 

 
스페이스 바를 누르면 해당 영역이 Enabled 됩니다.( 반대도 마찬가지 ) 해당 영역이 Enabled되면 소스 코드의 우리가 분석을 원하는 함수 앞에 시계 모양의 그림이 나타납니다. 이렇게 되면 해당 함수의 분석 준비가 완료됩니다.

 


22. [Profile] → [Viewer]를 클릭합니다.

 

 
이 상태에서 DSP를 실행 시킨 후, 조금 있다가 멈춰 봅니다. 그럼 Viewer 창에 해당 함수가 분석된 내용이 나타나게 됩니다.
 



◈측정 결과

함수 부분이 소비하는 전체 사이클은 18897이고, 700 Access 하여 루프를 수행합니다. 그리고 본 함수가 서브 루틴을 포함한 사이클인가 아닌가에 따라 Inclusive(포함), Exclusive로 나뉩니다. 본 함수는 서브 루틴이 없으므로, 같은 결과를 가지게 됩니다.


지금까지 CCS에서 프로그래밍 하는데 유용한 몇 가지 기능들에 대해 간단히 알아봤습니다. 각 기능의 확인은 간단간단 하지만, 그 위력은 실제 프로그래밍에서 대단합니다. 위 기능들을 반복, 응용하시면서 DSP의 기본을 튼튼히 하시기 바라겠습니다.

 

DSP에 대해 좀 더 알고 싶으세요? 싱크웍스 무료실습강좌를 신청하세요. ---------> 무료실습강좌 신청하기
본 내용이 유익하셨다면 싱크웍스 블로그 2.0을 구독하세요. -------------------------> 싱크웍스 RSS





Posted by syncworks

댓글을 달아 주세요