레이블이 IDE-CCSv6인 게시물을 표시합니다. 모든 게시물 표시
레이블이 IDE-CCSv6인 게시물을 표시합니다. 모든 게시물 표시

8/12/2017

CCSv6,7 TI-BIOS시 ROV 기능 소개

ROV(Runtime Object View)

CCSv7에서 부터 지원이 가능한 것 같으며, TI-RTOS인 BIOS를 사용할 경우 지원이 가능한 것 같다.
아직 이 기능을 사용해보지 못했으며, 만약 다시 TI의 BIOS를 이용하게될 경우가 있다면 추후 이용해보도록 하겠다.

  1. CCS의 JTAG을 이용하여 Connection 
  2. CCS Debug Mode 로 진입 
  3. Tools->RTOS Object View(ROV)  선택 

정확한 기능은 A.out 기반으로 사용되는 실행파일(Object File)을 분석하고 각 Stack Size 및 Heap size를  측정해주는 것 같다.
다만 ELF도 되는지는 아직 확인 안했음. 

동작방식은 Symbol Table 기반으로 분석하여 각각 분석을 해주는 것 같은데, 카테고리로 나누어서 분석을 해줘
나중에 사용한다면 유용할 것 같다.

  https://www.youtube.com/watch?v=NV0gNNavmUw&t=36s
  https://www.youtube.com/watch?v=MI_2iM2WbU8&t=146

 아래의 동영상을 보면 최적화를 할때 반드시 필요할 것 같다.

TI-TOOLS 관련내용
  https://www.youtube.com/watch?v=_F2bVVqaeFk

8/10/2017

CCS MSP430의 Breakpoint 기능 및 Graph 기능

1. MSP430 JTAG의 고급 사용 

  • MSP430 CCS Manual
2.2.1 Breakpoint Types 에 본인의 MCU에 따라 지원되는 기능과 HW Breakpoint 제한이 있으니 확인해봐야한다.

  http://www.ti.com/lit/ug/slau157ao/slau157ao.pdf

아래의 기능을 MSP430으로 한정 지어서 생각할 필요는 없으며, 다른 TI Chip에게도 해당이 되는 일이기에 같이 설명한다.

1.1 HW Breakpoint의 작동원리 

기존에 설명했듯이 MSP430의 Debug는 JTAG이 지원을 하며, HW Breakpointer를 지원하 디버깅이 쉽게 가능하다.
물론 Breakpointer 기능이 SW로 구현이 가능하며, 이는 또한 Software debugger 필요하겠지만,  여기서 설명하는 것은 JTAG을 이용한 HW breakpoint 기능이다.
하지만 좀 더 많은 기능을 사용해보기 위해서 아래와 같이 BreakPointer의 원리와 구성을 알아보자.

  • HW BreakPoint의 기본동작
HW BreakPointer를 Source의 Line에 설정하면, 아래와 같이 설정화면이 나오는데, Action의 기능이 나오고 기타 기능이 나온다.
기본적으로 동작원리는 얼추 비슷하다. 심볼테이블에서에 실제 주소를 찾아 이 부분이 Cache에 들어올때
확인하여 그부분을 멈추는 것이다.



1.2 Breakpoint 세부설정 

상위에서 기본동작 원리를 알았으니, 이제 아래에서 세부적으로 더 설정이 가능한지 알아보자.
Breakpoint에는 Properties라는 설정이 있는데, 이는 세부적인 Control을 가능하게 만들어준다.

  • Breakpoint Properties 설정 



  • 기본설정구성 
Trigger 0:  구성
  -  Location:  현재 사용중인 a.out format
  -  Access :
  1. instruction fetch:  fetch 할 때 비교 하여  멈춤 

Skip Count:  설정
    Current Count 설정

Instruction Fetch 설정할 경우

Action :
  1. Remain Halted :  Trigger 의 조건이 맞을 경우, 멈추는 것 
  2. Refresh All Windows:  Trigger의 조건이 맞을 경우, 현재 CCS의 Window를 Refresh 



  • Breakpoint 관련 Manual 
  다양한 Breakpoint의 기능을 사용하고 싶다면 아래의 글을 읽어보도록 하자. 

  http://www.ti.com/lit/an/slaa393f/slaa393f.pdf
  https://drive.google.com/open?id=0B_ehveuLi8MVcVRwa3ZpNEZGSGc


2. HW Breakpoint 응용


아래와 같이 Register->View Memory at Address를 하면 쉽게 아래와 같이 주소를 알수 있으며,
이것을 상위 BreakPoint와 조합을 이용하여 사용이 가능하다.


본인이 원하는 Breakpoint를 별도로 설정하고 Register를 감시하자.
Watchpoint 를 사용해도 좋다.



아래 보면, Breakpointer list에 등록이 되어 있고 사용중인 지 항상확인해야 한다.




  • View->Expressions
이전에도 설명 했지만, Expressions에서는 주로 전역변수를 등록하여 감시가 가능하며, 여기서 아래와 같이 이중 포인터 설정가능하다.
(Local 변수도 가능하지만 제한적으로 가능)
쉽게 등록하는 방법은 Watchpoint로 등록하는 방법이고, 직접 여기에 전역변수를 본인이 직접 넣어도 무방하다.
다만 여기에는 Symboltable 기반으로 작동이 되는것 같다.


Breakpointer와 항상 사용하다보면 아래와 같이 이부분을 변경하며 Debug하게 된다.

간단한 사용의 예를 아래와 같이 정리한다.
아래는 txmsg는 배열선언 했으며, 이고, txhead는 일반 value 선언했다.
이를 이용하여 아래와 같이 C 프로그래밍처럼 배열참조가 가능하다.

각 Value에 우측 마우스를 이용하여 다음과 같은 메뉴가 나오며, 이를 이용하여 좀 더 나은 디버깅을 해보자.
  1. View Memory :  Memory 창에서 전역변수의 주소를 볼수가 있다.  
  2. View Memory at Address :  전역변수의 값의 주소를 볼수가 있다. 
  3. Number Format:  Value의 Format을 변경한다. (중요) 
  4. Graph는 추후 설명 



2.1 전역변수 Graph 설정

상위에서 HW BreakPointer의 설정을 이제 Graph에 적용을 해보자.
아래와 같이 설정하면, Breakpointer는 멈추지 않고 Graph를 Refresh 하고 그려줄 것이다.

  1. Breakpointer Properties -> Action -> Refresh All Windows 설정 
  2. Expression 창에서 전역변수를 등록
  3. 전역변수 우클릭으로 Graph 창 설정  
or

  1. Tools->Single Time 설정 
  2. Gprah Properties 설정 ( Start Address 설정 중요 )


아래의 기능은 아이콘 형태로 제공되므로 잘 찾아보자. 

  • Graph Properties를 설정
  1. Start Address : 전역변수 주소 
  2. Sampling Rate :  본인은 원하는 Rate
  3. Grid Style :  본인인 원하는 설정 
  4. Time Display Unit :  Sample or ms or us 





  • 추가적인 설정 
  1. Reset Graph: 그래프를 처음부터 보고 싶다고 한다면 
  2. (Disable/Enable) Continuous Refresh : 지속적으로 보고 싶다고 한다면. 
  3. Refresh on Halt :  Halt일 경우 Refresh 기능 



  http://processors.wiki.ti.com/index.php/Data_Breakpoint/Watchpoint
  http://processors.wiki.ti.com/index.php/Breakpoint
  https://www.youtube.com/watch?v=-iGnh0_9YxE

7/01/2017

MSP430 Project 관리 및 Debug

1. CCSV6의 MSP430 지원 및 확인사항 

CCSv6에서는 현재의 MSP430을 지원 해주고 있지만 CCS의 Version에 따라 Compiler의 Version이 달라진다.

특히 MSP430의 TI Compiler 의 Version은 상당히 민감한 것 같다. 이부분은 반드시 확인을 해놔야 하며 ,
기존 TI Compiler version 을 사용할 수 있다면 기존 Version으로 사용하도록 노력해야겠다.

MSP430의 Compiler는 TI Compiler 와 GCC를 동시 지원해주고 있지만, Compiler에 따라 사용하는 방법 역시 조금씩 다르다.

특히 ISR 부분을 보면 다른 부분을 쉽게 알수 있을 것이다. Link Script인 *.cmd File과
연동하는 부분 역시 다르다.

  • MSP430 Debugger 확인
기본의 XDS와 다르게 아래의 전용 USB Debugger 사용
- MSP-FET430UIF

CCS Version에 따라 상위에 Firmware version이 변경이 될수 있으므로 가능하면 상위 Version을 사용하는것이 좋을 것 같다.

  http://www.ti.com/tool/msp-fet430uif

특징은 UART로 ISP(in-system programming)기능을 가지고 있으며, JTAG기능도 포함을 하고 있다. (이부분은 AVR과 동일)
MSP430으로 내부 Flash에 저장할때는 ISP를 이용하고, JTAG 관련하여 HW Debug 가능.


  • MSP430 CCS  User Manual
  https://drive.google.com/open?id=0B_ehveuLi8MVd2ZCS3d5bjR3RHM


1.1 CCS의 Project의 기본정보확인

아래에서 둘중 하나로 Project의 기본속성을 확인하고 Compiler version을 확인하고,
File Format 확인 하자


File->Properties 선택
General 확인

Project Explorer창에서 Project의 선택
우측 마우스 클릭 후 Property 선택
General 확인




  • CCSv6  MSP430 추가설치 
만약 본인의 CCSv6에서 MSP430관련부분이 없다면, 추가 Package로 설치를 해야한다.

  View->CCS App Center




1.2 MSP430의 Project 관리 (Properties 세부설정)  

상위 Project의 Properties를 세부 설정을 살펴보면 아래와 같다.
아래의 항목들은 참조하여도 좋다

CCS의 기본사용법에서 Project관리에 대한 설명을 하지 않은 것 같아 이부분을 추가설명하고자 이부분을 넣으며, 이 부분은 구지 MSP430으로 제한적으로 생각하지 말자.

  • CCS의 기본사용법 

  https://ahyuo.blogspot.com/2015/07/ccs-v6.html

  • CCS Project 생성 및 기본 Project 가져오는 방법 

  https://ahyuo.blogspot.kr/2017/06/ccsv6-project.html


  • Linked Resource (Link가 될때, 참조되는 PATH) 
   추가방법은 변수를 이용하던지 직접 추가하면, 본인의 Project에 추가가 된다.




  • Build->MSP430 Compiler->include Options
Include 에러가 났을 경우 아래를 검토하고, 만약 Configuration을 두개를 사용한다면 둘다 별도로 설정



  • General->Manage Configuration 

현재 Access Point와 End Device를 Application을 동시에 진행을 하기 때문아래와 같이 분리하여 진행하고 있다.



  • Build->MSP430 Compiler->Advanced Options->Predefined Symbols
   직접 define해서 사용해서 사용하고 있음



  • Build->MSP430 Compiler->Advanced Options->Command Files


  아래와 같이 End Device 와 Access Point 와 --define을 적용하여 사용하고 있다.




2. CCS를 이용한 Debug 소개

- MSP-FET430UIF

상위 Debugger가 ISP기능과 JTAG을 지원해주기 때문에,  CCS에서 JTAG을 이용한 고급 Debug기능이 가능하다.

*ISP기능은 일반적으로 Serial로 SPI통신으로 File을 Upload해주는 기술 (AVR도 동일하게사용)


소스를 빌드 후 Project에서 아래와 같이 *.out 생성되었다면 Debug 순서는 다음과 같다.

  1. Debug As->Code Composer Debug Session 실행  or F11 실행 or Run->Debug
  2. ISP로 Firmware Download 진행 
  3. CCS Debug 창에서 JTAG을 Debug 진행 




  • 실행 및 Debug 
빌드시 최종파일 형식은 A.out Format으로 나올 것이다. 그리고 또한 이 File에 Debug 정보를 포함하여
Debug를 시작하면 CMD 정보기반으로 MSP430의 Flash에 저장 및 RAM에 Loading 된다. 그리고 더불어 Source에서 Line에 더블 클릭을해서 HW Break pointer설정도 가능하여 JTAG기반의 Debugging도 가능하다.
Linkscript는  *.cmd  File로 해보면, 간단히 분석이 가능하며,쉽게 분석이 가능하다.

  • JTAG 기능 사용시 같이 봐야할 Debug기능 
  1. View->Register를 이용하여 각종 Register 확인 및 수정가능 
  2. View->Breakpointers: JTAG을 이용하여 소스에 BreakPointer를 설정가능 
  3. View->Variables: JTAG을 이용하여 Debug시 Suspend일 경우 변수 값을 볼수 있다.
  4. View->Expressions: JTAG을 이용하여 Variables 값을 추적하여 볼수 있다. 
  5. View->Disassembly: JTAG을 이용하여 Debug시 자동으로 Assembly 언어로 보여준다. 
  6. View->Modules: 현재 COFF (a.out) 파일의 정보 및 Symbol Table 정보를 정확하게 볼수 있다. 
  7. View->Outline : 현재 File의 함수이름과 전역변수 정보, Include 정보만 알려준다. 
  8. View->Other ( MSP430 -> Target)  MSP430의 Voltage도 감지가능

* 1번은 Suspend Mode에서 사용
* 2번은 Source의 Line에 더블클릭하고 설정하고, Breakpointers 창에서 이를 확인


2.1 CCS Debug 사용법 (JTAG Debug)
상위대로 ISP를 이용하여 진행하면, Source에 원하는 Line에 HW Break Point 사용하여, 관련 정보를 보는 것이 가능하다.
이 정보 뿐만 아니라, 현재 사용 중인 변수 값도 실시간으로 변화 값을 알수 있다.
정말 편리한 기능이므로 이용하여 사용해 보자.

  • View->Breakpoints
본인이 원하는 Source Line에 더블 Click하게 될 경우 아래에 Breakpoints 창에 추가가 된다.
View->Breakpoints를 설정하여 Debug를 설정
아래의 JTAG Debug 기능과 같이 사용해보고, Run Menu를 보면 다양한 기능을 제공해주고 있다.

  1. Run->Resume 
  2. Run->Suspend
  3. Run->Step info 
  4. Run->Step over
  5. Run->Step return 
  6. Run->Go Main 
  7. Run->Reset->Hard Reset or Soft Reset

아래의 창은 각각의 Source Line에 Breakpoint를 설정해 놓고 사용할 것 인지 설정하는 것이다.
한번 설정하면, 이 List에 기록이 되어져 있다.


  • View->Expressions

View->Expressions창은 본인이 원하는 전역변수 or Register를 직접추가하여 변수의 변화를 알수 있어 Debug하기가 쉬어진다.
다만 추가할 경우, 본인이 직접 이름을 추가해서 넣어야 한다.
그리고, 더불어 아래의 Disassembly 와 Source 창을 함께 놓고 보면 좋다.
Suspend Mode 일 경우 각 Source 창에서 변수를 마우스로 가르키면, 변수의 값을 알수 있다.


  • View->Variables
변수지만, Stack을 사용하는 Local 변수가 추적해주는 시스템이기에, 이것을 사용하기위해서는 상위의 Line 별로 Debug를 해야한다.
예를 들면, Step info 로 지속적으로 함수를 디버그하면 함수내의 변수 변화를 추적가능하다.





  • View->Registers 
Register 창을 이용하여 현재 MSP430의 상태를 정확하게 파악이 가능하며 Debug가 쉽다.
그리고, Expression에 이를 등록하여 봐도 된다.



  C:\ti\ccsv6\ccs_base\common\targetdb\boards
  C:\ti\ccsv6\ccs_base\common\targetdb\cpus

  http://processors.wiki.ti.com/index.php/Creating_Custom_Memory_Mapped_CCStudio_Register_Windows

  • View->Outline 과  View->Module 
View->Module창은 현재 올라간 COFF 파일의 Symbol Table 및 각종 정보를 쉽게 파악이 가능하며,
View->Outline은 현재 File의 함수 와 전역변수 및 Include 정보를 제공하여 쉽게 볼수 있다.




  • View->Memory Browser 
Pointer or RAM 의 Address를 정확한 정보를 보기 위해서 아래와 같이 본다.



2.2 CCS Debug 사용법 (Board 동작중)

상위는 항상 CCS에서 *.out을 ISP로 올려서 CCS로 Debug하는 방식이지만, 기본 동작 중에
Debugging 하고 싶을 경우가 발생한다.

** 2.1과 다른점은 ISP를 이용하지 않고, 보드가 동작 중에 CCS Debug를 사용하는 점이 다르다.
하지만 기능상의 제약은 따른다.


이럴 경우 아래와 같은 경우 절차로 실행하면 된다.
  1. View->Target Configuration 창 CCS Debug 추가 
  2. 본인의 *.ccxml을 선택 후 우측마우스 클릭 (MSP430F5438A.ccmxl)
  3. Launch selected configuration 실행 
  4. Run->Connect Target 실행 
  5. 각 View를 통해 현재의 정보를 확인 



아래와 같이 Target Configuration의 ccxml로 제어를 한다.





2.3 MSP430 의 기본 TEST 및 Debug

  • EVM 기본 TEST 
EVM 일 경우, 각 CLOCK 및 전류도 측정이 가능하여 다양하게 TEST가 가능하다.

  1. Clock 설정 후 각 CLOCK의 Output을 확인 ( ACLK, SMCLK, MLCK)  ( PINxSEL 확인)
  2. UCSI의 UART기능이 처음 구현이 되어있지 않다면 LED or 여분의 PIN을 이용하여 Debugging (스코프 이용)
  3. CCS는 Debug Mode를 적극 이용 


3. Hex File 생성 방법 

Hex File을 생성하는 방법을 소개하고 이를 이용하여 Flash하는 방법을 알아보자

IAR도 Hex File 생성이 가능하며 내 경우는 IAR에서 MSP430을 사용해보지 않았아서 이부분은 생략


3.1 CCS에서 Hex File 생성방법 

CCS에서 Hex File을 생성하는 방법을 제공을 하며 이를 이용하여 Gang으로 Flash가 가능하다.



  • How to Generate MSP430 Binary Files
MSP430의 HEX File 생성 시키는 방법

  http://processors.wiki.ti.com/index.php/Generating_and_Loading_MSP430_Binary_Files
  http://processors.wiki.ti.com/index.php/Hex_Utility_in_CCS


3.2  MSP-FET430UIF을 이용하여 Hex Flash 방법 


  • Hex File 기반으로 MSP430 Flash 하는 방법 
  Gang 과 MSP-FET430UIF 을 이용하여 Flash 방법소개
  https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/237820/833683


  • 방법-1 ( 사실 Gang의 위한 Program들) 
아래의 프로그램은 기본적으로 무료 프로그램은 아니며, 일단 유료지만, 무료로 이용가능한 기간이 있다
그리고, MSP-FET430UIF의 Firmware Version이 맞아야 제대로 동작이 가능하다.
이부분을 체크해야한다. 현재 Reset 만 확인했으며, 나의 경우는 Firmware Version이 맞지 않아 현재 Update 고려중

  https://www.elprotronic.com/productdata

  1. FET-Pro-430 Software Pkg. - LITE
  2. FET-Pro-430 Software Pkg. - STD

  • 방법-2 
아직 사용해보지 못한 방법
  http://www.ti.com/tool/msp430-flasher

  • 방법-3 
아직 사용해보지 못한 방법
  http://dlbeer.co.nz/mspdebug/


4. GDB관련정보 

Compiler를 GCC를 사용할 경우, GDB 사용하는 법

  http://processors.wiki.ti.com/index.php/GDB_with_MSP430_and_CCSv6

6/11/2017

CCSv7 Release 및 Free License 정책

1. CCSv7 Release 

CCSv7이 나와 있어서 이제 이것을 설치해보고 작동을 해봤다.
기존의 것과 좀 다르지만, Version 6과 얼추 비슷한 것 같다.

지인을 통해 이미 무료화가 되었다고 듣기는 했지만, 아래의 글을 읽어보면 좀 애매하다.
라이센스 Version CCSv6 와 CCSv7 기능이 완전 동일 한건지 좀 모르겠다.
어찌되었든 CCSv7도 사용해보자.

CCS는 현재 Compiler를 GCC와 TI Compiler를 지원을 하며, 개별 Version에 따라 문제가
약간씩 발생하는 것 같다.
이는 APP Center에서 추가 설치로 어느 정도까지는 지원을 하지만, 이후는 본인도
더이상 테스트를 진행을 해보지를 못해서 뭐라고 못하겠다.

CCSv7 Download
  http://processors.wiki.ti.com/index.php/Download_CCS

CCSv7 관련기사
  http://www.mcublog.co.kr/2090

2. CCS의 Project 관리의 예 

CCS의 설정의 예
  http://processors.wiki.ti.com/index.php/Creating_CCS_Project_using_SimpliciTI

상위 사이트에서 처음알게되었는데, Command configuration file 이라는 것이 존재하는데,
Compiler의 설정을 별도로 script 형식으로 설정을 하는 것이며, 주로 define으로 사용한다.
같은 Project 내에서 Make 외의 구분자 역할을 할수 있어 좋은 것 같다.

나머지는 전에 사용하던 Project 관리와 거의 유사하다고 보면 되겠다.
ARM을 사용하다가 MCU(MSP430)은 좀 많이 다른 것 같으며, 이상하게 좀 더 복잡한것 같기도 하다.
본인도 처음사용해보는 터라, Tool에 빨리 익숙해지는 것이 좋겠으며, 관련 Project들이
좀더 잘 구현이 되어있는 것 같다.

3. CCS의 무료 라이센스 

CCS의 모든 Version이 무료화가 되었다고 하니 아래의 절차대로 무료로 등록해서 사용하자.

  1. CCS License 파일 Download 및 저장 
  2. Help->Code Composer Studio Licensing Information t선택
  3. License Information View->Manage 에 Download한 License파일을 추가 






제대로 등록이 되었다면, License Type: Full License 로 변경이된다.


  • 기존방식
  http://processors.wiki.ti.com/index.php/Activating_CCSv6


  • 무료로 License File Download 
  http://processors.wiki.ti.com/index.php/Licensing_-_CCS
  http://processors.wiki.ti.com/index.php/Licensing_-_CCSv6


4. CCS의 Profiler 기능 

CCS에서 Profiler의 기능을 사용하고자 한다면 아래의 기능을 알아보자.
예를 들면, 함수들의 실행시간 및 성능 자세한 분석 기능

  http://processors.wiki.ti.com/index.php/Profiler
  http://processors.wiki.ti.com/index.php/Profile_clock_in_CCS

9/04/2015

CCSv6 Project 생성 및 기존 Project 가져오기

1. CCS의 실행 및 Workspace 설정

CCSv6를 처음 실행하면 아래와 같이 Workspace 설정이 가능하며 별도의 장소에 설정가능하지만
가능하면 한 장소에서 하는 것이 좋은 것 같다.




CCS에서 처음 Project 시작할 경우 생성이 필요하고 기존의 Project를 가져올 경우 import가 필요하다.
거의 생성해서 가져올 경우는 드물 것이며, import로 기존 Project를 가져와서 이를 호환이 되게 하는 것이 중요할 것이다.


1.1 존재하던 Project 가져오는 방법 (Import)


기존에 작업 중이던 Project or 다른사람이 제공해주는 Proejct를 가져올 경우 아래와 같이 Import를 사용하여 Project를 가져온다.


  • Project 메뉴 
  1. CCS Edit 모드 -> Project -> Import CCS Projects
  2. CCS Edit 모드 -> Project -> Import Legacy CCSv3.3 Projects 

  • File 메뉴 
    File->import -> Code Composer Studio 선택시

  1. Build Variables
  2. CCS Projects
  3. Legacy CCSv3.3 Projects 





  • Import CCS Projects

기본에 사용하던 CCSv5 or CCSv6의 Project를 가져오는 기능이며, 가져오는 도중 문제사항은 많이 발생을 한다
이부분은 우선 차례대로 확인을 해보자.

Import의 option의 기능
  1. import한 project를 copy 해서 workspace에서 사용하는 기능  
  2. import한 project를 저장되어진 폴더에서 사용지만 관련된 Project를 Import를 자동으로함 
2번과 같이 Automatically import referenced projects found in same search-directory 
보통 PATH 변수설정이 했지만 적용이 되지 않는 경우 or 변수를 적용을 못할 경우 설정하면 적용되는 경우가 발생 함으로 이부분을 잘 설정하자
     




  • Import Legacy CCSv3.3 Projects

CCSv3.3은 이클립스 기반이 아니기때문에 이 기능을 별도로 제공을하고 있으며, 가장 중요한 것이 이것도 호환성일 것이다.


아래 옵션은 위치가 변경이 되므로 조심하자
    Copy project into workspace 
         Project를 Workspace로 가져온다.


1.2 기존 Project 가져오는 도중 문제사항들

상위와 같이 TI에서 제공해주는 CCS Project를 Import해서 제대로 동작이 되면 다행이겠지만,
제대로 동작이 되지 않는 경우도 발생하며, 호환성 문제뿐만 아니라 다른이유에서도 문제가 발생할 것이다
CCS의 기능은 점점 확장이 되고 버전은 변경이 될것이며, 이부분은 해결방법을 좀 정리하여 보자.



만약 실패한다면 1.3의 Empty Project를 생성하여 만든 것을 최종적으로 고려해봐야한다.



1.3 Empty Project 생성 (Import 문제 발생할 경우)

Import를 했음에도 불구하고 제대로 동작이 되지 않는다면 다음과 같이 Project를 새로생성하여 소스를 추가하는 방식으로 구성하여 만들수도 있다.
이 방법을 이용할 경우, Project를 새로생성을 하되 Empty Projects->Empty Project로 생성을 하자.
그러면, Target MPU와 동일한 구성을 가진 기본 Project는 가졌지만, Source는 가지고 있지 않다.

이제 Source를 하나씩 가져오면서 Porting을 해보자
  1. 1.4의 Project 새로생성 내용처럼 프로젝트를 생성후 기본 환경설정을 갖추자. 
  2. 에러가 발생한다면, INCLUDE PATH 문제 or DEFINE 문제 , LINK 문제 다양하다. 
  3. 상위 문제들을 천천히 해결해 나가자. 
  4. Compiler에 따라 Linkscript와 연결되는 Macro가 다르므로 이부분도 확인해야한다. 


1.4 Project 새로 생성 

아래와 같이 동일한 방법으로 생성이 가능하다.

  • File->New->CCS Project 
  • File->New->Project->Code Composer Studio




  • CCS Project 생성 
  1. Target에서 본인의 MPU를 선택하자.
  2. Connection에서 본인의 JTAG을 선택하자.
  3. 본인의 내부 MPU를 선택 하고 Project 명 기입하자 
  4. Workspace 의 저장공간의 확인하자 
  5. Compiler는 다양하게 제공하므로 GCC도 가능 , 본인의 개발환경에 따라 선택 
  6. Project의 기본 Format의 설정  Empty Projects or Basic Example 
  7. 상위 부분은 우측에 자세한 설명이 나온다. 

  • 아래는 Complier가 TI Compiler로 설정 



상위부분은 Target MPU에 따라 많이 달라지만, 기본 설정은 동일하다.
그부분만 이해를 하면되겠다.

Target이 지원 되지 않는다면, View-> CCS App Center에서 찾아보고 설치해보자.



2. Project 의 환경설정 

CCS Project를 Import를 하거나, 생성하여 진행하다보면 에러가 발생하고 문제가 발생한다.
이부분은 Eclipse에도 별반 차이가 없기때문에 봐야할 부분들이다.

대부분의 문제들은 간단히 정리해보자면 아래와 같다. 
  1. Compiler의 호환성 문제 ( Compiler Version 변경 및 외부 Compiler 별도지정 )
  2. Include PATH 문제  (Compiler의 옵션에서 환경변수 설정이 적용되지 않을 경우)
  3. DEFINE 문제 ( Compiler의 옵션에서 define 이 없을 경우)
  4. Link 에러문제 ( Compiler Library 문제 및 Library 순서 문제 or 외부 Library)

기존 Project를 가져오거나 or 본인이 새로 Project를 생성을 하면 아래와 같이
Project->Property를 이용하여 Compiler 관련 설정을 해줘야 한다.
자동으로 Makefile을 생성하여 관리가 되기 때문에 편하지만, 아래 설정을 정확히 이해하고, 사용해야 본인의 Project을 관리가 가능하다.

특히 상위 에러문제에 있어서 아래 방법들을 이용하여 점검을 해보자.
개발을 해보신분이라면, Compiler의 설정 및 PATH 설정관련에 대해 잘 이해하리라고 본다.

일단 빌드에 문제가 발생을 하면, 아래 View를 이용하여 Project의 문제를 정확히 파악하고
아래에서 빌드의 문제 및 관련 PATH 등을 천천히 해결해 나가자.

  1. View->Console :  전제 빌드 과정을 보고, 문제사항을 정확히 보자.
  2. View->Problem :  문제사항을 알려준다. 
  3. View->Advice :  현재사항에 대해서 조언을 해준다. 

물론 해결해 나가다 보면, Compiler의 호환성 문제 or Source 호환성 문제도 발생하지만,
이부분은 관련 Project의 정확한 개발환경을 참고하자.


  • Project의 Property의 설정 
아래와 같이 Project의 Property는 빌드환경의 다양한 설정을 제공을 해주기 때문에
반드시 각각의 기능의 쓰임새를 어느정도 파악을 하고 있어야 한다.





2.1 Project의 Property->Resource

프로젝트를 진행을 하면 관련 환경을 설정을 하는데 아래와 같이 살펴볼수 있다.
그리고, Text File encoding 에서 변경이 가능하며, 하지만 이 설정은 이 Project에만 한정된다.

  1. UTF-8   (Linux에서도 소스를 볼일이 있다면 이 인코딩으로 변경)
  2. MS949  (Window에서만 사용한다면 이것을 사용)

  • Window->Preferences에 가서 Workspace


만약 전체 변경하고자 하면, Window->Preferences에 가서 Workspace에서 변경을 하면 
Workspace에 있는 것이 다 변경이 되므로 다 적용이 된다. 


  • Resource->Linked Resource
Must specify a URI scheme: xxxx  에러가 발생   ( PATH 설정 문제)

보통상위의 문제가 발생할 경우,  PATH를 추가하여 이 문제를 해결한다.
Link PATH를 수정 및 추가하자
만약 동적 Library를 사용한다면, 관련 PATH역시 한번 점검해봐야 한다.

  1. Path Variables: Linux의 PATH 변수라고 생각하면 되겠다.
  2. Linked Resources: 현재 Build할 File들 

변수 생성은 ${VAR}  생성 가능하며 적용이 가능하며, 아래와 같이 적용이 된다.
아래는 상위  DM368의 UBL IPNC 설정 소스이며, 관련부분을 참조 확인하자




  • 추가방법 New
  1. Name :  새로추가할 Variable Name ( 변수이름)
  2. Location: PATH 위치   
     - 우측옵션
  1. File 구조      ( File 직접 선택)
  2. Folder 구조  ( 변수를 이용하면 참조가 가능) 
  3. Variable       ( 상위에서 사용되어지는 변수사용)





Linked Resources : 확인용 보고 구조는 다음과 같다.
             *.cmd  : TI의 Link Script이며 이부분은 본인의 설정에 맞게 잘 파악해야한다.
              *.c     :  본인의 Compile되고 Link되는 상황을 잘 알수 있다.



  • Resource->Resource Filters
추후 Project에서 New로 추가 할 경우 이 부분이 이용가능




2.2 Project의 Property->General

General에서는 Compiler 및 빌드환경 및 Linkscript 인 cmd 파일 설정 및 기타 설정이 가능하다.
이부분을 Configruration의 설정을 이용하여 별도로 설정이 가능하며 세부저장도 가능하기에 이부분은 가장 중요하다고 말하겠다.
외부 Project를 가져왔을 경우 , 대부분 Compiler Version 문제이며, Compiler에는 include와 library를 가지고 있기 때문에 이와 관련된 에러가 발생된다.

TI에서는 TI Compiler와 GCC를 제공하고 있지만, 별도의 cygwin를 제공하지는 않는다.
아직 cygwin TEST를 해보지 않았으며, 추후 시간이 있을 경우에 이를 해보자.
(이미 cygwin64를 설치 했음)

2.2.1  Compiler 설치 및 기타 Package 설치

Complier의 Version 너무 높아 맞지 않다면 , 아래와 같이 선택하여 낮은 버전을 설치하자
  1. Help->Install New Software 
  2. Work with에서 Code Generation Tools Updates 선택 
  3. TI Compiler Updates 설정 



다양한 TI Compiler Version의 설치하자


  Compiler 설치방법
  http://processors.wiki.ti.com/index.php/Compiler_Releases

  XDAIS Package 설치 (외부 Package)
  http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/index.html


2.2.2 General 관련 설정 

아래의 설정을 보면 분리를 해서 보면 아래와 같다.

  1. Configuration  : Build 를 세부적으로 설정할 때 사용하며 추후 자세히 설명하겠다.
  2. Main Device : Device 와 JTAG 및 관련 설정 
  3. Main Advanced setting : Compiler 설정 및 기존옵션 설정 



  • Configuration 설정 
우선 아래와 같이 Manage Configurations에 들어가서 본인이 원하는 Make의 Target 만들고 각 설정을 변경한다.
이 부분은 다음 챕터에서 Build Configuration 과 같이 자세히 사용법을 알아보자.


이제 Main의 설정을 변경을 각각 변경을 해보자


  • Main->Device 설정 
사용하게될 Target Device에 대한 설정으로 관련부분을 잘 보도록하자 


이 부분은 TI의 Device 설정과 JTAG을 설정하는 곳으로 아래 PATH와 관련있으므로 잘 봐야 한다.
만약 지원이되지 않는다면, Help->check for update

C:\ti\ccsv6\ccs_base\common\targetdb\connections
C:\ti\ccsv6\ccs_base\common\targetdb\devices


  • Main->Advanced setting 
Compiler version 
Compiler를 변경 및 외부 Compiler 사용방법으로 우측의 more를 클릭
현재 TI에서는 아래의 주소에 Compiler를 제공하고 있으며 기본 library와 include를 확인가능하다

C:\ti\ccsv6\tools\compiler       // CCSv5 or CCSv6
C:\CCStudio_v3.3\tms470     // CCSv3.3 


Output type:
Output format:
GCC를 설치해보고, 사용해 본사람이라면  a.out과 elf format의 차이를 잘알것이라고 생각한다.
두 File Format은 실행 Format 종류이며, 큰 차이는 loader에서 동적 library 지원이 되는지
안되는지 가 큰 차이점이라고 볼수 있다.
ELF Format이 많은 기능을 가지고 있어, Linux와 같이 연동하여 사용한다면 이것을 사용하겠지만,
이전 CCS에서도 마찬가지로 COFF기반의 a.out format만 지원했기때문에 가능하면 COFF로 사용해야 하는 것이 맞을 것 같다.

TI의 CCS에서는 Legacy COFF (a.out)  , ELF 두개의 설정이 가능하며 TI 전용 ABI(Application Binary Interface) 별도로 사용하고 있다.

ABI는 상위 Format과 별도의 기능이며, ABI에 대해 좀 더 알고 싶다면 각 MPU의 ABI Spec보면될 것이다.
간단히 설명하자면, C와 어셈블리어간의 통신 방법 및 Compiler를 만들 경우 꼭 봐야할 것이 ABI이다.

Device endianness: 
일반적으로 Power PC의 경우는 Big Endian을 사용했지만, TI는 ARM기반으로 little사용하자.

Linker Command file :
GCC로 하면 Linkscript와 동일하며아래 PATH에가면 기본 실행이 될 수 있도록 되어있으나, UBL과 같이 어셈블러와 C 및 ABI가 필요하다면 본인이 직접 CMD파일을 작성해야한다.

C:\ti\ccsv6\ccs_base\arm\include 




  http://processors.wiki.ti.com/index.php/Linker_Special_Section_Types

Runtime support library:

이부분과 같이 봐야 할 곳이 Linker의 File Search Path 부분이다.
C:\ti\ccsv6\tools\compiler\ti-cgt-arm_5.2.2\lib




2.3 Project의 Property->General 확장사용

상위에서 설명한 Configuration의 세부 사용방법에 대해 자세히 기술을 하며 한 Project에서 다양한 Build 방식을 원할 경우 아래와 같이 설정한다.

  • Build Configuration 이란? 
CCS or Eclipse의 Configurations은 말그대로 Build에 관련된 모든 정보들을 별도로 저장이 가능하도록 하는 것이다.

  1. Compiler 종류 및 Version 설정 
  2. Compiler 와 Link 에 관련된 모든 옵션설정 
  3. 빌드파일 및 폴더 설정 

상위 정보와 Build 될 File 정보 들을 각각의 Configuration 마다 별도로 분리하여 저장가능하다.
이를 이용하여 같은 Project 내에서 다양한 Configuration을 통해 다양한 App을 만들어 낼수 있으며, Compiler를 설정 및 PATH 설정 역시 개별설정이 가능하다.
좀더 자세히 설명하면  Configuration 통해 Project에 관련된 설정을 세부별로 설정이 가능하고 이는 1개의 Project에서 다양한 기능수행이 가능해진다
.
  • Build Configuration의 사용방법 
  1. Property->General->Configuration  에서 Manage Configuration
  2. View->Project 창에서 마우스 우측 버튼을 Build Configuration에서 선택가능.
용어가 Manage Configuration or Build Configuration으로 사용이 되며, 이 부분 빌드환경을 저장하는 것이다.

  • Build Configuration 사용의 예 
Project를 생성하거나 기존에 존재하는 Project를 수정할 경우 다음과 같은 상황들이 흔히 발생한다.
  1. Project는 많은부분은 공유하고 상층부분 서로다르게 2 or 3개 이상로 분리하고 싶을 경우
  2. Project는 동일하지만, #define 을 서로 다르게 적용하고 싶을경우 (--cmd-file or --define 이용 ) 
  3. 서로다른 Compiler 환경을 구축하고 싶을 경우 

  • TI 관련 Youtube
  https://www.youtube.com/watch?v=YIAHYbRDrLw


  • Configuration 추가방법 
Property->General에서 Configuration 이 존재하며, Manage Configuration을 설정하면
아래와 같이 Configuration을 설정이 가능하다.
이는 Project를 가르키고 우측마우스의 Build Configuration->Manage와 동일하다.



New를 이용하여 아래와 같이 새로추가해보자


빌드를 할 경우 두 가지 모드 or 그 이상으로 각각의 Configuration으로 빌드가 가능하다.
아래와 같이 Build Configurations->Set Active 설정한 다음 Build Project를 진행을 하면된다.


  • 각 개별 Build Configuration File 과 Folder 관리방법 
각각의 Build Configuration 별로 다르게 특정파일 및 폴더를 제외하고 추가하고자 하고
각각의 Build Configuration 별로 각각에 Build 에 관련된 옵션을 다르게 저장이 가능하다.

  1. 제외시키는 방법 : Exclude From Build 사용하여 특정 File을 Build에서 제외  
  2. 추가하는 방법 : New->File or Folder 


파일을 제외시키는 방법 
Project 창에서 아래와 같이 마우스 우측 버튼에서 간단히 선택가능 (Exclude from Build)



추가하는 방법
동일하게 Project창에서 우측마우스로 New-> File or Folder 선택
아래와 같이 Advanced를 선택한 후 Linked Folder 및 Linked File 생성이 가능한다.

이때 아래의 우측 Variables을 이용하면 상위 설명했던 PATH에 정의된 Variables을 이용하여 찾게 만들수 있어 편리하다.
Linux로 생각하면 Makefile에 PATH를 정의하여 만들어 두고, 이를 이 변수를 이용하여 추가
한다고 생각하면 되겠다.

  1. Browser            :  직접 탐색기에서 찾아 등록 (절대PATH 이기에 추천을 안함)
  2. Variables           :  Property->Resource->Linked Resources
  3. Resource Filter   :  Property->Resource->Resource Filters  



  • 각 개별 Build Configuration 관련설정 방법 
기존프로젝트의 각 환경설정을 별도의 설정이 가능하여  큰 장점이 있다.
아래 부분은 상위 부분을 보면 쉽게 이해가 간다.
  1. Exclude From Build로 현재 Project에서 File을 제외
  2. (--include_path,-I)  변경 (아래 참조)
  3. (--define,-D)   변경 (아래 참조) 
  4. (--cmd_file,-@) (아래 참조)


--cmd_file 은 Compiler에게 옵션을 직접준다는 의미 이기때문에, 다양하게 본인이 직접 줄수 있을 것이다. (TI Compiler Manual 참조)
하지만 거의 --define xxxxx 1 으로 만 사용하는 것 같다.




3. Project의 Property->Build 

Build의 구성은 상위 Property->General에서 설정에 따라 변경이 되기때문에  주요 설명을 간단히 하고 넘어가겠다.

주로 ARM 계열 Compiler 일 것이지만, DSP or MSP430를 사용한다면 각각에 맞는 Compiler로 변경
  1. MPU Compiler 
  2. MPU Linker 
  3. MPU Hex Utility 

  • Build->Builder 
상위에서 설명한  Build Configuration에 맞게 세부 설정이 가능하다 아래에 보면 make 및 Build Location 도 각각의 Target에 맞게 설정이 가능하다. 



  • Build->Behaviour
Makefile의 실제 target 세부설정도 가능


  • Build->Steps
  1. Build 하기전에 실행해야 할 것 
  2. Build 후 실행해야 할 것
상위 것들을 설정이 가능하다 (일반적으로 batch file을 별도로 생성해서 위에 추가해서 넣는다.)
현재 나의 경우는 UBL을 ELF로 한 다음 아래 옵션을 별도로 추가하여 UBL의 bin 파일 생성했다.

"${PROJECT_ROOT}/postBuildStep_BOOT_NAND.bat" PROJECT_ROOT ${PROJECT_ROOT}\.. !


  • postBuildStep_BOOT_NAND.bat 분석 

상위 batch file을 분석을 해보면 argument로 PROJECT 변수와 변수 값을 받아 설정한다.
이 부분은 :process_arg를 보면 argument는 두개가 필요하며, 이는 %PROJECT_ROOT%에 필요한 설정이다.
hex470.exe를 이용하여 ubl2bin.cmd linkscript를 이용하여 a.out file에서 binary로 생성하는 것이다.
Linux에서 사용했던 uboot bin file 만드는 것과 동일하다.

@echo off
pushd ..\..\
setlocal

:process_arg
if "%1"=="" goto end_process_arg
set name=%1
set value=

:process_arg_value
if NOT "%value%"=="" set value=%value% %2
if "%value%"=="" set value=%2
shift
if "%2"=="!" goto set_arg
if "%2"=="" goto set_arg
goto process_arg_value

:set_arg
set %name%=%value%
shift
shift
goto process_arg
:end_process_arg

echo. > temp_postBuildStep_BOOT_NAND.bat

echo hex470.exe %PROJECT_ROOT%\UBL2BIN.cmd -o=%PROJECT_ROOT%\ubl_486arm_360ddr_ipnc_dm368.bin %PROJECT_ROOT%\NAND\UBL_DM36x_NAND_IPNC.out >> temp_postBuildStep_BOOT_NAND.bat

call temp_postBuildStep_BOOT_NAND.bat
del temp_postBuildStep_BOOT_NAND.bat

endlocal
popd

나의 경우도 상위 설정도 되어있지 않았으며, 본인이 직접 전체구조를 이해해서 수정하면서 실행하면 될 것 같다.
hex470.exe는 compiler 안에 있으며 이를 PROJECT_ROOT에 넣고 이를 해결하자
가능하다면 모든것을 PROJECT_ROOT PATH 기반에서 다 맞춰서 실행하도록 하자.



  • Build->Variables 
상위 Resource->Linked Resource->Path Variables 와 동일하게 설정 가능하며, 이 변수는 String ,Directory , PATH 설정이 가능하다



  • Build->Enviornment
Build 시 사용되는 환경변수라고 생각하면 될 것이며, 주로 PATH를 설정한다고 보면된다.


  • Build->Link Order
아래와 같이 Library Link 순서도 편집이 가능하다 


  https://www.youtube.com/watch?v=mN6SCwyxwbU&feature=em-subs_digest


  • Build->Dependencies 
아래와 같이 다른 Project를 연결하여 동작이 가능하다





3.1 Build->MPU Compiler

Build 내부에서는 ARM Compiler or MSP430 Compiler의 옵션을 맘대로 설정 가능하다
본인의 경우는 ARM을 이용하기 때문에 ARM이지만, MPU가 달라지면 이부분 역시 달라질 것이며,Compiler에 따라 설정도 변경이 될 것이다.
하지만 근본적으로 문제를 해결하는 방법들은 동일하니 크게 문제될 것이 없다.MPU에 따라 동일한 옵션들은 거의 유사할 것이다.

예를들자면 아래와 같다. 
  1. header 찾는 주소 
  2. define 하는 옵션 
  3. Linker option

  • ARM Compiler 예제 
아래는 ARM Comiler의 예제이며 아래와 같이 전체 옵션을 반드시 확인하자



  • ARM Compiler->Processor Options 
아래에서 abi 관련 설정 및 floating point 관련 설정 부분을 확인 가능하다
이 부분은 ARM에 관련 설정이니 반드시 확인하고 넘어가야한다.




  • *.h 못찾는 에러문제해결  (--include_path,-I)
Make 내부안을 수정하여 원하는대로 수정하면 좋겠지만, 그렇게 고치기에는힘들경우,
아래와 같이 GCC or TI Compiler의 옵션인 -I  부분을 찾아 관련부분 PATH들을 연결시켜주자.




  • define 선언문제 (--define,-D)
GCC or TI Compiler의 옵션이용하여 직접 #define 을 전체 적용을 해보자.
이 방법은 가능하면 간단한 것만 사용하자.
선언할 것이 많이 있다면, 다음 command 로 사용하자



  • Command File  (--cmd_file,-@)  ( Compiler Option)
추가된 File을 읽어 Compiler에게 File 안에 적용된 Option을 주는 기능이다.
이 기능을 사용하려면 Compiler의 Manual을 제대로 숙지해야겠지만,

간단하게  사용하는 법으로는 상위 #define도 정의하고  File로 구성한 다음 추가하여 적용이 가능하다.
만약 #define 할 것이 많다고 한다면,  상위 방법보다 이 방법이 더 편할 것이며, Configuration과 같이 저장이 되어서 편할 것이다.




  • 이외 다른기능 
ARM Compiler 내부에는 다양한 기능을 제공해서 일단 기본 옵션만 알아두지만,
아래의 기능들은 본인도 좀더 공부를 해봐야 알겠으며, 일단 관련링크만 연결해둔다.
  1. ULP Advisor 
  2. MISRA-C:2004

ULP Advisor
  http://processors.wiki.ti.com/index.php/ULP_Advisor

MISRA_C
  https://en.wikipedia.org/wiki/MISRA_C
  http://www.trace32.com/wiki/index.php/MISRA-C%EB%A5%BC_%EC%9D%B4%EC%9A%A9%ED%95%9C_%EC%95%88%EC%A0%84%ED%95%9C_%EC%BD%94%EB%93%9C_%EC%9E%91%EC%84%B1


3.2 Project의 Property->Build->MPU Linker 

ARM Linker의 File Search Path에    -l 옵션을 보자 ( static library )
아래는 library를 찾는 option이다.