• GT_Trace的使用[z]


    GT_Trace的使用

        使用Codec Engine开发DaVinci系统,最令人头痛的莫过于调试。由于evm6446开发过程分成DSP端和GPP端,因此我们无法使用IDE下的调试工具对程序进行跟踪调试。为此,TI在Codec Engine中提供了一套名为Generic Trace Support 的模块,专门用来打印Debug信息。

           要使用GT_Trace,需要在应用程序文件夹下remote.cfg文件中将GT_Trace的配置:
               //TraceUtil.attrs = TraceUtil.SOCRATES_TRACING;
               TraceUtil.attrs = TraceUtil.FULL_TRACING;
               //TraceUtil.attrs = TraceUtil.DEFAULT_TRACING;
               //TraceUtil.attrs = TraceUtil.NO_TRACING;

           要在终端上打印DEBUG信息,很简单。只需要在执行命令前加上CE_DEBUG=n,n=1,2,3即可:

           在代码中使用Generic Trace Support

           首先,我们要定义一个GT_Mask对象,GT_Mask是用来描述GT模块的对象,它的定义如下: 
               typedef struct { 
                   String modName; 
                   UInt8 *flags; 
               } GT_Mask;

           我们在程序中可以这样定义: 
               GT_Mask curMask = {0,0};

           然后,调用初始化函数: 
               GT_create(&curMask, "snowwaft"); 
               GT_set("snowwaft=01234567");

           上面的代码,我们给curMask设定了名字:snowwaft,将它的级别设为0-7(有关级别,后面会描述)。

           当完成以上工作后,我们就可以使用GT模块来输出信息了:

               GT_0trace(curMask, GT_2CLASS, "main>; Welcome to DSP server's main().\n");

           屏幕会输出如下结果:
               [DSP] @0×000001a2:[T:0x00000000] snowwaft - main> Welcome to DSP server’s main().

           关于GT_*trace宏,以上我们使用GT_0trace宏来输出信息,同样的,我们还可以使用以下宏: 
               GT_0trace( mask, classId, format ) 
               GT_1trace( mask, classId, format, arg1 ) 
               GT_2trace( mask, classId, format, arg1, arg2 ) 
               GT_3trace( mask, classId, format, arg1, arg2, arg3 ) 
               GT_4trace( mask, classId, format, arg1, arg2, arg3, arg4 ) 
               GT_5trace( mask, classId, format, arg1, arg2, arg3, arg4, arg5 ) 
               GT_6trace( mask, classId, format, arg1, arg2, arg3, arg4, arg5, arg6 )

           这些宏分别定义了输出1个、2个、……、6个参数的使用方式,例如,我们需要输出两个参数: 
               GT_2trace(curMask, GT_2CLASS, "App->; Decode frame %d (0x%x)\n",p1,p2);

           关于GT_*CLASS宏,在GT_*trace宏里,第二个参数为classId,这个参数是什么用的呢?某些时候,我们在打印Trace信息的时候,有可能希望只打印某些级别的信息,而不打印其他级别的信息,因此,我们指定classID

           在GT Module里一共定义了7种级别: 
               #define GT_1CLASS ((UInt8)0x02) 
               #define GT_2CLASS ((UInt8)0x04) 
               #define GT_3CLASS ((UInt8)0x08) 
               #define GT_4CLASS ((UInt8)0x10) 
               #define GT_5CLASS ((UInt8)0x20) 
               #define GT_6CLASS ((UInt8)0x40) 
               #define GT_7CLASS ((UInt8)0x80)

           这7种级别分别表示:
               GT_1CLASS : 纯粹的Debug信息 
               GT_2CLASS : 由开发人员指定,告诉使用人员这这条信息可能有用 
               GT_3CLASS : 进入某个模块 
               GT_4CLASS : 由开发人员指定,告诉使用人员这是比较重要的信息 
               GT_5CLASS : 标记 
               GT_6CLASS : 警告 
               GT_7CLASS : 错误 

           不难理解,为什么我们要在调用GT_set时制定:snowwaft=01234567,这表示,对于snowwaft这个GT_Mask,我们关心的信息包括以上所有部分而0,则表示进入、退出某个函数的报告

           【小节】使用GT_Mask,可以在DSP端和ARM端间打印信息,这在一定程度上方便了我们调试信息

  • 相关阅读:
    Hadoop
    Mapreduce
    ssh原理
    HDFS
    Centos
    创建jira插件
    新型的领导者是一名推动者,而不是一名发号施令者
    上善若水,虚怀若谷
    GoAhead 嵌入式web
    Eclipse基金会
  • 原文地址:https://www.cnblogs.com/freedesert/p/2481458.html
Copyright © 2020-2023  润新知