第6章-DSPC语言程序设计课件

上传人:痛*** 文档编号:241646483 上传时间:2024-07-12 格式:PPT 页数:80 大小:3MB
返回 下载 相关 举报
第6章-DSPC语言程序设计课件_第1页
第1页 / 共80页
第6章-DSPC语言程序设计课件_第2页
第2页 / 共80页
第6章-DSPC语言程序设计课件_第3页
第3页 / 共80页
点击查看更多>>
资源描述
第第6章章 C/C+语言程序设计语言程序设计6.1 C55X C/C+语言概述语言概述6.2 C55X C/C+语言编程基础语言编程基础6.5 C语言与汇编语言的混合编程语言与汇编语言的混合编程 6.5.1 在在C语言中直接嵌入汇编语言语言中直接嵌入汇编语言 6.5.2 C语言调用汇编模块的接口语言调用汇编模块的接口补充:补充:TI DSP软件开发平台软件开发平台l汇编语言依赖于计算机硬件,程序的可读性和汇编语言依赖于计算机硬件,程序的可读性和可移植性比较差。一般高级语言具有很好的可可移植性比较差。一般高级语言具有很好的可移植性,但是难以实现汇编语言的某些功能移植性,但是难以实现汇编语言的某些功能(如对内存地址的操作、位操作等)。(如对内存地址的操作、位操作等)。lC/C+语言作为一种高级语言,既可以访问物语言作为一种高级语言,既可以访问物理地址又可以进行位操作,能直接对硬件进行理地址又可以进行位操作,能直接对硬件进行操作,适合用作操作,适合用作DSP开发语言。开发语言。6.1.1 C/C+语言概况语言概况6.1 C55X C/C+语言概述语言概述6.1.2 C55x C/C+语言概况语言概况lC55x C/C+编译器全面支持编译器全面支持ANSI C/C+语言标准,能够把按照标准语言标准,能够把按照标准ANSI C/C+规范编写的源程序进行全面优化,编译成规范编写的源程序进行全面优化,编译成C55x 汇编语言源程序。汇编语言源程序。lC55x C/C+编译器工具拥有完整的实时编译器工具拥有完整的实时运行库运行库,所有的库函数均符合所有的库函数均符合ANSI库标准。库标准。6.2.16.2.16.2.16.2.1 C C C C语言中的数据类型语言中的数据类型语言中的数据类型语言中的数据类型 C55x C55x C55x C55x支持下列数据类型包括字符、定点数、浮支持下列数据类型包括字符、定点数、浮支持下列数据类型包括字符、定点数、浮支持下列数据类型包括字符、定点数、浮点数、指针等。点数、指针等。点数、指针等。点数、指针等。6.2 6.2 C55X C/C+语言编程基础语言编程基础类型型长度度内容内容最小最小值最大最大值signed char(有符号有符号字符字符)16位位ASCII码-3276832767unsigned char(无符号字符无符号字符)16位位ASCII码065535short,signed short(短整型短整型)16位位二二进制制补码-3276832767unsigned short(无无符号短整型符号短整型)16位位二二进制制数数065535类 型型长 度度内内 容容最最 小小 值最最 大大 值int,signed int(整型)(整型)16位位二二进制制补码 3276832767unsigned int(无符号无符号整型)整型)16位位二二进制制数数065535long,signed long(长整型)整型)32位位二二进制制补码 2 147 483 6482 147 483 647unsigned long(无符号(无符号长整型)整型)32位位二二进制制数数04 249 967 295long long(40位位长整型)整型)40位位二二进制制补码 549 755 813 888549 755 813 887unsigned long long(40位无符号位无符号长整型)整型)40位位二二进制制数数01 099 511 627 775emum(枚(枚举型)型)16位位二二进制制补码 3276832767float(浮点型)(浮点型)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38类 型型长 度度内内 容容最最 小小 值最最 大大 值double(双精度浮点(双精度浮点数)数)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38long double(长双精双精度浮点数)度浮点数)32位位32位浮位浮点数点数1.175 494e 383.40 282 346e+38大存大存储器模式器模式23位位二二进制制数数00 x7FFFFFpointers(程序指(程序指针)24位位二二进制制数数00 xFFFFFF6.2.16.2.16.2.16.2.1 C C C C语言中的数据类型语言中的数据类型语言中的数据类型语言中的数据类型 6.2.2 关键字关键字1.const lC55x C编译器支持标准编译器支持标准C语言的语言的const关键字。关键字。l将这个关键字使用到对任意变量或数组的定义上将这个关键字使用到对任意变量或数组的定义上可以确保它们的值不改变。可以确保它们的值不改变。l如果定义一个对象为如果定义一个对象为const,那么,那么const段就会为段就会为该对象分配存储空间。使用该对象分配存储空间。使用const关键字可以定义关键字可以定义大常数表并将它们分配到系统大常数表并将它们分配到系统ROM中。中。6.2 6.2 C55X C/C+语言编程基础语言编程基础例:例:6.2.2 关键字关键字 int *const p=&x;const int *q=&x;定义指向变量定义指向变量int的常量指针的常量指针p定义指向常量定义指向常量int的变量指针的变量指针q2.ioport关键字关键字 1.1.1.1.ioportioport关键字可以用在关键字可以用在关键字可以用在关键字可以用在数组、结构、联合数组、结构、联合数组、结构、联合数组、结构、联合以及以及以及以及枚枚枚枚举举举举类型当中。类型当中。类型当中。类型当中。2.2.当用在数组中时,当用在数组中时,当用在数组中时,当用在数组中时,ioportioport限制的数组单元而非数组类型限制的数组单元而非数组类型限制的数组单元而非数组类型限制的数组单元而非数组类型本身;本身;本身;本身;3.3.ioportioport类型只能用来声明类型只能用来声明类型只能用来声明类型只能用来声明全局或静态变量全局或静态变量全局或静态变量全局或静态变量,如果在,如果在,如果在,如果在本本本本地地地地变量中使用变量中使用变量中使用变量中使用ioportioport类型,则变量必须用类型,则变量必须用类型,则变量必须用类型,则变量必须用指针指针指针指针声明。声明。声明。声明。6.2.2 6.2.2 6.2.2 6.2.2 关键字关键字关键字关键字 注意:注意:例,例,ioport关键字的使用。关键字的使用。ioport int k void foo(void)ioport int i ioport int*j 6.2.2 6.2.2 关键字关键字;/*正确正确*/;/*错误错误*/;/*正确正确*/例:定时器初始化例程例:定时器初始化例程void TIMER_init(void)ioport unsigned int *tim0;ioport unsigned int *prd0;ioport unsigned int *tcr0;ioport unsigned int *prsc0;tim0 =(unsigned int*)0 x1000;prd0 =(unsigned int*)0 x1001;tcr0 =(unsigned int*)0 x1002;prsc0=(unsigned int*)0 x1003;*tcr0=0 x04f0;*tim0=0;*prd0=0 x0ffff;*prsc0=2;*tcr0=0 x00e0;3.interrupt3.interrupt关键字关键字 关键字关键字关键字关键字 “interruptinterrupt”-”-定义中断函数定义中断函数定义中断函数定义中断函数注意:注意:注意:注意:1.1.1.1.当当当当C/C+C/C+C/C+C/C+代码被中断时,中断程序必须保存所有与程序代码被中断时,中断程序必须保存所有与程序代码被中断时,中断程序必须保存所有与程序代码被中断时,中断程序必须保存所有与程序有关的寄存器。有关的寄存器。有关的寄存器。有关的寄存器。2.2.2.2.当使用当使用当使用当使用“interruptinterruptinterruptinterrupt”关键字定义函数时,中断函数必关键字定义函数时,中断函数必关键字定义函数时,中断函数必关键字定义函数时,中断函数必须返回空并且没有参数传递。须返回空并且没有参数传递。须返回空并且没有参数传递。须返回空并且没有参数传递。3.3.3.3.中断函数可以定义本地变量并且使用堆栈。中断函数可以定义本地变量并且使用堆栈。中断函数可以定义本地变量并且使用堆栈。中断函数可以定义本地变量并且使用堆栈。4.c_int00是是C/C+程序的入口点,这个函数名被系统程序的入口点,这个函数名被系统复位中断保留,该中断服务程序用来初始化系统并调用复位中断保留,该中断服务程序用来初始化系统并调用main函数。函数。关于中断的几个要点关于中断的几个要点:中断服务程序不能中断服务程序不能被普通被普通C C代码调用。代码调用。关键关键字字例:中断服务程序例:中断服务程序Void INTR_init(void)IVPD=0 xd0;IVPH=0 xd0;IER0=0 x10;DBIER0=0 x10;IFR0=0 xffff;asm(BCLR INTM);interrupt void timer().无参数无参数设置中断寄存器设置中断寄存器IER0IER0保存中断入口的现场信息保存中断入口的现场信息(所用所用寄存器或全部寄存器)寄存器或全部寄存器)通过通过.sect.sect指令创建中指令创建中断向量表。断向量表。.sect .vectors .ref _c_int00 .ref _timer rsv:B _c_int00 NOP .align 8nmi:.loop 8 nop.endloopint0:.loop 8nop.endloopint2:B _timernop.align 8tint:B _timernop.align 8在汇编语言中,中断程序名在汇编语言中,中断程序名前加下划线,如前加下划线,如 _timer。关于中断的几个要点关于中断的几个要点:中断处理程序可以处理单个中中断处理程序可以处理单个中断或多个中断,断或多个中断,c_int00除外除外保存中断入口的现场信息保存中断入口的现场信息 (所用寄存器或全部寄存器)所用寄存器或全部寄存器)onchiponchiponchiponchip关键字关键字关键字关键字-定义的指针所指向的数据在定义的指针所指向的数据在定义的指针所指向的数据在定义的指针所指向的数据在片片片片上内存上内存上内存上内存例:用例:用例:用例:用onchiponchiponchiponchip定义数组和指针定义数组和指针定义数组和指针定义数组和指针 onchip int x100;onchip int x100;/*array declaration*/*array declaration*/onchip int *p;onchip int *p;/*pointer declaration*/*pointer declaration*/4 onchip4 onchip关键字关键字 6.2.2 关键字关键字volatile-存储器访问存储器访问l定义格式:定义格式:register 变量类型变量类型 变量名变量名l变量类型:变量类型:l整型、浮点型整型、浮点型和和指针类型指针类型register6.2.4 asm指令指令-插入一条汇编指令插入一条汇编指令l指令格式:asm(“assembler text”);main()int i;unsigned int uWork;while(1)for(i=0;ii,i=T0 RET;在定义汇编函数时,在函在定义汇编函数时,在函数名前加下划线数名前加下划线“_”.声明为外部函数声明为外部函数3:在在C代码中访问汇编语言变量代码中访问汇编语言变量l访问访问.bss段或段或.usect段中没有初始化的变量:段中没有初始化的变量:u使用使用.bss或或.usect指令来定义变量指令来定义变量u使用使用.global指令来定义为外部变量指令来定义为外部变量u在汇编语言中的变量前加下划线在汇编语言中的变量前加下划线“_”u在在C代码中声明变量为外部变量并正常地访问它代码中声明变量为外部变量并正常地访问它(b)C程序:程序:extern int var;/*外部变量外部变量*/var=1;/*使用变量使用变量*/(a)汇编语言程序:)汇编语言程序:.bss var,1;定义变量定义变量 .gloabal var;声明变量为外部变量声明变量为外部变量l非非.bssbss段中变量访问段中变量访问-定义指向该变量的指针定义指向该变量的指针u定义变量定义变量u声明一个指向该变量起始地址的全局指针声明一个指向该变量起始地址的全局指针u在程序中,必须先声明该对象为在程序中,必须先声明该对象为externextern型。型。3:在在C代码中访问汇编语言变量代码中访问汇编语言变量(a)汇编程序:)汇编程序:.global _sine .sect ”sine_tab”_sine:.float 0.0 .float 0.015987 .float 0.022145(b)C程序:程序:extern float sine;float*sine_p=sine;f=sine_p2;4.在在C语言中访问汇编语言常数语言中访问汇编语言常数l使用使用.set和和.global指令定义汇编语言全局常数。指令定义汇编语言全局常数。l使用使用&运算符来取值。运算符来取值。(a)汇编语言程序:)汇编语言程序:_table_size .set 10000;定义常量定义常量.global _table_size;定义该常量为全局常量定义该常量为全局常量例:例:(b)语言程序:)语言程序:extern int table_size;#define TABLE_SIZE (int)(&table_size)For(i=0;iTABLE_SIZE;+i)C和汇编语言的接口注意:和汇编语言的接口注意:(1 1 1 1)如果用汇编语言编写中断例程,则需要保存在如果用汇编语言编写中断例程,则需要保存在如果用汇编语言编写中断例程,则需要保存在如果用汇编语言编写中断例程,则需要保存在中断例程中使用的所有寄存器。中断例程中使用的所有寄存器。中断例程中使用的所有寄存器。中断例程中使用的所有寄存器。(2 2 2 2)如果在汇编程序中调用如果在汇编程序中调用如果在汇编程序中调用如果在汇编程序中调用C/C+C/C+C/C+C/C+函数,则只有特定函数,则只有特定函数,则只有特定函数,则只有特定的寄存器在的寄存器在的寄存器在的寄存器在C/C+C/C+C/C+C/C+中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被中被保存,而其他寄存器则可能被C/C+C/C+C/C+C/C+函数改变。函数改变。函数改变。函数改变。(3)(3)(3)(3)编译器所默认的编译器所默认的编译器所默认的编译器所默认的CPLCPLCPLCPL值为值为值为值为1 1 1 1,即采用间接、绝对方式,即采用间接、绝对方式,即采用间接、绝对方式,即采用间接、绝对方式寻址,如果在汇编函数中寻址,如果在汇编函数中寻址,如果在汇编函数中寻址,如果在汇编函数中CPLCPLCPLCPL被设置为被设置为被设置为被设置为0 0 0 0,在函数返回,在函数返回,在函数返回,在函数返回时应当把这个值改为时应当把这个值改为时应当把这个值改为时应当把这个值改为1 1 1 1。例:利于混合编程的方式实现例:利于混合编程的方式实现y=a+b,主程序用主程序用C实现,子函数实现,子函数asmf采用汇编语言采用汇编语言,已知已知a,b,y均为整数。均为整数。主程序:主程序:Main()int a,int b;int y;a=3;b=5;y=asmf(a,b);extern int asmf(int a,int b);汇编源程序:汇编源程序:.global _asmf.text_asmf:add T1,T0,T0 RET习题:习题:利于混合编程的方式实现利于混合编程的方式实现 已知主程序如下,请将汇编源程序补充完整。已知主程序如下,请将汇编源程序补充完整。Main()int anb=2,3,4,5;int xnb=1,2,3,4;int y;y=asmf(&a,&x,nb);extern long asmf(int*,int*,int);主程序:主程序:汇编源程序:汇编源程序:.global _asmf.text_asmf:.RET#define nb 5;P249 作业作业3,4,5,6,7,9,10小结:软件开发过程 第一步,分析任务需求并用高级语言写出软件流程。第一步,分析任务需求并用高级语言写出软件流程。写流程可以采用编写写流程可以采用编写“伪代码伪代码”的方式完成。可以清楚地定义信号的的方式完成。可以清楚地定义信号的处理机制,并为今后程序的调试和扩展预先留好接口。在流程描述中,处理机制,并为今后程序的调试和扩展预先留好接口。在流程描述中,可以将每一个关键的处理环节用函数(或直接用语言描述)来表示,可以将每一个关键的处理环节用函数(或直接用语言描述)来表示,确定软件的框架。确定软件的框架。第二步,根据第一步的工作写主流程的第二步,根据第一步的工作写主流程的C或者汇编程序。或者汇编程序。整整个工作过程可以充分参照例子工程做。个工作过程可以充分参照例子工程做。第三步,细化主流程程序,按功能编写每一个函数。第三步,细化主流程程序,按功能编写每一个函数。第四步,完成中断服务程序的编写。第四步,完成中断服务程序的编写。第五步,编写链接用第五步,编写链接用cmd命令文件,确定汇编程序中各段命令文件,确定汇编程序中各段代码和数据摆放的位置。代码和数据摆放的位置。通常情况下,程序放置在通常情况下,程序放置在SARAM内,而数据放置在内,而数据放置在DARAM。注意程序的编制需强调程序的模块化、常量的符号化、变注意程序的编制需强调程序的模块化、常量的符号化、变量名有意义等软件工程的基本要素。在汇编级编程的时候,量名有意义等软件工程的基本要素。在汇编级编程的时候,需要做汇编语句级的优化。需要做汇编语句级的优化。小结:软件开发过程软件组成:软件组成:由代码和数据组成由代码和数据组成运行:运行:要运行的程序其代码和数据必须存放在要运行的程序其代码和数据必须存放在CPU的存储空间的存储空间存放存放:以代码块和数据块的形式存放:以代码块和数据块的形式存放代码块和数据块是程序的最小单元代码块和数据块是程序的最小单元一个代码块或数据块在存储空间中连续、顺序存放一个代码块或数据块在存储空间中连续、顺序存放不同的代码块或数据块,可以存放于不同的存储空间中不同的代码块或数据块,可以存放于不同的存储空间中定位:定位:编译时定位:编译时定位:MCU系统采用编程时由系统采用编程时由ORG语句确定代码块和数据块的语句确定代码块和数据块的绝对地址编译器以此地址为首地址,连续、顺序地存放该代码块或数据绝对地址编译器以此地址为首地址,连续、顺序地存放该代码块或数据块块 链接时定位:链接时定位:DSP系统采用编程时由系统采用编程时由“SECTION”伪指令,以区分不同伪指令,以区分不同的代码块或数据块编译器每遇到一个的代码块或数据块编译器每遇到一个“SECTION”伪指令,从伪指令,从0地址重新地址重新开始一个代码块或数据块链接器将同名的开始一个代码块或数据块链接器将同名的“SECTION”合并,并按合并,并按.cmd文件中的文件中的“SECTION”命令进行实际的定位命令进行实际的定位 加载时定位:加载时定位:PC机系统采用编程、编译和链接时均未对程序进行绝对机系统采用编程、编译和链接时均未对程序进行绝对定位程序运行前,由操作系统对程序进行重定位,并加载到存储空间中定位程序运行前,由操作系统对程序进行重定位,并加载到存储空间中DSP C语言:C运行环境(1)存储模型:存储模型:C程序的代码和数据如何定位程序的代码和数据如何定位 系统定义系统定义.cinit存放存放C程序中的变量初值和常量程序中的变量初值和常量.const 存放存放C程序中的字符常量、浮点常量和用程序中的字符常量、浮点常量和用const声明的常量声明的常量.switch 存放存放C程序中程序中switch语句的跳针表语句的跳针表.text 存放存放C程序的代码程序的代码.bss为为C程序中的全局和静态变量保留存储空间程序中的全局和静态变量保留存储空间.far 为为C程序中用程序中用far声明的全局和静态变量保留空间声明的全局和静态变量保留空间.stack 为为C程序系统堆栈保留存储空间,用于保存返回地址、函数程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果间的参数传递、存储局部变量和保存中间结果.sysmem用于用于C程序中程序中malloc、calloc和和realloc函数动态分配存储函数动态分配存储空间空间 用户定义用户定义#pragmaCODE_SECTION(symbol,section name)#pragmaDATA_SECTION(symbol,section name)DSP C语言:C运行环境()寄存器使用规则寄存器使用规则C编译器如何使用编译器如何使用DSP的寄存器的寄存器函数进入和返回前,寄存器的保护函数进入和返回前,寄存器的保护 函数调用规则函数调用规则函数间的参数传递通过寄存器和系统堆栈进行函数间的参数传递通过寄存器和系统堆栈进行调用函数与被调用函数必须对各自的寄存器进行保护调用函数与被调用函数必须对各自的寄存器进行保护从被调用函数返回前,被调用函数必须归还所有已占用的堆栈空间从被调用函数返回前,被调用函数必须归还所有已占用的堆栈空间 C和和ASM混合编程混合编程C和和ASM混合编程时,必须遵循寄存器使用规则和函数调用规则混合编程时,必须遵循寄存器使用规则和函数调用规则被被C调用的调用的ASM函数,其函数名前应加函数,其函数名前应加“_”中断服务程序中断服务程序ASM编写的中断服务程序必须对所有用到寄存器进行保护,以免破编写的中断服务程序必须对所有用到寄存器进行保护,以免破坏坏C运行环境运行环境C编写的中断服务程序应用编写的中断服务程序应用interrupt关键字声明关键字声明DSP C语言:C运行环境()系统初试化系统初试化在运行在运行C程序前,必须建立程序前,必须建立C运行环境,此任务由运行环境,此任务由C引导程引导程序序_c_int00完成;完成;c程序在连接的时候需要程序在连接的时候需要rst.lib库。库。_c_int00包含在库函数中,包含在库函数中,build时自动将其链接进可执时自动将其链接进可执行程序中,程序的入口地址必须设为行程序中,程序的入口地址必须设为_c_int00起始地址。起始地址。_c_int00的源程序存放在由的源程序存放在由rts.src分离出来的分离出来的boot.asm中,用户可根据需要修改中,用户可根据需要修改设置堆栈指针,设置堆栈指针,初始化全局变量:将初始化全局变量:将.cinit”段段“中数据拷贝到中数据拷贝到.bss”段段“中中调用调用C程序的主函数程序的主函数main()不同系列的不同系列的DSP,其,其C编译器对编译器对C运行环境的处理略有不运行环境的处理略有不同,具体参考各自的同,具体参考各自的Optimizing C Compiler Users GuideDSP C语言:软件build流程目标文件地址是浮动的,能被重定位目标文件地址是浮动的,能被重定位 链接链接器用器用.cmd文件对链接目标,进行重定位文件对链接目标,进行重定位列出目标文件、库文件和链接器选项列出目标文件、库文件和链接器选项用用MEMORY命令描述目标系统存储空间配置命令描述目标系统存储空间配置用用SECTIONS命令描述命令描述“段段”如何定位如何定位 Hex转换程序也使用转换程序也使用.cmd文件,配置转换文件,配置转换选项选项 CCS 软件开发方法传统软件开发方法用用ASM或或ASM和和C混合编程,从零开始混合编程,从零开始 分配存储器空间分配存储器空间 编写硬件资源头文件编写硬件资源头文件DSP片内部分:片内部分:描述片内寄存器地址描述片内寄存器地址 描述片内寄存器控制状态位域描述片内寄存器控制状态位域DSP板上资源头文件板上资源头文件 描述片外外设寄存器地址描述片外外设寄存器地址 描述片外外设寄存器控制状态位域描述片外外设寄存器控制状态位域 编写应用专用的外设驱动程序编写应用专用的外设驱动程序片内片外外设初试化程序片内片外外设初试化程序片内片外外设操作程序片内片外外设操作程序 编写中断向量表和中断服务程序编写中断向量表和中断服务程序 编写应用专用的算法编写应用专用的算法 编写主控程序顺序、死循环执行编写主控程序顺序、死循环执行TI倡导的DSP软件架构TI免费提供的基础软件CSL库:库:Chip Support Library芯片支持库芯片支持库定义定义DSP片内外设资源,实现片内外设基本操作片内外设资源,实现片内外设基本操作 DDK:Driver Development Kit 设备驱动程序开发包设备驱动程序开发包设计标准的设备驱动程序模型,方便开发新的设备驱动程序设计标准的设备驱动程序模型,方便开发新的设备驱动程序 DSPLIBIMGLIB:Signal Processing Library数学运算、矩阵运算、数学运算、矩阵运算、FFT、滤波、卷积、相关等信号处理函、滤波、卷积、相关等信号处理函数数压缩、分析、滤波和格式转换等图像视频处理函数压缩、分析、滤波和格式转换等图像视频处理函数 DSP/BIOS:嵌入式实时、多任务操作系统:嵌入式实时、多任务操作系统实时、多任务内核实时、多任务内核实时分析实时分析 Reference Frameworks:程序参考架构:程序参考架构C程序初试骨架,通过其可以迅速创建特定的应用程序程序初试骨架,通过其可以迅速创建特定的应用程序 XDAIS:DSP Algorithm Standard,DSP算法标准算法标准规定一系列算法编程规则,遵循这些规则的算法,可以相互规定一系列算法编程规则,遵循这些规则的算法,可以相互调用调用DSP/BIOS:功能抢先型实时、多任务操作系统内核抢先型实时、多任务操作系统内核基于优先级的、抢先型实时调度程序基于优先级的、抢先型实时调度程序支持多线程管理与调度支持多线程管理与调度支持支持4种线程类型:种线程类型:HWI、SWI、TSK、IDL支持支持3种作业间的通信方式:种作业间的通信方式:Mailboxes、Semaphores、Queues支持周期函数,方便实现固定时间间隔的数据采集,简化多速率系支持周期函数,方便实现固定时间间隔的数据采集,简化多速率系统的设计统的设计提供存储器管理,实现动态存储器分配提供存储器管理,实现动态存储器分配 实时分析模块实时分析模块分析信息实时获取、传输和显示,为早期的系统级排错提供帮助分析信息实时获取、传输和显示,为早期的系统级排错提供帮助DSP/BIOS模块中内含分析信息的实时获取功能模块中内含分析信息的实时获取功能分析信息的实时传输由分析信息的实时传输由RTDX(Real-Time Data Exchange)技术)技术实现,完成目标实现,完成目标DSP与主机之间的实时通信,与主机之间的实时通信,C6000 RTDX的带宽为的带宽为20KByte,RTDX是在是在idle作业期间完成,所以对程序执行速度的影作业期间完成,所以对程序执行速度的影响最小响最小主机可以显示:事件记录、线程执行顺序、执行次数的最大值或平主机可以显示:事件记录、线程执行顺序、执行次数的最大值或平均值和总的均值和总的CPU负载等信息负载等信息DSP/BIOS:功能为了方便使用,为了方便使用,TI 提供一个提供一个可视化的配置工具,用于配可视化的配置工具,用于配置实际系统中所需的置实际系统中所需的DSP/BIOS模块模块;可以在可以在CCS集成环境中调用之集成环境中调用之 DSP/BIOS是可裁剪的,只是可裁剪的,只有被应用程序使用的模块才有被应用程序使用的模块才会被链接到应用程序中会被链接到应用程序中 DSP/BIOS开销小:代码大开销小:代码大小:小:1K WordsCPU占用:占用:1MIPS DSP/BIOS采用标准采用标准的的API,所以不同系列,所以不同系列DSP之间的移植容易之间的移植容易 DSP/BIOS集成在集成在CCS中,无需使用许中,无需使用许可费可费CSL 库什么是什么是CSL:Chip Support Library用于配置、控制和管理用于配置、控制和管理DSP片上外设片上外设已为已为C6000和和C5000系列系列DSP设计了各自的设计了各自的CSL库库CSL库函数大多数是用库函数大多数是用C语言编写的,并已对代码的大语言编写的,并已对代码的大小和速度进行了优化小和速度进行了优化CSL库是可裁剪的库是可裁剪的:即只有被使用的:即只有被使用的CSL模块才会包含模块才会包含进应用程序中进应用程序中CSL库是可扩展的库是可扩展的:每个片上外设的每个片上外设的API相互独立,增相互独立,增加新的加新的API,对其他片上外设没有影响,对其他片上外设没有影响为什么要设计为什么要设计CSLDSP片上外设种类及其应用日趋复杂片上外设种类及其应用日趋复杂提供一组标准的方法用于访问和控制片上外设提供一组标准的方法用于访问和控制片上外设免除用户编写配置和控制片上外设所必需的定义和代码免除用户编写配置和控制片上外设所必需的定义和代码CSL:特点片上外设编程的标准协议:片上外设编程的标准协议:定义一组标准的定义一组标准的APIs:函数、数据类型、宏:函数、数据类型、宏 对硬件进行抽象,提取符号化的片上外设描述对硬件进行抽象,提取符号化的片上外设描述定义一组宏,用于访问和建立寄存器及其域值定义一组宏,用于访问和建立寄存器及其域值 基本的资源管理基本的资源管理对多资源的片上外设进行管理对多资源的片上外设进行管理 已集成到已集成到DSP/BIOS中中通过图形用户接口通过图形用户接口GUI对对CSL进行配置进行配置 使片上外设容易使用使片上外设容易使用缩短开发时间,增加可移植性缩短开发时间,增加可移植性CSL:片上外设DDK(Driver Development Kit)TI提供提供DDK的目的的目的标准的设备驱动程序模型,用户无需从零开始编写设备驱动程序标准的设备驱动程序模型,用户无需从零开始编写设备驱动程序 设备驱动程序模型(设备驱动程序模型(IOM)将设备驱动程序分为将设备驱动程序分为2个部分个部分 与设备相关的:与设备相关的:“迷你迷你”驱动程序(驱动程序(mini-driver)与设备无关的:与设备无关的:“类类”驱动程序(驱动程序(class-driver)“类类”驱动程序驱动程序 设备驱动程序的上层抽象,使其与特定设备无关,为应用程序提供通用的接设备驱动程序的上层抽象,使其与特定设备无关,为应用程序提供通用的接口口 3大类大类“类类”驱动程序:驱动程序:SIO、PIP和和GIO SIO:流:流I/O接口,由接口,由SIO和和DIO组成,组成,DIO负责缓冲器管理、信号同步以及底负责缓冲器管理、信号同步以及底层层“迷你迷你”驱动程序接口驱动程序接口 PIP:管道接口,有:管道接口,有PIP和和PIO组成,组成,PIO负责缓冲器管理、信号同步以及底层负责缓冲器管理、信号同步以及底层“迷你迷你”驱动程序接口驱动程序接口 GIO:通用:通用I/O,允许进行块读块写,可以用其新的用户驱动程序,允许进行块读块写,可以用其新的用户驱动程序“迷你迷你”驱动程序驱动程序 设备驱动程序的底层抽象,与特定设备有关,对设计硬件设备进行操作,设备驱动程序的底层抽象,与特定设备有关,对设计硬件设备进行操作,DDK规定一组规定一组 标准的标准的API,函数体由用户根据实际硬件设备编写,函数体由用户根据实际硬件设备编写 DDK是在是在CSL基础上对外设基础上对外设I/O进行更高层次的抽象进行更高层次的抽象 TI免费提供免费提供DDK的源代码、库及相关文档,可从的源代码、库及相关文档,可从TI网站上免费下载网站上免费下载Signal Processing LibraryC6000系列系列DSP基本的信号处理库基本的信号处理库DSPLIB提供数学运算、矩阵运算、提供数学运算、矩阵运算、FFT、滤波、卷积等常用的信号处理函数、滤波、卷积等常用的信号处理函数TMS320C62x DSPLIB:专门为:专门为C62x系列系列DSP进行优化进行优化TMS320C67x DSPLIB:专门为:专门为C67x系列系列DSP进行优化进行优化TMS320C64x DSPLIB:专门为:专门为C64x系列系列DSP进行优化进行优化 FastRTS:提供快速的单精度双精度浮点数学运算和转换函数提供快速的单精度双精度浮点数学运算和转换函数TMS320C62xC64x FastRTS:专门为:专门为C62xC64x系列系列DSP进行优化进行优化TMS320C67x FastRTS:专门为:专门为C67x系列系列DSP进行优化进行优化 IMGLIB:提供压缩、分析、滤波和公司转换等常用的图像视频处理函数:提供压缩、分析、滤波和公司转换等常用的图像视频处理函数TMS320C62x IMGLIB:专门为:专门为C62x系列系列DSP进行优化进行优化TMS320C64x IMGLIB:专门为:专门为C64x系列系列DSP进行优化进行优化 C5000系列系列DSP基本的信号处理库基本的信号处理库DSPLIB:提供数学运算、矩阵运算、:提供数学运算、矩阵运算、FFT、滤波、卷积等常用的信号处理、滤波、卷积等常用的信号处理函数函数TMS320C54x DSPLIB:专门为:专门为C54x系列系列DSP进行优化进行优化TMS320C55x DSPLIB:专门为:专门为C55x系列系列DSP进行优化进行优化 IMGLIB:提供压缩、分析、滤波和公司转换等常用的图像视频处理函数:提供压缩、分析、滤波和公司转换等常用的图像视频处理函数 TMS320C55x IMGLIB:专门为:专门为C55x系列系列DSP进行优化进行优化Reference FrameworkTI提供软件参考架构,目的:提供软件参考架构,目的:DSP系统日趋复杂系统日趋复杂包含多个算法(如:同时包含音频算法和视频算法)包含多个算法(如:同时包含音频算法和视频算法)同一个算法可能需要多道运行(如:对多个视频流进行处理)同一个算法可能需要多道运行(如:对多个视频流进行处理)不同算法或通道所需的数据或帧率可能不同(如:音频帧和视不同算法或通道所需的数据或帧率可能不同(如:音频帧和视频帧帧率不同)频帧帧率不同)某些某些DSP硬件系统的存储容量有限(如:硬件系统的存储容量有限(如:C54x系统)系统)软件对象可能需要动态地创建和删除,导致存储器需要进行动软件对象可能需要动态地创建和删除,导致存储器需要进行动态管理态管理硬件系统可能为由硬件系统可能为由DSP和通用处理器构成的双处理器系统和通用处理器构成的双处理器系统TI精选一些通用的模块,构成软件参考架构精选一些通用的模块,构成软件参考架构让你将精力集中于系统的特定应用方面让你将精力集中于系统的特定应用方面TI根据系统的复杂程度已提供根据系统的复杂程度已提供3个软件参考架构个软件参考架构RF1:小型系统,主要用于由:小型系统,主要用于由C54x和和C55x实现的低端系统实现的低端系统RF3:中型系统,主要用于由:中型系统,主要用于由C54x和和C55x实现的高端系统和实现的高端系统和C6x实现的低端系统实现的低端系统RF5:大型系统,主要用于由:大型系统,主要用于由C6x实现的高端系统实现的高端系统软件开发:软件开发:DSP Algorithm Standard(XDAIS)制定制定XDAIS的目的的目的DSP软件系统日趋复杂,算法由专业公司、专业人员开发软件系统日趋复杂,算法由专业公司、专业人员开发算法提供者和算法使用者分离算法提供者和算法使用者分离为了是二者协调工作,必须定义一组通用的编程规则和指导方针,为了是二者协调工作,必须定义一组通用的编程规则和指导方针,以及一组编程接口以及一组编程接口即使算法使用者和提供者相同,但只要符合即使算法使用者和提供者相同,但只要符合XDAIS算法标准,则这算法标准,则这些算法可以用到不同的项目中,使算法具有良好的继承性些算法可以用到不同的项目中,使算法具有良好的继承性 如何开发符合标准的算法如何开发符合标准的算法TI提供一组工具提供一组工具Component Wizard Control:超级向导,帮助你快速、精确地将:超级向导,帮助你快速、精确地将你的算法封装为符合你的算法封装为符合XDAIS标准的算法标准的算法QuaiTI:测试工具,用于快速、有效地测试算法是否符合:测试工具,用于快速、有效地测试算法是否符合XDAIS标标准准DOSA:自动优化工具,当算法用于静态环境时,删除算法中不必:自动优化工具,当算法用于静态环境时,删除算法中不必要的部分要的部分TI免费提供免费提供XDAIS开发套件,可从开发套件,可从TI网站上免费下载网站上免费下载实验实验3:C与汇编混合编程与汇编混合编程int x,y,z;int add(int a,int b);main()x=3;y=17;while(1)z=add(x,y);_add:AADD#-3,SP MOV T1,*SP(#1);MOV T0,*SP(#0);MOV*SP(#1),AR1;ADD*SP(#0),AR1,T0;AADD#3,SP RET实验实验3:C与汇编混合编程与汇编混合编程_add:BCLR CPL .CPL_OFF MOV T1,AR1 ADD AR1,T0 BSET CPL .CPL_ON RET
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!