DSP CMD 파일

4754 단어 DSPF28035 노트dsp
Pragma 위조 명령:https://blog.csdn.net/LGM_1874/article/details/107658223
CMD 파일
명령 파일(Linker Command Files)을 접미사로 연결합니다.cmd 끝 - CMD 파일
기능: 저장 공간을 표시하고 저장 공간에 세그먼트를 분배합니다
작성: MEMMORY와 SECTIONS 두 가지 위조 명령을 사용한다.
프로그램 코드를 Flash 또는 RAM의 두 CMD 파일에 연결합니다.
COFF 개념
일반적인 대상 파일 형식(Common Object File Format) - 실행 가능한 바이너리 파일 형식으로 널리 사용되고 있습니다.
다음을 포함합니다.
  • (.lib) 라이브러리 파일
  • (.obj) 대상 파일
  • (.out) 최종 실행 파일
  • 단락 개념
    사용 단계의 장점은 모듈화 프로그래밍을 장려하고 더욱 강력하고 유연한 방법을 제공하여 코드와 목표 시스템의 저장 공간을 관리하는 것이다.여기서 모듈화 프로그래밍은 프로그래머가 어느 것을 원하는지 자유롭게 결정할 수 있다는 뜻이다.일부 코드는 어떤 단락에 귀속된 후에 다른 처리를 가한다.예를 들어 이미 초기화된 데이터를 한 단락에 넣고, 초기화되지 않은 데이터는 다른 - 한 단락에 넣고, 혼합된 것은 한 단락에서 시작하는 것이 아니다.
    컴파일러 세그먼트 프로세스
    1. 모든 원본 파일을 독립된 목표 파일로 컴파일하고 (접미사.obj로 끝) 목표 파일마다 자신의 세그먼트를 포함합니다.2. 연결기는 이 목표 파일의 같은 세그먼트 이름 부분을 연결하여 최종 실행 가능한 파일을 생성합니다. (접미사. out로 끝납니다.)
    초기화된 세그먼트
    .text: C 언어의 문장을 컴파일할 때 생성된 어셈블리 명령 코드가 여기에 저장됩니다.
    .cinit: 전역과 정적 변수를 초기화하는 상수를 저장합니다.
    .const: 문자열의 상수와 초기화된 전역 변수와 정적 변수 (const에서 설명함) 의 초기화와 설명을 포함합니다.
    .econst: 문자열의 상수와 초기화된 전역 변수와 정적 변수 (far const에서 설명함) 를 포함하는 초기화와 설명 .pinit: 전역 구조기 (C++) 프로그램 목록입니다.
    .switch: switch 문장에서 나오는 상수 표를 저장합니다.
    초기화되지 않은 세그먼트
  • .bss: 전역 변수와 국부 변수를 위한 공간입니다.전기가 들어갈 때...cinit 공간에서의 데이터를 복사하여 저장합니다.bs 공간에서
  • .ebss: 큰 레지스터(. ml) 모드를 사용할 때의 전역 변수와 정적 변수를 위한 공간을 프로그램에서 전원을 켤 때cinit 공간에서의 데이터가 복사되어 존재합니다.ebss 중.
  • .stack: 시스템 창고에 저장된 공간으로 함수와 변수를 전달하거나 국부 변수에 공간을 분배하는 데 사용됩니다.
  • .system:.동적 스토리지에 예약된 공간을 할당합니다.매크로 함수가 있으면 이 공간은 매크로 함수에 의해 사용되며, 없으면 이 공간은 0으로 보존됩니다.
  • .esysmem: 동적 저장소에 예약된 공간을 분배합니다.만약far 함수가 있다면 이 공간은 상응하는 점용을 하고, 없으면 이 공간은 0으로 보존됩니다.

  • 세그먼트의 스토리지 특성
    세그먼트의 스토리지 특성
    세그먼트
    스토리지 유형
    할당된 스토리지 공간
    .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
    }

    좋은 웹페이지 즐겨찾기