CCS 프로젝트를 만들면 생기는 파일들에 대해서 알아보도록 하겠습니다.
먼저 아래 박스의 내용은 굳이 모르셔도 되는 파일들이 되겠습니다.
파일구조
기본적으로 CCS 프로젝트를 만들면 아래와 같이 파일들이 나타납니다.
아래 내용은 간단한 MSP430G2xx3 예제를 예시로 보여드리고 있습니다.
참고로 아래 이미지의 경우, 현재 2개 프로젝트(....P1_01.c 프로젝트와 ...P1_02.c 프로젝트)가 있으며, 현재는 제가 ...P1_01.c 이라는 프로젝트가 굵은 글씨로 표시되어 Active 되어 있다는 것을 나타내고 있습니다..
그럼 msp430g2xx3_P1_01.c 라고 되어 있는 MSP430Ware에서 땡겨온 프로젝트의 파일 구성에 대해서 알아보겠습니다.
먼저 위 이미지에서 보듯이 파일 구성을 간략히 살펴보도록 하겠습니다.
- includes 폴더 : includes 폴더는 말 그대로 본 프로젝트에서 사용하고자 하는 헤더파일들을 포함하고 있습니다.
기본적으로 자동으로 만들어 지는 경로(가령 MSP430의 경우 사용하려는 msp430의 디바이스 헤더 정보 경로등)가 포함되어 있습니다.
또한 사용자가 원하는 헤더파일이 특정 경로에 있다고 한다면 특정 경로를 Propoerties 에서 추가해 줄 수 있습니다.
방법은, 프로젝트 이름 위에서 마우스 우클릭 - Properties - Build - MSP430 Compiler - Include Options 에서 추가 할 수 있습니다. - Debug 폴더 : Debug 폴더는 컴파일이 수행 된 다음 바이너리 및 컴파일 결과물들이 저장되는 폴더입니다.
- targetConfigs 폴더 : 프로젝트를 생성할 때 target 디바이스를 설정하는데, 프로젝트 생성 완료 시 CCS가 알아서 ccxml 파일을 프로젝트에 넣어줍니다.
확장자가 ccxml 인 이 파일의 경우, 바이너리 다운로드/디버그 시 사용하고 있는 JTAG Emulator가 무엇인지, Target 디바이스는 어떤 디바이스인지의 정보를 담고 있습니다. 추가로 JTAG Emulator의 속도 및 여러가지 JTAG 연결과 관련한 정보가 담겨 있는 파일이라고 보시면 됩니다. - .cmd 파일 : 이 파일은 MCU의 메모리 구조에 대해서 정의해 놓은 파일입니다. 기본적으로 RAM, ROM에 대한 물리적인 메모리 정보가 담겨져 있고, 사용자가 원한다면 특정 정보에 대해 시작 주소를 설정하는 등의 논리적인 메모리 파티셔닝도 가능합니다.
- C, H 파일 : MCU를 동작시키는 C 언어 명령어가 들어가는 파일입니다.
이 프로젝트에서는 제가 mcu 디바이스를 한 번 바꾸어서 특수한 확장자가 2개씩 보이고 있습니다.
C 파일 및 H 파일을 제외한, 파일 확장자 명에 따라 각기 어떠한 기능을 하는 파일인지를 설명드리도록 하겠습니다. (몇 개 없쥬??)
*.cmd file
cmd 파일을 열어보시면 아시겠지만 해당 칩셋의 메모리 정보를 담고 있습니다.
크게 MEMORY라는 부분과 SECTION이라는 부분으로 나뉩니다.
- MEMORY : 해당 MCU의 Memory map을 명시해 놓았습니다.
- SECTION : CCS 컴파일러에서 분류하는 영역들을 MEMORY의 어떤 영역으로 지정해 놓을지 명시해 놓았습니다.
그럼 이 파일은 어떻게 이용이 될까요?
일반적으로 CCS와 같은 컴파일러는 컴파일과 링크를 거쳐 바이너리가 만들어 집니다.
컴파일 단계의 경우, MCU가 이해 할 수 있는 바이너리를 만들기 위한 중간 단계인 오브젝트 파일들이 논리적인 결함이 없는지를 판단하게 되고,
링크라고 불리는 단계에서는 다음과 같은 과정을 수행합니다.
1. 우리가 작성한 코드에서, 외부 라이브러리를 불러오는 경우, 이용한 라이브러리 사용에 논리적 결함이 없는지(해당 경로에 라이브러리가 있는지, 사용한 함수의 인자 사용에 문제가 없는지 등..) 확인 후 라이브러리 파일도 해당 프로젝트의 바이너리로 추가시킴.
2. 1번을 통해 단독으로 동작이 가능하게 된 정보를 메모리 주소와 결합시킴. 즉, 코드는 어느 주소에, 데이터는 어느 주소에 맵핑 시킬 지를 결정하게 됨.
여기서 .cmd 파일은 위 2번 과정에서 필요하게 되며, cmd에 정의해 놓은 물리, 논리적인 메모리 주소로 오브젝트 파일과 라이브러리를 바이너리로 만들 때 메모리 주소 위치를 결정하는데 참고하는 역할을 하게 됩니다.
- 아래 그림을 보시죠.
MEMORY 영역은 MCU가 가지고 있는 메모리가 시작위치가 어디며 그 크기가 어떠한지를 보여주고 있습니다.
SECTION 영역은 컴파일러 / 링크 과정에서 만들어진 코드와 데이터가 어디에 위치하게 될 것인지를 정의하게 됩니다.
SECTION 내용은 아래와 같이 이해할 수 있습니다.
.bss : {} > RAM .data : {} > RAM .... |
.bss 에 해당하는 정보는 RAM에 저장한다. .data에 해당하는 정보도 RAM에 저장하되 .bss 정보 다음 RAM 영역부터 저장한다. 즉, RAM의 정보는 .bss 부터 .data, ...의 순서대로 차곡차곡 쌓아 나간다. |
추가적으로 .bss, .data, .text 등의 정보는 아래 링크의 msp430 compiler 관련 자료를 참고 하시기 바랍니다.
일단은 위 내용을 이해하는 정도로만 아시면 될 것 같고요.
일반적인 경우에는 건드릴 필요가 없다는거..
이것만 기억하시면 되실 것 같네요..^^
*.ccxml :
.ccxml 파일은 확장자로 봐서는 CCS를 위한 XML 형태의 파일로 이해가 됩니다. 이것은 그냥 저의 뇌피셜이고,
공식적으로는 ccxml은 JTAG 에뮬레이터의 연결을 위해 필요한 파일입니다.
CCS에 새로운 프로젝트를 만들거나 기존 프로젝트를 가져올 경우 모두 ccxml 파일이 만들어 지거나 딸려오도록 되어 있습니다.
이 파일은 CCS 에서 더블 클릭을 하게 되면, 아래와 같이 JTAG 에뮬레이터의 속성(Connection)과 사용하려는 MCU(Board or Device)를 설정할 수 있습니다.
실제 이 파일의 경우에는 (MSP430 과 같은 간단한 MCU의 경우) Connection 과 Board or Device 외에는 설정할 만 한 것이 별로 없습니다.
참고로, MSP430 이외에 C2000이나 Tiva 등의 MCU나 Sitara의 Processor 등과 같이 조금 더 복잡한 칩의 경우, JTAG의 통신 속도를 조절하거나, 위 이미지의 하단부에 Advanced 탭에서 수정해 주어야 할 부분이 있을 수도 있으나, MSP430의 경우 크게 중요한 부분은 아닌 것 같습니다.
다만, 처음 보드를 뜨고 난 다음, JTAG 연결이 잘 안되는 경우에는 다음 단계로 테스트를 해 보시기 바랍니다.
- Connection이 잘 되어 있는가? 만일 MSP430의 경우, 현재 단독 보드가 연결되어 있는 경우 TI MSP430 USB2를 설정하면 안되는 것 같습니다.
- Device가 잘 선정되어 있는가?
- 위 두 가지가 잘 되어 있는데도 JTAG 연결이 잘 안된다면, JTAG 커넥션이 잘 되어 있는지 확인해 보아야 합니다.
VCC, GND, SBWTDIO, SBWTCK(2핀 JTAG의 경우), 또는 VCC, GND, TCK, TDO, TDI, TEST (4핀 JTAG) 가 잘 연결되어 있는지 확인해 보세요. - 위 연결도 잘 되어 있는데 연결이 안된다면, JTAG 핀과 같이 사용되고 있는 Reset 핀의 Cap 값과 R 값이 지정된 값보다 너무 크게 잡혀 있지는 않은지 확인해 보세요. (일반적으로 47kOhm, 2.2nF (또는 이 보다 작을것)을 리셋핀에 달아주도록 되어 있습니다.)
- 혹시 JTAG 이 고장났거나, 타겟 보드의 칩셋에 문제가 있는 것은 아닌지 확인해 봅니다.
참고로 Connection의 경우, TI MSP430 USB1, USB2, USB3이 있던데, 가끔 저는 CCS를 두 개 열어서 사용하려는 프로젝트 하나는 CCXML의 Connection을 MSP430 USB1으로, 다른 하나는 MSP430 USB2로 지정해서 각각의 CCS 화면에서 MSP430 보드 하나씩을 컨트롤 해서 디버깅 하는 경우도 있습니다.
사용 팁이니 참고 하시기 바랍니다.
<끝>
'[study]컴파일러툴.. > CCS' 카테고리의 다른 글
MCU 컴파일과 디버깅, GUI의 신개념.. dev.ti.com.. 두번째.. (0) | 2018.08.30 |
---|---|
MCU 컴파일과 디버깅, GUI의 신개념.. dev.ti.com.. (0) | 2018.08.30 |
CCS에서 프로젝트 작업 및 설치 시 기본적으로 주의할 사항.. (0) | 2017.12.15 |
MSP430ware 예제 설명.. (0) | 2017.12.14 |
CCS에서 MSP430Ware 이용한 프로젝트 생성 (0) | 2017.06.19 |