CCS中的.gel文件

    CCS的GEL语言是一种交互式的命令,它是解释执行的,即不能被编译成可执行文件。它的作用在于扩展了CCS Studio的功能,可以用gel来调用一些菜单命令,对DSP的存储器进行初始化配置等。 对于不同型号的DSP,我们应选择相对应的GEL文件。

    当CCS Studio启动时,GEL文件加载到PC机的内存中,如果定义了StartUp()函数则执行该函数在CCS Studio(V2.3或更低的版本中),主机和目标板的初始化工作都在Startup()函数中执行。但是对于支持Connect /Disconnect的CCS Studio(V2.4或之后的版本,比如3.1版本,3.3版本),GEL文件可能并没有正确的执行。因为CCS Studio启动时和目标处理器之间的连接是断开的,当Startup()函数试图访问目标处理器时会出错。因此,V2.4或之后的版本,当CCS启动 时,用一个新的回调函数OnTargetConnect()来执行目标处理器的初始化工作。

    对于支持connect/disconnect的CCS环境,Startup()函数中尽量避免Get_Reset()、GEL_BreakPtAdd()、GEL_TextOUT()和GET_OpenWindow(),因为StartUp()执行时CCSStudio的任何控制窗口还没有打开。

我们对两种不同的gel文件进行对比,让大家更容易理解。

不支持Connect/Disconnect的CCSStudio GEL文件中的StartUp()函数:

             StartUp()

{

setup_memory_map();

GEL_Reset(); /* Do not call in StartUp() with CCStudio v2.4 or higher */

init_emif(); /* Do not call in StartUp() with CCStudio v2.4 or higher */

}

支持Connect/Disconnect的CCSStudio GEL文件中的StartUp()函数:

StartUp()

{

setup_memory_map();

}

    OnTargetConnect()函数在每一次和目标处理器建立连接时都被调用。进行绝对最小的系统初始化处理,保证CCSStudio在目标处 理器上处于一种可信赖的状态例如:禁止看门狗时钟、DSP复位结束。 对于某些平台,调用GEL_Reset()函数可使CCSStudio处于一种Good状态,可以通过测试来确定是否需要调用。

我们可看出后一种仅建立了存储映射。其他初始化dsp的工作交给了OnTargetConnect()函数去完成。下面我们以6437为例,gel的源码如下:

StartUp( )
{
    Setup_Memory_Map( );
}

OnTargetConnect( )
{
    Setup_Cache( );
    Setup_Pin_Mux( );               // Setup Pin Mux
    Setup_Psc_All_On( );            // Setup Power Domains
    Setup_PLL0_594_MHz_OscIn( );    // Setup Pll1 [DSP @ 594 MHz][Core 1.20V]
    Setup_PLL1_DDR_135_MHz_OscIn();
    Setup_Aemif_8Bit_Bus( );        // Setup Async-EMIF [8-bit bus]
  }

注意:GEL文件在CCS启动后常驻内存,在仿真器和目标系统上电的时候起到初始DSP的作用。在上电后再改变GEL文件将不会对DSP产生影响。
<think>好的,我现在需要回答用户关于CCS中cmd文件gel文件运行顺序的问题。首先,我得回忆一下之前用户提供的引用内容,看看有没有相关的信息。根据引用[3]中提到,cmd文件中的段加载命令负责将段内容加载到内存,还有段填充、CRC校验等命令。这说明cmd文件在程序加载时处理内存分配和段布局。而引用[4]中的cmd文件示例展示了MEMORY和SECTIONS指令,用于定义内存区域和段的存放位置,这属于链接阶段的配置。关于gel文件,引用[1]和[2]提到了CCS的配置步骤,比如目标配置文件和构建选项设置。Gel文件通常用于初始化硬件,比如设置PLL、时钟、外设等,这在CCS连接目标板时执行。用户可能想知道这两个文件的执行顺序是在启动过程中的哪个阶段。 接下来,我需要确定cmd和gel文件的执行顺序。根据TI的文档,gel文件在连接目标板时运行,进行硬件初始化。而cmd文件是在编译链接阶段由链接器处理,确定内存分配。因此,gel文件的初始化应该在cmd文件之前,因为硬件必须先配置好,才能正确加载程序到内存。需要验证这个顺序是否正确。例如,gel文件设置DDR控制器后,cmd文件才能将段分配到DDR区域。如果顺序颠倒,可能导致内存访问错误。此外,引用[3]中的函数执行命令可能依赖gel文件初始化的硬件状态。总结起来,运行顺序应该是:gel文件在连接目标板时执行硬件初始化,接着在编译链接阶段处理cmd文件进行内存分配。这样程序下载到目标板时,硬件已准备就绪,内存布局也正确。</think>在CCS开发环境中,cmd文件gel文件的运行顺序遵循明确的逻辑关系,其执行流程如下: ### 一、运行顺序解析 1. **GEL文件优先执行** GEL(General Extension Language)文件在**目标板连接阶段**首先执行,主要用于: - 初始化硬件寄存器(如PLL时钟、DDR控制器、外设使能)[^3] - 配置调试环境参数 - 执行复位操作 例如: ```c StartUp() { *PLL_CTRL_REG = 0x1A; // 设置系统时钟 *DDR_CONFIG = 0x3FF; // 初始化DDR } ``` 2. **CMD文件在编译链接阶段生效** CMD(链接器命令)文件在**工程构建阶段**由链接器解析,作用包括: - 定义内存区域划分(`MEMORY`指令) - 控制代码/数据段的物理地址分配(`SECTIONS`指令)[^4] - 处理符号保留(如中断向量表保留语句`--retain INTVECT`)[^4] ### 二、关键交互逻辑 - **依赖关系**:GEL文件配置的硬件参数(如DDR初始化)直接影响CMD文件中内存区域的有效性。若未正确初始化DDR,CMD中定义的`ARM_DDR2`区域将不可用[^4] - **时序验证方法**: ```c // 在GEL文件中添加寄存器打印 hotmenu InitBoard() { GEL_Text("DDR状态:%x\n", *DDR_STATUS_REG); // 验证初始化结果 } ``` 通过CCS控制台输出可确认GEL执行完成后再观察.map文件中段地址是否符合CMD配置[^2] ### 三、典型问题场景 | 场景 | 现象 | 根源分析 | |------|------|---------| | 程序加载后PC跑飞 | 未初始化时钟导致代码地址映射错误 | GEL未正确配置PLL | | 链接时报`section overlaps`错误 | CMD中内存区域长度小于实际需求 | MEMORY区块定义未考虑GEL初始化的实际可用空间 |
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值