DSP

DSP28377 -CMD文件(一)

2019-07-13 11:25发布

DSP28377 -CMD文件(一) DSP2837x_Headers_nonBIOS.cmd,该文件无论是烧写到Flash或是RAM中都可以用,在所有工程中也是通用的,其重要的作用是把外设寄存器的数据映射到对应的存储空间中,例如在F2837xD_GlobalVariableDefs.c中,一ADCA寄存器为例。 #ifdef __cplusplus #pragma DATA_SECTION("AdcaRegsFile") #else #pragma DATA_SECTION(AdcaRegs,"AdcaRegsFile"); #endif volatile struct ADC_REGS AdcaRegs; 用volatile定义变量告诉编译器该变量是变化的,该关键字的详解 由上可知AdcaRegs是一个结构体变量名其定义在F2837xD_Adc.h中,通过预处理命令#pragma为该结构体定义一个名为AdcaRegsFile的数据段。F2837x_Headers_nonBIOS_cpu1.cmd,定义如下: MEMORY {  PAGE 0:    /* Program Memory */    PAGE 1:    /* Data Memory */      ADCA_RESULT   : origin = 0x000B00, length = 0x000020    ADCB_RESULT   : origin = 0x000B20, length = 0x000020    ADCC_RESULT   : origin = 0x000B40, length = 0x000020    ADCD_RESULT   : origin = 0x000B60, length = 0x000020      ADCA          : origin = 0x007400, length = 0x000080    ADCB          : origin = 0x007480, length = 0x000080    ADCC          : origin = 0x007500, length = 0x000080    ADCD          : origin = 0x007580, length = 0x000080      ANALOG_SUBSYS : origin = 0x05D180, length = 0x000080   };    SECTIONS { /*** PIE Vect Table and Boot ROM Variables Structures ***/   UNION run = PIE_VECT, PAGE = 1    {       PieVectTableFile       GROUP       {          EmuKeyVar          EmuBModeVar          FlashCallbackVar          FlashScalingVar       }    }      AdcaResultFile        : > ADCA_RESULT,  PAGE = 1    AdcbResultFile        : > ADCB_RESULT,  PAGE = 1    AdccResultFile        : > ADCC_RESULT,  PAGE = 1    AdcdResultFile        : > ADCD_RESULT,  PAGE = 1      AdcaRegsFile          : > ADCA,         PAGE = 1    AdcbRegsFile          : > ADCB,         PAGE = 1    AdccRegsFile          : > ADCC,         PAGE = 1    AdcdRegsFile          : > ADCD,         PAGE = 1   }   在MEMORY中定义一个存储空间ADCA,它的起始地址和长度,SECTIONS伪指令把AdcaRegsFile数据段装载到名称为ADCA的存储空间中。结构体AdcaRegs的具体位置就确定了,所以通过这几层映射的关系,当向AdcaRegs写数据时即可准确的写入DSP内部寄存器所在的存储器的位置。由此看见,CMD的作用就是为程序代码和数据分配存储空间。