DSP CMD 파일
CMD 파일
명령 파일(Linker Command Files)을 접미사로 연결합니다.cmd 끝 - CMD 파일
기능: 저장 공간을 표시하고 저장 공간에 세그먼트를 분배합니다
작성: MEMMORY와 SECTIONS 두 가지 위조 명령을 사용한다.
프로그램 코드를 Flash 또는 RAM의 두 CMD 파일에 연결합니다.
COFF 개념
일반적인 대상 파일 형식(Common Object File Format) - 실행 가능한 바이너리 파일 형식으로 널리 사용되고 있습니다.
다음을 포함합니다.
사용 단계의 장점은 모듈화 프로그래밍을 장려하고 더욱 강력하고 유연한 방법을 제공하여 코드와 목표 시스템의 저장 공간을 관리하는 것이다.여기서 모듈화 프로그래밍은 프로그래머가 어느 것을 원하는지 자유롭게 결정할 수 있다는 뜻이다.일부 코드는 어떤 단락에 귀속된 후에 다른 처리를 가한다.예를 들어 이미 초기화된 데이터를 한 단락에 넣고, 초기화되지 않은 데이터는 다른 - 한 단락에 넣고, 혼합된 것은 한 단락에서 시작하는 것이 아니다.
컴파일러 세그먼트 프로세스
1. 모든 원본 파일을 독립된 목표 파일로 컴파일하고 (접미사.obj로 끝) 목표 파일마다 자신의 세그먼트를 포함합니다.2. 연결기는 이 목표 파일의 같은 세그먼트 이름 부분을 연결하여 최종 실행 가능한 파일을 생성합니다. (접미사. out로 끝납니다.)
초기화된 세그먼트
.text: C 언어의 문장을 컴파일할 때 생성된 어셈블리 명령 코드가 여기에 저장됩니다.
.cinit: 전역과 정적 변수를 초기화하는 상수를 저장합니다.
.const: 문자열의 상수와 초기화된 전역 변수와 정적 변수 (const에서 설명함) 의 초기화와 설명을 포함합니다.
.econst: 문자열의 상수와 초기화된 전역 변수와 정적 변수 (far const에서 설명함) 를 포함하는 초기화와 설명 .pinit: 전역 구조기 (C++) 프로그램 목록입니다.
.switch: switch 문장에서 나오는 상수 표를 저장합니다.
초기화되지 않은 세그먼트
세그먼트의 스토리지 특성
세그먼트의 스토리지 특성
세그먼트
스토리지 유형
할당된 스토리지 공간
.text
ROM/RAM(Flash)
PAGE0
.cinit
ROM/RAM(Flash)
PAGE0
.const
ROM/RAM(Flash)
PAGE1
.econst
ROM/RAM(Flash)
PAGE1
.pinit
ROM/RAM(Flash)
PAGE0
.switch
ROM/RAM(Flash)
PAGE0/PAGE1
.bss
RAM
PAGE1
.ebss
RAM
PAGE1
.stack
RAM
PAGE1
.system
RAM
PAGE1
.esystem
RAM
PAGE1
# pragma CODE를 통해SECTION 정의 세그먼트
ROM/RAM(Flash)
PAGE0
# pragma DATA를 통해SECTION 정의 세그먼트
RAM
PAGE1
CMD 파일 작성
MEMORY 위령【메모리 모형 구축】
역할:스토리지 공간 표시
구문:
MEMEORY
{
PAGE 0 : name 0[attr]:origin = constant,length = constant
PAGE n : name n[attr]:origin = constant,length = constant
}
/*
PAGE: 。PAGE n 255;
name: 。 1~8
, , ;
attr: , :R- 、W- 、X-
、I- 。 ;
origin: ;
length:
*/ 예:
MEMORY
{
PAGE 0 :
/* BEGIN is used for the "boot to SARAM" bootloader mode */
BEGIN : origin = 0x000000, length = 0x000002
RAMM0 : origin = 0x000050, length = 0x0003B0
RAML0L1 : origin = 0x008000, length = 0x000D00
RESET : origin = 0x3FFFC0, length = 0x000002
IQTABLES : origin = 0x3FE000, length = 0x000B50 /* IQ Math Tables in Boot ROM */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008C /* IQ Math Tables in Boot ROM */
IQTABLES3 : origin = 0x3FEBDC, length = 0x0000AA /* IQ Math Tables in Boot ROM */
BOOTROM : origin = 0x3FF27C, length = 0x000D44
PAGE 1 :
BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */
RAMM1 : origin = 0x000480, length = 0x000380 /* on-chip RAM block M1 */
RAML2 : origin = 0x008D00, length = 0x000300
RAML3 : origin = 0x009000, length = 0x001000
} SECTION 위조 명령 [세그먼트 배치 위치]
역할: 세그먼트를 저장 공간에 분배하고 세그먼트의 실제 하드웨어 주소 공간을 지정합니다.
구문:
SECTIONS
{
name 0 :> ,PAGE =
name n :> ,PAGE =
}
/*
name: ;
: MEMORY ;
PAGE: 。
*/ 예:
SECTIONS
{
codestart : > BEGIN, PAGE = 0
ramfuncs : > RAMM0 PAGE = 0
.text : > RAML0L1, PAGE = 0
.cinit : > RAMM0, PAGE = 0
.pinit : > RAMM0, PAGE = 0
.switch : > RAMM0, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1
.ebss : > RAML2, PAGE = 1
.econst : > RAML2, PAGE = 1
.esysmem : > RAML2, PAGE = 1
IQmath : > RAML0L1, PAGE = 0
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
}