轻松学会DSP——第7章-DSP-BIOS

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

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

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

资源描述

DSP/BIOS的功能DSP/BIOS是CCS提供的一套工具,用于支持系统实时分析。它本身仅占用极少的CPU资源。使用线程来管理程序,如硬件中断服务子程序,软件中断服务子程序,周期函数,idle函数等。提供多种分析工具,评估代码。如图形化显示各个线程占用的CPU时间等。可以修改各个线程的优先级。一、DSP/BIOS的组件1、DPS/BIOS实时库和API运用DSP/BIOS的一个基本概念是我们的运行程序是一个多线程的情况,我们通过API(运用程序接口)函数来管理这些线程。我们可以把DSP/BIOSAPI分为许多模块,不同的线程属于不同的模块。这些模块包括:DSP/BIOS提供的API模块CLK模块:用于片上的定时器管理,设置定时器中断的间隔时间。HST模块:用于实现主机与目标系统间数据的输入或输出。HWI模块:用于硬件中断管理,可设置相应的中断服务子程序。IDL模块:用于管理idle函数,该类函数具有最低优先级。LOG模块:用于事件的记录显示。例如,你可以通过该API输出调试信息。MEM模块:用于定义目标系统的内存使用。系统根据此信息自动产生.cmd文件。PIP模块:用于管道管理,可以实现线程间的数据交换。PRD模块:用于实现周期性的函数。该类函数的执行频率可以由CLK模块或自己调用PRD_tick决定。RTDX模块:用于主机与DSP目标系统间的实时数据传递。STS模块:用于状态统计管理,你可以在CCS下查看这些统计参数。SWI模块:用于管理软件中断。CCS将运行队列中的软件中断,并可以设置15个优先级,但都比硬件中断低。API管理进程的具体方法是通过API函数,这些函数功能非常多,如:建立和删除对象,变换线程优先级等;函数的详细说明:2、DSP/BIOS配置工具API函数不是直接对线程进行管理,而是通过不同模块中建立的对象来实现的,这些对象同各个线程直接连结。不同模块中对象的建立有两种方法,一是通过在源文件中使用API函数调用,可以动态产生,动态删除;一是通过DSP/BIOS配置工具产生,是静态产生,不可删除。DSP/BIOS配置工具产生对象的优点:图形化的编辑工具,使用更加方便;可以对对象进行各种参数设置;可以建立各种对象,而API函数只能建立部分对象。部分模块的API被执行程序调用和绑定.优化的DSP/BIOS的连接库,可以达到汇编语言的执行效率.目标板与插件之间的通信是通过后台IDLE线程循环完成,而IDLE线程实在DSP资源可用的情况才执行,保证了程序的执行效率.提供了具有不同优先级的线程,依次是硬件中断、软件中断、任务、IDEL空闲函数,以及周期函数,且其优先级可配置。线程之间可通过旗语、邮箱等工具进行通信。DSP/BIOS配置工具产生对象的缺点:一旦建立,不论程序中是否使用,都有占有一定资源;一旦建立,在程序运行中,不可以删除。3、DSP/BIOS插件完成对运行程序的实时分析,时刻监视CPU的负荷,各个线程的执行情况,各段代码的花费时间等等;DSP通过JTAG口返回到PC数据,这些数据反映我们需要的情况。这些数据的产生是在CPU的空闲状态时产生的,所以,不会对DSP本身的运行产生影响。Programtracing:Displayingeventswrittentotargetlogs,reflectingdynamiccontrolflowduringprogramexecution。Performancemonitoring:Trackingsummarystatisticsthatreflectuseoftargetresources,suchasprocessorloadandtimingFilestreaming:Bindingtarget-residentI/Oobjectstohostfiles。二、用DSP/BIOS创建应用程序在Project菜单中选“New”新建或“Open”打开一个工程文件。将需要的.h、.asm、.c、.obj、.lib添加到该工程文件中。将DSP/BIOS的配置文件.cdb添加到工程文件文件中。注意:LNK使用的.cmd文件由DSP/BIOS配置文件自动产生。在工程文件窗口下用鼠标左键双击配置文件将其打开。展开LOG选项,并用鼠标右键单击,在弹出菜单中选择“InsertLOG”项。修改新增LOG0对象的名称,如trace。使用鼠标右键单击,并在弹出菜单中选择“Property”,修改其参数,如将buflen改为512。增加包含的头文件,如std.h,log.h增加变量说明。这些变量由配置工具创立的,如externLOG_OBJtrace。增加LOGAPI函数,如LOG_printf(&trace,“volume….\n”);该函数可以在DSP/BIOS提供的事件记录窗口显示信息。设置相应的编译、连接开关,使用“BulidAll”生成.out文件。注意:Linker选项中的输出文件名应该与工程文件包含的DOS/BIOS配置文件一致。使用“File”菜单将生成的OUT文件装入目标系统。选择“Debug”菜单中的“GoMain”运行程序到main()函数。选择“Tools”菜单下的“DSP/BIOS”选项,然后选“MessageLog”。用鼠标右键单击出现的MessageLog窗口,在弹出菜单中选“PropertyPage”。在“name”选项中选择“trace”,使得该窗口显示送到trace对象的信息。(使用LOG_printf(&trace,“volume…”)语句)使用F5运行程序,观察该窗口输出。注意事项:配置文件有program.cdbprogramcfg.h54programcfg.s54programcfg.cmd手工添加文件program.cdb和programcfg.cmdprogramcfg.s54自动添加;库文件rst.lib不需要;C源文件中要加上各种API头文件;其他源文件同一般的CCS使用一样;三、线程的基本概念1、什么是线程实时的DSP应用,往往需要把许多看似不相干的功能同时实现。不同的功能通过不同的指令流实现,而我们把这些指令流叫线程。同一个处理器实现多线程的方法是给线程加上优先级。优先级高的线程首先执行。2、线程的种类硬件中断Hardwareinterrupts(HWI):includesCLKfunctions软件中断Softwareinterrupts(SWI):includesPRDfunctions任务Tasks(TSK)背景线程Backgroundthread(IDL)硬件中断硬件中断函数与外部中断信号一一对应;一旦中断信号或事件发生,硬件中断函数(也称中断服务程序)就执行.在DSP/BIOS应用函数中,中断函数是优先级最高的线程.硬件中断函数执行时间应限定在2到100ms内,频率在200KHz左右.软件中断软件中断是通过调用在程序SWI函数而被触发的.软件中断的优先级出于硬件中断与后台线程之间.SWIs执行时间较硬件中断函数可宽一些,可在100ms或更长一些.任务Task其优先级较软中断低,但高于后台线程.任务不同于软中断:软中断一旦执行就必须完成,而任务却可挂起,直到要求的资源满足后才重新执行.DSP/BIOS提供了诸如队列、旗语,邮箱等方式用于任务见通信。背景线程在DSP/BIOS程序中执行优先级最低的空闲循环(IdleLoop(IDL))。在main函数返回后,DSP/BIOS为每个模块调用启动线程,然后便进入空闲循环。空闲循环持续不断地运行,当优先级更高的线程启动后才中止。只有没有运行时间限制的功能可设置为背景线程。时钟函数被片上时钟中断源所触发,执行频率为中断频率。时钟函数是HWI_TINT硬件中断。周期函数执行周期是片上时钟中断或其它事件周期的整数倍。周期函数是一典型的软件中断。3、优先级硬件中断最高,一个线程可以被挤占(preempt,中途被中断),但是不能被阻塞(block,暂停等待);软件中断较高,又有14个等级,可以被挤占,但是不能阻塞;TASK较低,有15个等级,可以挤占和阻塞;IDL最低,循环执行一定线程。4、线程的保护和挤占四、硬件中断使用方法1、中断矢量表在DSP/BIOS的运用中,可以不必去建立中断矢量表,只需要在模块MEM中,对VECT的对象进行设置,这个设置是向DSP提供中断矢量表的地址。再通过HWI模块,对需要使用的硬件中断进行中断服务程序的设置就可以了。2、硬件中断的屏蔽在DSP/BIOS的配置工具中不能对那个中断进行屏蔽;但可在程序中通过对寄存器的值的控制来完成对中断的屏蔽;在程序中,调用API函数完成对硬件中断的控制,如函数:HWI_enableHWI_restoreHWI_disable五、软件中断使用方法1、软件中断的建立软件中断实际就是把一个已经建立的函数作为一个中断程序,这个中断程序的执行由软件触发;软件中的建立可以通过配置工具,进行静态的建立;软件中断的建立,也可以利用API函数动态的建立。swi=SWI_create(attrs)2、软件中断的优先级优先级在建立软中断的时候就确定了;如果是使用配置工具,在软件中断的对象属性中设置;如果是使用动态API函数建立,则在建立的时候,可以使用参数来确定他的属性。3、软件中断的邮箱邮箱是一个32bit的寄存器,可在配置工具中,建立软件中断对象的时候设置其初始值;在程序中,使用下面的API函数来控制一个软件中断的邮箱,从而控制软件中断的执行:SWI_andnSWI_decSWI_incSWI_orSWI_post4、邮箱函数邮箱的API函数在程序中使用,用来控制邮箱值的变换,从而控制软件中断的执行;SWI_post直接调用软件中断,不改变邮箱值;SWI_inc邮箱值加1,同时调用软件中断;SWI_or其所带参数同邮箱值相比特或,同时调用软件中断;SWI_dec邮箱值减1,如果减1后为0,调用软件中断;SWI_andn其所带参数同邮箱值相比特与,相与后邮箱值为0,调用软件中断;六、TASK使用方法1、建立方法其建立方法,含义同软件中断是相同的;同软件中断相比,优先级低;同软件中断相比,可以被悬挂;2、任务的特点同软件中断相比,每个TASK使用自己的堆栈,大小分别设置,而所以软件中断使用相同的堆栈。原因是每个TASK被挤占的可能性非常大,每次被挤占时,都需要保护现场。3、TASK工作状态running,whichmeansthetaskistheoneactuallyexecutingonthesystem’sprocessor;ready,whichmeansthetaskisscheduledforexecutionsubjecttoprocessoravaila-bility;blocked,whichmeansthetaskcannotexe-cuteuntilaparticulareventoccurswithinthesystem;Whenataskisblocked,itisoftenbecausethetaskispendingonasemaphorewhichisunavailable.terminated,whichmeansthetaskis“termi-nated”anddoesnotexecuteagain.4、状态间的转换和函数5、TASK间通信线程一般通过软件中断(SWI模块)来实现。利用TSK_yield函数实现同等优先级的任务之间的切换。TASK间的通信通过旗语(Semphore)和邮箱(MailBox);旗语和邮箱在配置工具中都可以建立;实现TSK_yield()函数的例子打开工程文件tsktest.mak,创立三个同优先级的任务:task0,task1,task2。实现

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

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

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

×
保存成功