7_2 DSPBIOS 程序的生成

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第7章TIDSP/BIOS第2节DSP/BIOS程序的生成主要内容和重点用DSP/BIOS开发程序的过程,并讲解DSP/BIOS生成了那些文件和如何使用这些文件重点:DSP/BIOS程序的文件组成DSP/BIOS程序的启动过程7.2.1开发过程特点:交互式的可反复的开发模式,方便地修改线程的优先级和类型;先生成基本框架,添加算法之前给程序加上一个仿真的运算负荷进行测试(看是否满足时序要求)。开发步骤:1.用配置工具建立应用程序用到的对象2.保存配置文件,同时生成了在编译和链接应用程序时所需包括的文件7.2.1开发过程3.为应用程序编写一个框架,可以使用C,C++,汇编语言或任意的组合4.在CCS环境下编译并链接程序5.使用仿真器(或者使用初始硬件平台)和DSP/BIOS分析工具来测试应用程序6.重复步骤1-5直到程序运行正确7.当正式产品硬件开发好之后,修改配置文件来支持产品硬件并测试7.2.2配置工具配置工具的作用:用它初始化数据结构和设置不同的参数。保存配置文件时,配置工具自动生成匹配当前配置的汇编源文件和头文件以及一个链接命令文件(linkcommandfile)。当构建(Build)应用程序时,这些文件自动链接进应用程序。7.2.2.1使用过程创建一个新的配置文件CCS:FileNewDSP/BIOSConfig创建一个用户模板(template)对应用户自己的硬件平台,用于不同的应用。CCS之外的配置工具给模块设置全局属性:右窗右键弹出(右窗按优先级显示对象)7.2.2.1使用过程创建对象:XXX_create动态地创建对象,可XXX_delete删除配置工具静态地创建对象和其优点:便于实时分析(执行图和STS);缩短代码尺寸;提高效率。缺点:不能删除;模块全局属性7.2.2.2配置工具视图层次结构有序显示对象主要scheduling中的5个模块的对象:CLK,PRD,SWI,TSK,IDL(无HWI)通过拖拽(draganddrop)操作控制对象的执行顺序(改变优先级)7.2.2.3静态建立的DSP/BIOS对象引用方法:在所有函数外声明externfarPIP_ObjinputObj;/*C6000devices*/配置工具生成的programcfg.h中有这些声明,include即可对象的位置:DSP/BIOS使用.bss段存放全局变量,但对象并不占用.bss段(如:LOG_system占.log段)模式编译:虽然DSP/BIOS是按小模式编译的,但是应用程序可以按小模式或者大模式编译小模式变量的存取:LDW*+DP(_x),A0;load_xintoA0(DP=B14)(1)用far关键字声明对象;externfarPIP_ObjinputObj;if(PIP_getReaderNumFrames(&inputObj)){...}(2)创建并初始化一个全局对象指针externPIP_ObjinputObj;PIP_Obj*input=&inputObj;/*inputMUSTbeaglobalvariable*/if(PIP_getReaderNumFrames(input)){...}但是:staticPIP_Obj*input=&inputObj;/*ERROR!!!!*/(3)所有对象毗邻.bss段,且在32K字节的偏移地址以内externPIP_ObjinputObj;if(PIP_getReaderNumFrames(&inputObj)){...}7.2.2.3(C6000)小模式下对象的引用7.2.2.3(C6000)大模式下对象的引用大模式下变量的存取:在大模式编译的代码与变量的存储位置是无关的,如果所有引用对象的代码都是在大模式下编译的,那么程序可以像存取一般数据一样存取对象7.2.2.4动态建立的DSP/BIOS对象不是所有的DSP/BIOS对象可以动态创建,有的只能在配置工具中创建XXX_create:为对象的内部状态信息分配存储空间,并返回一个指向新建对象的句柄。XXX_Attrs结构的指针为参数。XXX模块的其它函数可以使用这个句柄引用这个对象。XXX_delete函数删除对象#includetsk.hTSK_Attrsattrs;TSK_Handletask;attrs=TSK_ATTRS;attrs.name=reader;attrs.priority=TSK_MINPRI;task=TSK_create((Fxn)foo,&attrs);…TSK_delete(task);7.2.2.5配置工具的默认对象和函数1.PRD_clock.Bydefault,thisCLKobjectcausesatickfortheperiodicfunctions.2.KNL_swi.ThisSWIobjectcallstheTSKscheduler.3.PRD_swi.ThisSWIobjectexecutesalltheconfiguredPRDfunctions.4.TSK_idle.ThisTSKobjectrunstheidleloopwhennoothertaskisreadytorun.5.ThreeIDLobjects:IDL_cpuLoad,RTA_dispatcher,LNK_dataPump6.IDL_busyObj.ThisSTSobjectaccumulatesstatisticsusedtocalculatetheCPUload.7.TwoHSTobject:RTA_fromHost.ThisHSTobjectpassesLOGandSTSdatarequestsfromthehostPCtothetarget.AnotherisRTA_toHost.8.LOG_system.ThisLOGobjectstoresmessagesaboutsystemeventsfordisplaybytheExecutionGraph.7.2.2.5配置工具的默认对象和函数1。PRD_F_tick.RunbythePRD_clockCLKobjecttomanagePRD_SWIandsystemtick.2。_KNL_run.RunbyKNL_swi,torunthetaskschedulerifitisenabled.3。PRD_F_swi.TriggeredbyPRD_ticktorunthePRDfunctions.4。_IDL_loop.RunbythelowestpriorityTSKobject,TSK_idle,toruntheIDLfunctions.5。IDL_F_busy.RunbytheIDL_cpuLoadIDLobjecttocomputethecurrentCPUload.6。RTA_F_dispatch.RunbytheRTA_dispatcherIDLobjecttogatherrealtimeanalysisdata.7。LNK_F_dataPump.RunbytheLNK_dataPumpIDLobjecttomanagethetransferofreal-timeanalysisandHSTchanneldatatothehost.8。CLK_F_isr.RunbyanHWIobjecttoprovidethelow-resolutionCLKtick.7.2.3DSP/BIOS程序使用的文件保存配置的生成文件:program.cdb(被配置工具和分析工具同时使用)programcfg.h(配置工具生成的包含对象声明)programcfg.h62(汇编头文件)programcfg.s62(汇编源文件)programcfg.cmd(链接命令文件,定义了DSP/BIOS特殊的编译选项和对象名以及程序段的定义)programcfg_c.c(CSL设置的程序代码)module.h(DSP/BIOSAPI头文件,用户程序需要包含std.h和任何使用模块的头文件)module.h62(用于汇编程序的DSP/BIOSAPI头文件)DSP/BIOS分析工具用到的文件program.cdb.配置文件提供了对象名和其它一些程序信息。program.out.可执行文件提供了符号地址和其它一些程序信息。7.2.3DSP/BIOS程序使用的文件(图)DSP/BIOS程序生成所需文件7.2.4DSP/BIOS程序的编译和链接1.CCS中build程序(1)添加program.cdb和programcfg.cmd到项目中。其它的文件自动加入。(2)如果用户想使用自己的链接命令文件,则需要在自己的命令文件的第一行包含语句“-lprogramcfg.cmd”。(3)MEMmanager设置代码和数据放置的位置。2.使用用户的makefilebuild程序(1)用户可以在CCS所提供的示例makefile的基础上作必要的修改,然后使用gmak.exe工具建立程序。(2)makefile允许多个连接文件,与CCS不同。7.2.5在DSP/BIOS中使用运行时间库运行时间库:源文件:rts.src内容:ANSIC函数和一些存储管理的函数DSP/BIOS的运行时间库rtsbios:rts.src的一部分存储器管理函数也在DSP/BIOS库中定义了,包括malloc、free、memalign、calloc和realloc函数。因为DSP/BIOS库中包含了与运行时间库相同的函数,所以DSP/BIOS链接命令文件包含了一个特殊版本的运行时间库rtsbios,不包括memory.csystem.cautoinit.cboot.c(C6000)。printf和LOG_printfprintf2000多clk,考虑所有情况下的格式化,所以代码长,且这些格式化的工作在target(DSP)上运行。运行时间库使用断点的方法实现,影响RTDX。(因为printf断点处理的优先级高于RTDX)LOG_printf30~60clk,因为字符串的格式化在host做。7.2.6DSP/BIOS的启动过程入口:复位中断-c_int00初始化DSP:对C6000,初试化堆栈指针(B15)和全局页指针(B14),控制寄存器AMR、IER和CSR用.cinin段中的记录来初始化.bss段调用BIOS_init初始化DSP/BIOS模块(programcfg.s62)处理.pinit表:C++全局对象的构造函数调用main函数:用户的初始化调用BIOS_start启动DSP/BIOS(programcfg.s62):TSKmanager使能时就不返回了。TSK_idle执行空循环。执行空闲循环:当任务管理器不使能的时候,才运行到这里,不再进行任务调度,不运行KNL_run。但执行idle函数和响应硬件和软件中断,这样就接近传统的中断触发的编程模式了。任务TSK_idle也是执行空闲循环。在时钟tick中触发软件中断KNL_swi,然后调用KNL_run。7.2.7DSP/BIOS调用用户的函数可以调用用户函数的DSP/BIOS对象IDL,TSK,SWI,HWI,PIP,PRD,andCLK用户函数可用C,C++和汇编写。HWI和CLK对象引用的函数多用汇编写;C写的用户函数在配置工具的设置中添加下划线“_”。用户函数(C/汇编)的编写要遵守C编译器的寄存器约定,不破坏C的运行环境。7.2.8main函数中调用DSP/BIOSAPImain()函数在中DSP/BIOS应用程序的作用:初始化,如配置外设,使能某个中断DSP/BIOS的初始化分为两个部分:BIOS_init(main()运行前)BIOS_start(main()运行后)main()可调用的API(1)MEM模块的函数:MEM_alloc,MEM_free(2)动态创建和删除任务的函数:(3)

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功