'TMS320'에 해당되는 글 58건

  1. 2014.07.18 CMD파일
  2. 2014.07.17 rts2800_xxx.lib
  3. 2014.07.17 GlobalVariableDefs.c
  4. 2014.07.17 TMS UserGuide
  5. 2014.07.17 [CCS V5]#10010 error, #10265
  6. 2014.07.17 [CCS V5]trouble setting breakpoint with the action 1
  7. 2014.07.17 [CCS V5]no source available
  8. 2014.07.17 [CCS V5] can not find boot28.inc
TMS320/Study2014. 7. 18. 00:10

cmd파일, 커맨드 파일이라고 하는것 같다.

 그 구조를 뜯어보면 아래처럼 되어있다.

 

/*
// TI File $Revision: /main/3 $
// Checkin $Date: April 23, 2007   09:09:27 $
//###########################################################################
//
// FILE:    F2812_EzDSP_RAM_lnk.cmd
//
// TITLE:   Linker Command File For F2812 eZdsp examples that run out of RAM
//          This linker file assumes the user is booting up in Jump to H0 mode
//
//###########################################################################
// $TI Release: DSP281x C/C++ Header Files V1.20 $
// $Release Date: July 27, 2009 $
//###########################################################################
*/

/* ======================================================
// For Code Composer Studio V2.2 and later
// ---------------------------------------
// In addition to this memory linker command file,
// add the header linker command file directly to the project.
// The header linker command file is required to link the
// peripheral structures to the proper locations within
// the memory map.
//
// The header linker files are found in <base>\DSP281x_Headers\cmd
//  
// For BIOS applications add:      DSP281x_Headers_BIOS.cmd
// For nonBIOS applications add:   DSP281x_Headers_nonBIOS.cmd   
========================================================= */

/* ======================================================
// For Code Composer Studio prior to V2.2
// --------------------------------------
// 1) Use one of the following -l statements to include the
// header linker command file in the project. The header linker
// file is required to link the peripheral structures to the proper
// locations within the memory map                                    */

/* Uncomment this line to include file only for non-BIOS applications */
/* -l DSP281x_Headers_nonBIOS.cmd */

/* Uncomment this line to include file only for BIOS applications */
/* -l DSP281x_Headers_BIOS.cmd */

/* 2) In your project add the path to <base>\DSP281x_headers\cmd to the
   library search path under project->build options, linker tab,
   library search path (-i).
/*========================================================= */

 

MEMORY
{
PAGE 0 :
   /* For this example, H0 is split between PAGE 0 and PAGE 1 */ 
   /* BEGIN is used for the "boot to HO" bootloader mode      */
   /* RESET is loaded with the reset vector only if           */
   /* the boot is from XINTF Zone 7.  Otherwise reset vector  */
   /* is fetched from boot ROM. See .reset section below      */
  
   RAMM0      : origin = 0x000000, length = 0x000400
   BEGIN      : origin = 0x3F8000, length = 0x000002            
   PRAMH0     : origin = 0x3F8002, length = 0x001FFE
   RESET      : origin = 0x3FFFC0, length = 0x000002          

        
PAGE 1 :

   /* For this example, H0 is split between PAGE 0 and PAGE 1 */

   RAMM1    : origin = 0x000400, length = 0x000400
   RAML1    : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
/*   DRAMH0   : origin = 0x3f9000, length = 0x001000 */       
}
 
 
SECTIONS
{
   /* Setup for "boot to H0" mode:
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code. 
      Place this section at the start of H0  */

   codestart        : > BEGIN,       PAGE = 0
   ramfuncs         : > PRAMH0       PAGE = 0 
   .text            : > PRAMH0,      PAGE = 0
   .cinit           : > PRAMH0,      PAGE = 0
   .pinit           : > PRAMH0,      PAGE = 0
   .switch          : > RAMM0,       PAGE = 0
   .reset           : > RESET,       PAGE = 0, TYPE = DSECT /* not used, */
  
   .stack           : > RAMM1,       PAGE = 1
   .ebss            : > RAML1,      PAGE = 1
   .econst          : > RAML1,      PAGE = 1     
   .esysmem         : > RAML1,      PAGE = 1

    
}

역할을 메모리 영역에 구조체를 배치해 준다는것 같다,

 

예를들어 abc라는 구조체를 DSP의 0x12345라는 주소에 집어넣고자 한다면

 

본 소스에 선처리 잡업 코드로

#pragma Data_SECTION(abc,"ABC");

를 해주고

 

커맨드 파일 내의 SECTION안에

SECTION{

...

ABC : >ASDF, PAGE = 1

...

}

 

MEMORY{

 

PAGE 1:

...

ASDF : origin = 0x12345, length = 0x1000

...

}

 

위와같이 해주면 ASDF라는 메모리 영역이 0x12345 에서 시작하여 0x1000의 크기를 갖으며

ABC로 이름붙여진 abc구조체가 그 영역에 들어가게 된다.

 

이러한 MEMORY{} 구간의 정의들은 DSP메모리맵을 기준으로 할당된다. 따라서 자신이 사용하는 DSP에 맞는 cmd파일을 적용하도록 하자.

 

이 설정은 properties의 General의 맨 하단의 두번째의 메뉴인 Linker command file을 통해서 링크 시킬 수 있다.

'TMS320 > Study' 카테고리의 다른 글

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
rts2800_xxx.lib  (0) 2014.07.17
GlobalVariableDefs.c  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:58

공부하는 내용

rts 라이브러리가 가지는 의미, 역할


Start!


프로젝트에 우클릭 메뉴로 들어가는 Properties의 General에서 제일 하단의 Run Time Suppor Library를 선택할 수 있다.

DSP281x_CodeStartBranch.asm 에 의해 호출되는 이 라이브러리는 Library가 의미하는바와 같이 '공통적으로 쓰일 수 있는 함수를 모아 놓은 파일'일 것이다. 그리고 rts는 Runtime, 실행시를 의미한다.

 

우리가 개발할 때, C코드로 작성하는데 이것이 아무런 준비도 없이 실행될까? 포인터 등 각종 기법을 사용한 이 코드가 실행되기 위해서는 이를 위한 적절한 환경 및 준비가 필요할 것이다.(초기화된 데이터, 포인터, 전역변수 등등) 그런데 이러한 작업은 플랫폼에 관계없이 모든 C프로그램의 공통적인 부분이기에 Library화 해놓는다. 이것이 rts인 것이다.

 

이러한 rts2800_~.lib는 C언어로 작성된, 프로그램을 실행시키기 전에 실행되는 함수들의 집합 이라고 할 수 있다.

 

rts2800.lib               는 24계열의 DSP에

rts2800_ml.lib           는 28계열

rts2800_fpu3232.lib    는 FPU(Floating Point Unit)가 내장된 28계열에서 사용하며

 

더 빠른 부동소수점 연산을 위해서는 rts2800_fpu32_fast_suplement.lib를 함께 컴파일 한다.

 

여기까지가 대략적인 의의이고 좀 더 자세히 알고싶다면 아래로!

---------------------------------------------------------------------------------------------------------

rts 라이브러리의 역할은 아래와 같다. 핸드북보다 조금 길게 설명한다.

 

1.Stack확보 및 Stack Pointer 설정

Stack은 메모리의 일종으로 우리가 사용하는 C함수간의 데이터 전송시에 이용된다.(함수 A에서 함수 B에 변수를 전달 한다던가)

이 때, 우선 Ram 영역에 Stack 메모리를 확보(할당)하는 작업을 해 두어야 하는데 이를 Run Time Support Library가 해준다. 

 

C언어를 좀 해보신 분들은 포인터의 개념을 잘 알고 있을 것이다. 간단하게 주소 개념으로 설명하자면, 우리가 코딩한 함수나 데이터는 어딘가에 저장되어 있을 것이고 이 데이터에 접근하려면 이들이 어디에 저장되어 있는지 알아야 한다. 즉 '어디에 저장되어 있는가'를 나타내는 주소를 저장하는 변수가 포인터라고 할 수 있다. Stack Pointer는 이 Stack메모리의 주소를 저장하고 있을 것이다. 그리고 이의 설정 역시 Run Time Support Library가 한다.

 

2.연산 비트 설정

math.h가 요구하는 연산을 정확하게 처리하기 위해서, CPU내부의 각종 상태 비트들을 설정한다.

자세히는 아직 모르겠지만, math.h에서 미리 구성해놓은 연산(상수, 삼각함수 포함하여)을 좀 더 효율적이고 정확하게 처리하기 위한 비트설정을 미리 해두고 실제 우리가 함수를 사용할 때는 바로 그 비트들에 접근하여 연산한다고 생각하면 되겠다.

 

3.데이터 초기화

 상수변수의 초기화를 코드 실행 전에 해준다.

 무슨 말인가 하면 우리가 전역변수 등에 int x = 3; 이라는 선언을 했다고 했을 때, 이는 main의 실행 전에 이루어져야 하는 작업이다. 또한 이 x라는 변수는 Run Time중에 변경 가능한 값이다. 즉, 휘발성 이라는 것이다. 따라서 Ram과 같은 휘발성(volatile)메모리에서 운용 되어야 한다.

 rts는 플래시 메모리에 저장된 x=3이라는 상수 변수를, 적절한 램 영역에 x=3 이라고 초기화 해준다.

 

주의

 이러한 변수의 초기화를 굉장히 많이 해줄 때 주의할 사항이 있다. 만약 DSP281_CodeStartBranch.asm에서 Watchdog의 사용여부를 설정하는 것이 아니라, main()함수에서 이를 설정한다면, 문제가 생길 수 있다. rts가 상수 변수의 초기화를 하는데, 8비트 카운터인 Watchdog이 2^8인 256을 헤아리는 동안 CPU가 적절한 동작을 하지 않는다면, Watchdog이 CPU에 이상이 있다고 판단하여 CPU를 리셋시킬 수 있다. 따라서 Watchdog의 사용설정을 main에서 한다면 이 상수변수 초기화를 짧게 해주어야 하거나, 차라리 어셈블리 내에서 설정하는것이 나을 수도 있다.

 

※개인적인 의견이지만 어셈블리에서 사용을 정지시키고 상수변수 초기화 후 main()에 들어와서 다시 사용하도록 해야하지 않을까?

 

추가

.C2000에서 lib파일을 만들기 위한 소스 코드가 rts.src이다.

.핸드북을 보면 CodeStartBranch에서 _c_int00 이라는 코드가 있다. rts.src 코드의 시작점이 _c_int00이다. 즉, DSP281x_CodeStartBranch.asm에 의해서 rts.src가 fms(rts2800_ml.lib)를 사용할 수 있게 해주는 것이다. 그리고 rts.src는 마지막에 call _main을 수행하여 main 함수를 호출한다.

.call _main의 '_'는 C코드와 어셈블리 코드가 상호 호출하는 레이블을 구분하기 위한 기호이다. 따라서 '_'기호를 보면 어셈블리와 C에서 상호 사용되는 것이라고 이해하면 된다.

'TMS320 > Study' 카테고리의 다른 글

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
GlobalVariableDefs.c  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:40

제공해주는 두 종의 자료 DSP281x_common, DSP2812_headers가 있다.

여기서 DSP2812_headers의 source에 DSP281x_GlobalvariableDefs.c 가 있다.

이는 DSP281x_Device.h를 인클루드 하며 이는 또한 SysCtrl.h를 포함한 각종 헤더파일들을 인클루드 한다.

 

GlobalvariableDefinition. 즉, 전역변수 정의 인데 즉 DSP의 각종 레지스터들에 대한 정보를 포함하고 있다고 할 수 있겠다.

 

DSP의 비트필드(레지스터를 맵처럼 정돈해 놓은 구조체들)와 주변회로(GPIO,SCI,CAN,SPI..등등)을 변수처럼 불러서 사용할 수 있도록 기본 레지스터 설정 함수들이 짜여져 있는 것이다.

'TMS320 > Study' 카테고리의 다른 글

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:28

사용중인 DSP는 TMS320F2812 이다.

이에 대한

 

Datasheet

Application Notes

UserGuide

를 이용하여 공부한다

 

아래 블로그에서 찾아서 사용하자

:http://blog.naver.com/zeratool2/80105232899

'TMS320 > Study' 카테고리의 다른 글

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
GlobalVariableDefs.c  (0) 2014.07.17
Posted by 십자성군
TMS320/Error 해결2014. 7. 17. 18:29

프로젝트의 properties로 들어가서

General의 runtimesupport library에 rts2800_ml.lib 추가

'TMS320 > Error 해결' 카테고리의 다른 글

중요! Stack과 Heap size 설정  (0) 2016.09.09
Illegal isr problem  (0) 2016.09.08
[CCS V5]trouble setting breakpoint with the action  (1) 2014.07.17
[CCS V5]no source available  (0) 2014.07.17
[CCS V5] can not find boot28.inc  (0) 2014.07.17
Posted by 십자성군
TMS320/Error 해결2014. 7. 17. 18:26

참조 : http://e2e.ti.com/support/development_tools/code_composer_studio/f/81/p/257174/901118.aspx

 

F28xx 장치를 사용하고 플래시로 코드할 경우 breakpoints의 갯수가 한정된다. 이 한정된 갯수를 넘을경우 에러가 발생한다.

 

'TMS320 > Error 해결' 카테고리의 다른 글

중요! Stack과 Heap size 설정  (0) 2016.09.09
Illegal isr problem  (0) 2016.09.08
[CCS V5]#10010 error, #10265  (0) 2014.07.17
[CCS V5]no source available  (0) 2014.07.17
[CCS V5] can not find boot28.inc  (0) 2014.07.17
Posted by 십자성군
TMS320/Error 해결2014. 7. 17. 18:24

 

'TMS320 > Error 해결' 카테고리의 다른 글

중요! Stack과 Heap size 설정  (0) 2016.09.09
Illegal isr problem  (0) 2016.09.08
[CCS V5]#10010 error, #10265  (0) 2014.07.17
[CCS V5]trouble setting breakpoint with the action  (1) 2014.07.17
[CCS V5] can not find boot28.inc  (0) 2014.07.17
Posted by 십자성군
TMS320/Error 해결2014. 7. 17. 18:24

 

'TMS320 > Error 해결' 카테고리의 다른 글

중요! Stack과 Heap size 설정  (0) 2016.09.09
Illegal isr problem  (0) 2016.09.08
[CCS V5]#10010 error, #10265  (0) 2014.07.17
[CCS V5]trouble setting breakpoint with the action  (1) 2014.07.17
[CCS V5]no source available  (0) 2014.07.17
Posted by 십자성군