转自:http://blog.csdn.net/azhgul/article/details/6660960
最近刚在研究Davinci系,特此MARK下,以资后续学习之用。

DSP的Gel作用

1 GEL文件基本作用

当CCSStudio启动时,GEL文件加载到PC机的内存中,如果定义了StartUp()函数则执行该函数在CCSStudio(V2.3或更早的版本中),主机和目标板的初始化工作都在Startup()函数中执行但是对于支持Connect/Disconnect的CCSStudio(V2.4或之后的版本,尤其3.1版本),这样的GEL文件有可能没有正确的执行,因为CCSStudio启动时和目标处理器是断开的这个时候,当Startup()函数试图访问目标处理器时会出错

因此,V2.4或之后的版本,尤其3.1版本CCS启动时候,一个新的回调函数OnTargetConnect()来执行目标处理器的初始化工

2 GEL回调函数

2.1 Startup()函数

如果指定的GEL文件中包含Startup()函数,当 CCSStudio启动时执行Startup()函数支持Connect/Disconnect的CCSStudio的启动时,Startup()函数中 不包括访问目标处理器的代码,目标处理器由回调函数OnTargetConnect()来初始化

推荐:

l         建立基本的CCSStudio内存映射关系(不需要访问目标处理器)

l         任何不需要访问目标处理器的基本初始化

不推荐:

l         Get_Reset()(该函数通过仿真器复位目标处理器)

l         通过GEL_BreakPtAdd()设置断点

l         GEL_TextOUT()和GET_OpenWindow(),因为StartUp()执行时CCSStudio的任何控制窗口还没有打开

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

/* The StartUp() function is called each time CCS is started. */

/* Customize this function to perform desired initialization. */

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()函数:

/* The StartUp() function is called each time CCS is started. */

/* Customize this function to perform desired initialization */

/* that will not access the target. */

StartUp()

{

setup_memory_map();

}

2.2 OnTargetConnect()函数

绝对最小的系统初始化处理,保证CCSStudio在目标处理器上处于一种可信赖的状态例如:禁止看门狗时钟DSP复位结束

每一次和目标处理器建立连接时都调用OnTargetConnect()函数

/* OnTargetConnect() is called every time a target is connected.*/

/* Its execution finishes before anything else occurs. Customize*/

/* this function to perform essential target initialization. */

OnTargetConnect()

{

// place critical target initialization steps here

GEL_Reset();

init_emif();

}

对某些平台,必须调用GEL_Reset()函数使得CCSStudio处于一种Good状态,可以通过测试来确定是否需要调用GEL_Reset()函数应该尽可能的降低GEL startup functions复杂度-包括减少GEL_Reset()的调用

2.3 OnPreFileLoaded()函数

在加载program/symbol(.out)文件之前该回调函数执行在该函数中执行另外的目标处理器初始化操作以保证程序可以加载和调试是一个好的选择

/* This function is called automatically when the 'Load Program'*/

/* Menu item is selected. */

OnPreFileLoaded()

{

FlushCache();

IER = 0;

IFR = 0;

init_emif();

}

2.4 OnReset()函数

当目标处理器复位后该函数被调用如果你需要每次重新启动程序设计了软复位,GEL_Restart()在此处调用

/* This function is called automatically after a SW Reset has been executed.

OnReset(int nErrorCode)

{

init_emif();

}

2.5OnRestart()函数

当程序复位时调用该函数

This function is called by CCS when you do Debug->Restart. The goal is to put the C6x into a known good state with respect to cache, edma and interrupts. Failure to do this can cause problems when you restart and run code multiple times.

OnRestart(int nErrorCode )

{

Turn off L2 for all EMIFA CE spaces. App should manage these for coherency

GEL_TextOut("Turn off cache segment\n");

*(int *)0x1848200 = 0; /* MAR0 */

*(int *)0x1848204 = 0; /* MAR1 */

*(int *)0x1848208 = 0; /* MAR2 */

*(int *)0x184820c = 0; /* MAR3 */

/* Disable EDMA events and interrupts and clear any pending events. */

GEL_TextOut("Disable EDMA event\n"); */

*(int *)0x01A0FFA8 = 0; /* CIERH */

*(int *)0x01A0FFB4 = 0; /* EERH */

*(int *)0x01A0FFB8 = 0XFFFFFFFF; /* ECRH */

*(int *)0x01A0FFE8 = 0; /* CIERL */

*(int *)0x01A0FFF4 = 0; /* EERL */

*(int *)0x01A0FFF8 = 0xFFFFFFFF; /* ECRL */

/* Disable other interrupts */

IER = 0;

IFR = 0;

}

3 存储器映射

CCSStudio存储器映射告诉调试器目标处理器的那些存储区域可以访问那些不能访问CCSStudio存储器映射一般在StartUp()函数种执行

3.1 GEL_MapAdd()函数

该函数添加一个存储区域到存储区映射中

3.2 GEL_MapOn()和GEL_MapOff()函数

可以调用GEL_MapOn() or GEL_MapOff()来打开或关闭存储区映射当存储区映射关闭时,CCSStudio假定可以访问所有的存储区空间

3.3 GEL_MapReset()函数

GEL_MapReset()函数清除所有的存储区映射没有存储区映射时,缺省设置是所有的存储区空间都不能访问

4 尽量避免使用GEL初始化

可以考虑在GEL文件中使用GEL_MapAdd()建立存储区映射以准许CCSStudio可以调试,但是不在GEL文件中执行外设设置例如:EMIF寄存器初始化看门狗禁止

因为GEL语法和C兼容,inif_emif()函数可以在.c文件中实现,和应用程序链接在一起但是要注意以下几点:

使用volatile来保证变量不被优化例如:

*(volatile int *)EMIFA_SDRAMTIM = 0x00000618; /* SDRAM timing (refresh) */       在编译调试过程中避免在GEL文件中进行外设设置,当到达了最终程序时,需要一个智能加载软件从FLASH或主机加载程序对EMIF进行设置,然后通过 (E)DMA或memcpy()拷贝程序/数据

DSP的Gel作用的更多相关文章

  1. DSP中.gel文件的作用

    GEL是CCS提供的一种解释语言,使用该语言写出的GEL,函数具有两在功能,一是配置CCS工作环境,二是直接访问目标处理器DSP(包括DSP软/硬仿真器).用户可以使用GEL函数完成类似于宏操作的自动 ...

  2. php http头设置相关信息

    HTTP 状态码 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response. HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别 1XX 提示信 ...

  3. request 和response

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

  4. HTTP详解2-请求、响应、缓存

    1. HTTP请求格式 做过Socket编程的人都知道,当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方怎么干.HTTP协议传输的消息 ...

  5. Http协议之Request和Response

    GET / HTTP/1.1表示向服务器用GET方式请求首页,使用HTTP/1.1协议 Cache-Control作用: 用来指定Response-Request遵循的缓存机制.各个指令含义如下Cac ...

  6. HTTP协议(转自:小坦克博客)

    原文地址:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html HTTP协议详解 当今web程序的开发技术真是百家争鸣,ASP ...

  7. HTTP详解(2)

    HTTP详解(2)-请求.响应.缓存 分类: 网络知识2013-03-17 16:45 1969人阅读 评论(0) 收藏 举报   目录(?)[+]   1. HTTP请求格式 做过Socket编程的 ...

  8. (转)HTTP协议(2)

    转自:http://kb.cnblogs.com/page/130970/  作者 :小坦克 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无 ...

  9. HTTP协议1之协议详解--转

    当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...

随机推荐

  1. MementoPattern(备忘录模式)

    /** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...

  2. Ubuntu下配置apache开启https

    一.HTTPS简述随着网络的日常,信息安全越来越重要,传统的网站都是http协议明文传输,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输.身份认证的网络协议,比http协议安全. 那ht ...

  3. vim环境变量配置、背景色配置

    我们使用vi或者vim的时候,如果想要显示行号,可能会这样做:切换到命令模式,然后输入set nu,再按回车键就显示了:还有就是咱们在编写程序的时候,有的时候会希望按下回车键后,光标不是每次都在行首, ...

  4. Linux设备管理(三)_总线设备的挂接

    扒完了字符设备,我们来看看平台总线设备,平台总线是Linux中的一种虚拟总线,我们知道,总线+设备+驱动是Linux驱动模型的三大组件,设计这样的模型就是将驱动代码和设备信息相分离,对于稍微复杂一点的 ...

  5. Java中的进程和线程

     Java中的进程与线程 一:进程与线程 概述:几乎任何的操作系统都支持运行多个任务,通常一个任务就是一个程序,而一个程序就是一个进程.当一个进程运行时,内部可能包括多个顺序执行流,每个顺序执行流就是 ...

  6. Xamarin.Android通知详解

    一.发送通知的机制 在日常的app应用中经常需要使用通知,因为服务.广播后台活动如果有事件需要通知用户,则需要通过通知栏显示,而在Xamarin.Android下的通知需要获取Notification ...

  7. .NET Core性能测试组件BenchmarkDotNet 支持.NET Framework Mono

    .NET Core 超强性能测试组件BenchmarkDotNet 支持Full .NET Framework, .NET Core (RTM), Mono. BenchmarkDotNet支持 C# ...

  8. 修复IE11首页被恶意篡改的问题

    前几天为了测试一个程序,把系统换成了Windows10,Windows10自带了微软的新浏览器Edge和IE11,用来其实也没什么太多感觉了,我习惯于Chrome,但有些东西还是得用IE,比如网银之类 ...

  9. 关于VS2015支持编译Linux程序的问题

    现状 目前已经发布的VS2015中包括VS2015 Preview 以及 VS2015 CTP6,这两个版本均不支持直接编译C++代码为Linux程序,具体情况可以参考 Visual Studio 2 ...

  10. 「微信小程序」来了

    ps:微信APP Store.微信小程序.微信应用号都是指同一个事情. 苦逼程序猿刚下班到家,还没来得及洗漱,收到条小道消息的推送.于是我有气无力的拿着手机点开了这条推送消息,映入眼帘的就是这张封面图 ...