实时调试集成环境实时调试集成环境DSP/BIOSDSP/BIOS的应用的应用讲演:管庆电子科技大学电子科技大学主要内容主要内容zDSP/BIOS的概述-IntroductionzDSP/BIOS的线程管理/调度-RealTimeSchedulingzDSP/BIOS提供的实时分析工具-RealTimeAnalysisToolszDSP/BIOS高级应用:线程、通讯、同步、硬件中断、数据交换、内核评估、优化zDSP/BIOS应用的例子-ExampleDSP/BIOS的概述Part1-Introduction电子科技大学电子科技大学DSP/BIOSDSP/BIOS概述概述zDSP/BIOS是一个可升级的实时内核。它主要是为需要任务的实时调度和同步,主机-目标系统通讯和实时监测的应用而设计的。zDSP/BIOS集成到CCS中的,不需要额外的费用。zDSP/BIOS是TI’seXpressDSP技术的重要组成部分。电子科技大学电子科技大学DSP/BIOS的组件z抢先式多任务内核z配置工具z实时分析工具zDSP/BIOSAPI:提供近200个DSP/BIOSAPI给用户。继续电子科技大学电子科技大学DSP/BIOSDSP/BIOS配置工具配置工具返回电子科技大学电子科技大学图形界面的静态配置工具图形界面的静态配置工具z设定DSP/BIOS库中的各种参数zDSP/BIOS的裁减控制z创建目标应用程序使用的对象(object),以便使用DSP/BIOS提供的API函数。z使用CSL配置外设z对目标系统的初始化配置返回实时分析工具电子科技大学电子科技大学DSP/BIOSDSP/BIOS的的APIAPI模块模块◆CLK模块:用于片上的定时器管理,设置定时器中断的间隔时间。◆HST模块:用于实现主机与目标系统间数据的输入或输出。◆HWI模块:用于硬件中断管理,可设置相应的中断服务子程序。◆IDL模块:用于管理后台idle函数,该类函数具有昀低优先级。◆LOG模块:用于事件的记录显示。例如,可以通过该API输出调试信息。电子科技大学电子科技大学DSP/BIOSDSP/BIOS的的APIAPI模块模块◆MEM模块:用于定义目标系统的内存使用。系统根据此信息自动产生.cmd文件。◆PIP模块:用于数据管道管理,可以实现线程间的数据交换。◆PRD模块:用于实现周期性的函数。该类函数的执行频率,可以由CLK模块或自己调用PRD_tick函数决定。◆RTDX模块:用于主机与DSP目标系统间的实时数据传递。◆DEC模块:设备驱动程序接口。电子科技大学电子科技大学DSP/BIOSDSP/BIOS的的APIAPI模块模块◆STS模块:用于状态统计管理,可以在CCS下查看这些统计参数。◆SWI模块:用于管理软件中断。CCS将运行队列中的软件中断,并可以设置15个优先级,但都比硬件中断低。◆SIO模块:流式I/O管理模块,可用于设备驱动模块与任务或软件中断之间的数据交换。◆MXB模块:管理邮箱,实现任务间同步或通讯。◆QUE模块:用于任务或线程的队列管理。◆SEM模块:旗语管理,用于任务或线程间的同步。电子科技大学电子科技大学几个与型号有关的模块几个与型号有关的模块zMEM模块zGBL模块zC54XX,C62XX,C64XXzCSL片级支持库(ChipSupportLibrary)电子科技大学电子科技大学DSP/BIOSDSP/BIOS的的APIAPI模块模块z几种DSP/BIOSAPI函数可以触发SWI线程:❏SWI_andn❏SWI_dec❏SWI_inc❏SWI_or❏SWI_post条件启动,与邮箱初始值做“与”、“或”、“加”、“减”运算后决定是否启动该线程。Æ直接启动,与邮箱初始值无关。电子科技大学电子科技大学创建DSP/BIOS配置z从已有的DSP/BIOS配置文件中修改获得z在“File”菜单中新建配置文件,CCS提供了许多摸板共选择z将创建的配置文件保存到你的工作目录下z将创建的配置文件(*.cdb)添加到prject工程文件中。电子科技大学电子科技大学创建DSP/BIOS配置z配置工具将自动创建下面的文件(‘C6000为例):–当保存配置文件(如my.cdb)zmycfg.s62Assemblyfilezmycfg_c.cCfilezmycfg.hHeaderfileforCzmycfg.h62Headerfileforassembly–“mycfg.cmd”也会自动生成,但需要手工添加到工程文件中。注意:用户需要自己将*.cdb和*.cmd添加到工程文件中。DSP/BIOS的线程管理与调度Part2-RealTimeScheduling电子科技大学电子科技大学Main()中等待。。。CallG723_code()AD_srv()不使用DSP/BIOS时的程序结构存储器输入数据INT电子科技大学电子科技大学Main(){}DSP/BIOS内核IDL模块HWI_AD使用DSP/BIOS时的程序结构存储器SWI_G723_decodeINTPIP,SIO,DEVpostswiDSP/BIOS应用程序的结构zDSP/BIOSAPI提供可伸缩的实时核,还提供了有优先级的多线程处理。它是专为那些需要实现实时调度、同步以及通讯的应用程序而设计。在一个包含DSP/BIOS内核的应用程序按优先级从低到高有四种主要线程:•后台线程(IDL线程)•任务(TSK模块)•软件中断(SWI模块)•硬件中断(HWI模块)电子科技大学电子科技大学DSP/BIOSDSP/BIOS的线程类型的线程类型PriorityPriorityHWIHWI硬件中断硬件中断HWIHWI的优先级由硬件中断决定的优先级由硬件中断决定每个硬件中断提供一个每个硬件中断提供一个ISRISRHWIHWI线程由硬件中断触发线程由硬件中断触发!!IDLIDL为后台运行的线程为后台运行的线程..SWISWI软件中断软件中断SWISWI有有1414个优先级个优先级同一优先级可以有多个同一优先级可以有多个SWISWI线程线程..TSKTSK线程线程TSKTSK有有1515个优先级个优先级同一优先级可以有多个同一优先级可以有多个TSKTSK线程线程..IDLIDL后台线程后台线程IDLIDL线程包括多个线程包括多个IDLIDL函数函数这些函数会连续反复调用这些函数会连续反复调用..电子科技大学电子科技大学线程选择的一般原则z严格的实时性:如果线程的执行需要严格的实时性,而线程执行需要的时间又很少时,你可以使用硬件中断或时钟函数来完成。CLK时钟函数也是在硬件中断中执行的。z部分实时性:执行时间较长,使用SWI软件中断或TSK任务线程来完成一些非实时性的处理任务。这样可以减少中断的潜伏期,提高响应实时性请求的能力。电子科技大学电子科技大学线程选择的一般原则z周期性的服务:需要周期性或在固定的时间间隔内完成处理任务,使用PRD周期性函数来完成。z不需要实时性:线程只需要在后台进行一些不关键的处理,比如收集统计数据、与自己交换检测数据等等。这种情况,我们建议使用IDL线程。电子科技大学电子科技大学线程之间的不同z线程的等待和执行的速率.z线程的不同状态:HWI只有运行状态;SWI有就绪和运行状态;TSK有就绪(Ready),挂起/等待(Pending),运行(Running),结束(Done)z线程的优先级电子科技大学电子科技大学线程之间的不同z对堆栈的需求–要使用系统堆栈,请使用SWI线程.–需要独立的堆栈时,应该使用TSK线程.z线程之间的同步要求和通讯方式–SWI和TSK使用不同的方法.z用户自己的习惯电子科技大学电子科技大学任务线程的特点任务线程的特点z所有任务线程的优先级都低于硬件中断和软件中断。z任务线程和软件中断不同的是:一个任务线程可以中断自己的运行,转而运行其它的任务。当某些条件满足后又恢复继续执行。z任务的切换不是任何情况下都被允许,只有在中断发生(有更高优先级的线程要运行),或某些任务模块的API函数调用时才会发生。电子科技大学电子科技大学SWI或TSK的区别SWISWI不能被挂起(不能被挂起(pendpend))..SWISWI一般总是由该线程函数返回一般总是由该线程函数返回..SWISWIstartstartendendSWI_postSWI_post““runtoruntocompletioncompletion””TSKTSK仅在任务线程结束是返回,仅在任务线程结束是返回,或者是一个无限循环或者是一个无限循环!!TSKTSKSEM_pendSEM_pendstartstartendendblockblockSEM_postSEM_postPuttingitalltogetherPuttingitalltogether……voidmain(void)voidmain(void){{/*Putallyoursetupcodehere*//*Putallyoursetupcodehere*/return;/*DSPBIOSstartsafterthereturn*/return;/*DSPBIOSstartsafterthereturn*/}}/*HardwareInterrupt*//*HardwareInterrupt*/voidvoidtimerIsrtimerIsr(void)(void){{/*Putyourcodehere*//*Putyourcodehere*/SWI_post(&SWI_for_algorithm_1);SWI_post(&SWI_for_algorithm_1);SEM_post(&SEM_post(&taskOneSemtaskOneSem););}}/*SoftwareInterrupt*//*SoftwareInterrupt*/voidalgorithm_1(void)voidalgorithm_1(void){{/*Putyourcodehere*//*Putyourcodehere*/}}/*Task*//*Task*/voidvoidProcessTaskProcessTask(void)(void){{while(1)while(1){{SEM_pendSEM_pend(&(&taskOneSemtaskOneSem,SYS_FOREVER);,SYS_FOREVER);/*Insertyourcodehere*//*Insertyourcodehere*/}}}}DSP/BIOS的实时分析工具Part3-RealTimeAnalysisTools电子科技大学电子科技大学IntroductionIntroductionz传统的代码分析(调试)方法是在处理器暂停运行后,通过观察变量和存贮单元来实现。z实时分析需要不停止处理器的运行而同时获得观测数据zDSP/BIOS中的API模块和CCS中的Plug-ins插件能帮助程序员实现实时分析。电子科技大学电子科技大学IntroductionIntroductionz如何实现不停止处理器运行而获得需要的观测数据呢?–DSP目标系统与host主机的通讯是在DSP/BIOS的IDL线程中完成的。–Host主机在接收到数据后立即处理这些数据,从而得到需要的结果。处理软件可以通过CCS的插件(Plug-in)实现。zFormoredetailsseeChapter3oftheDSP/BIOSUsersGuide(Links\SPRU303.pdf).电子科技大学电子科技大学内核/模块查看窗口υ通过内核/模块查看调试工具观察运行的DSP/BIOS模块的当前状态。例如一个DSP/BIOS程序的所有任务模块运行状态。通过该窗口,你可以了解这些任务的优先级,运行状态,堆栈使用情况等电子科技大学电子科技大学程序模块执行状态图υ在这个窗口中,我们可以看见程序中的各个线程运行状态图。其中HWI硬件中断服务程序,SWI软件中断,TSK任务,旗语模块,周期函数,以及时钟模式信号。另外,还包括了内核线程核其