《7_2 DSPBIOS 程序的生成》由会员分享,可在线阅读,更多相关《7_2 DSPBIOS 程序的生成(25页珍藏版)》请在金锄头文库上搜索。
1、第7章 TI DSP/BIOS,第2节DSP/BIOS 程序的生成,主要内容和重点,用DSP/BIOS开发程序的过程,并讲解DSP/BIOS生成了那些文件和如何使用这些文件 重点:DSP/BIOS程序的文件组成DSP/BIOS程序的启动过程,7.2.1 开发过程,特点:交互式的可反复的开发模式,方便地修改线程的优先级和类型;先生成基本框架,添加算法之前给程序加上一个仿真的运算负荷进行测试(看是否满足时序要求)。开发步骤:1. 用配置工具建立应用程序用到的对象2. 保存配置文件,同时生成了在编译和链接应用程序时所需包括的文件,7.2.1 开发过程,3. 为应用程序编写一个框架,可以使用C,C+,
2、汇编语言或任意的组合4. 在CCS环境下编译并链接程序5. 使用仿真器(或者使用初始硬件平台)和DSP/BIOS分析工具来测试应用程序6.重复步骤15直到程序运行正确7.当正式产品硬件开发好之后,修改配置文件来支持产品硬件并测试,7.2.2 配置工具,配置工具的作用:用它初始化数据结构和设置不同的参数。保存配置文件时,配置工具自动生成匹配当前配置的汇编源文件和头文件以及一个链接命令文件(link command file)。当构建(Build)应用程序时,这些文件自动链接进应用程序。,7.2.2.1 使用过程,创建一个新的配置文件CCS:FileNewDSP/BIOS Config创建一个用户
3、模板(template)对应用户自己的硬件平台,用于不同的应用。CCS之外的配置工具给模块设置全局属性:右窗右键弹出(右窗按优先级显示对象),7.2.2.1 使用过程,创建对象:XXX_create动态地创建对象,可XXX_delete删除配置工具静态地创建对象和其优点:便于实时分析(执行图和STS);缩短代码尺寸;提高效率。缺点:不能删除;,模块全局属性,7.2.2.2 配置工具视图,层次结构有序显示对象主要scheduling中的5个模块的对象:CLK,PRD,SWI,TSK,IDL(无HWI)通过拖拽(drag and drop)操作控制对象的执行顺序(改变优先级),7.2.2.3 静态
4、建立的DSP/BIOS对象,引用方法:在所有函数外声明extern far PIP_Obj inputObj; /* C6000 devices */ 配置工具生成的programcfg.h中有这些声明,include即可对象的位置:DSP/BIOS使用.bss段存放全局变量,但对象并不占用.bss段(如:LOG_system占.log段) 模式编译:虽然DSP/BIOS是按小模式编译的,但是应用程序可以按小模式或者大模式编译,小模式变量的存取: LDW *+DP(_x), A0 ; load _x into A0 (DP = B14) (1)用far关键字声明对象;extern far PI
5、P_Obj inputObj;if (PIP_getReaderNumFrames(&inputObj) . . .(2)创建并初始化一个全局对象指针extern PIP_Obj inputObj;PIP_Obj *input = &inputObj; /* input MUST be a globalvariable */if (PIP_getReaderNumFrames(input) . . .但是:static PIP_Obj *input = &inputObj; /* ERROR! */(3)所有对象毗邻.bss段,且在32K字节的偏移地址以内extern PIP_Obj inpu
6、tObj;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模块的
7、其它函数可以使用这个句柄引用这个对象。XXX_delete函数删除对象,#include TSK_Attrs attrs;TSK_Handle task;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. By default, this CLK object causes a tick for the periodic functions
8、.2. KNL_swi. This SWI object calls the TSK scheduler.3. PRD_swi. This SWI object executes all the configured PRD functions.4. TSK_idle. This TSK object runs the idle loop when no other task is ready to run.5. Three IDL objects: IDL_cpuLoad, RTA_dispatcher, LNK_dataPump 6. IDL_busyObj. This STS objec
9、t accumulates statistics used to calculate the CPU load.7. Two HST object: RTA_fromHost. This HST object passes LOG and STS data requests from the host PC to the target. Another is RTA_toHost. 8. LOG_system. This LOG object stores messages about system events for display by the Execution Graph.,7.2.
10、2.5 配置工具的默认对象和函数,1。PRD_F_tick. Run by the PRD_clock CLK object to manage PRD_SWI and system tick.2。_KNL_run. Run by KNL_swi, to run the task scheduler if it is enabled.3。PRD_F_swi. Triggered by PRD_tick to run the PRD functions.4。_IDL_loop. Run by the lowest priority TSK object, TSK_idle, to run the
11、 IDL functions.5。IDL_F_busy. Run by the IDL_cpuLoad IDL object to compute the current CPU load.6。RTA_F_dispatch. Run by the RTA_dispatcher IDL object to gather realtime analysis data.7。LNK_F_dataPump. Run by the LNK_dataPump IDL object to manage the transfer of real-time analysis and HST channel dat
12、a to the host.8。CLK_F_isr. Run by an HWI object to provide the low-resolution CLK tick.,7.2.3 DSP/BIOS程序使用的文件,保存配置的生成文件:program.cdb (被配置工具和分析工具同时使用 )programcfg.h(配置工具生成的包含对象声明 )programcfg.h62(汇编头文件 )programcfg.s62(汇编源文件 )programcfg.cmd(链接命令文件 ,定义了DSP/BIOS特殊的编译选项和对象名以及程序段的定义 )programcfg_c.c(CSL设置的程序代
13、码 )module.h( DSP/BIOS API头文件,用户程序需要包含std.h和任何使用模块的头文件)module.h62 (用于汇编程序的DSP/BIOS API 头文件)DSP/BIOS分析工具用到的文件program.cdb. 配置文件提供了对象名和其它一些程序信息。program.out. 可执行文件提供了符号地址和其它一些程序信息。,7.2.3 DSP/BIOS程序使用的文件(图),DSP/BIOS程序生成所需文件,7.2.4 DSP/BIOS程序的编译和链接,1. CCS中build 程序(1)添加program.cdb和programcfg.cmd到项目中。其它的文件自动加
14、入。(2)如果用户想使用自己的链接命令文件,则需要在自己的命令文件的第一行包含语句“-l programcfg.cmd”。(3)MEM manager设置代码和数据放置的位置。2. 使用用户的makefile build程序(1)用户可以在CCS所提供的示例makefile的基础上作必要的修改,然后使用gmak.exe工具建立程序。(2)makefile允许多个连接文件,与CCS不同。,7.2.5 在DSP/BIOS中使用运行时间库,运行时间库:源文件:rts.src内容:ANSI C函数和一些存储管理的函数DSP/BIOS的运行时间库rtsbios:rts.src的一部分存储器管理函数也在D
15、SP/BIOS库中定义了,包括malloc、free、memalign、calloc和realloc函数。因为DSP/BIOS库中包含了与运行时间库相同的函数,所以DSP/BIOS链接命令文件包含了一个特殊版本的运行时间库rtsbios,不包括memory.c system.c autoinit.c boot.c(C6000)。printf和LOG_printfprintf 2000多clk,考虑所有情况下的格式化,所以代码长,且这些格式化的工作在target(DSP)上运行。运行时间库使用断点的方法实现,影响RTDX。(因为printf断点处理的优先级高于RTDX)LOG_printf 30
16、60clk,因为字符串的格式化在host做。,7.2.6 DSP/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):TSK manager使能时就不返回了。TSK_idle执行空循环。执行空闲循环:当任务管理器不使能的时候,才运行到这里,不再进行任务调度,不运行KNL_run。但执行idle函数和响应硬件和软件中断,这样就接近传统的中断触发的编程模式了。任务TSK_idle也是执行空闲循环。在时钟tick中触发软件中断KNL_swi,然后调用KNL_run。,