04DSP软件开发PPT

上传人:痛*** 文档编号:148066717 上传时间:2022-09-04 格式:PPT 页数:80 大小:1.15MB
返回 下载 相关 举报
04DSP软件开发PPT_第1页
第1页 / 共80页
04DSP软件开发PPT_第2页
第2页 / 共80页
04DSP软件开发PPT_第3页
第3页 / 共80页
点击查看更多>>
资源描述
DSPDSP技术技术04 TMS320C54x DSP04 TMS320C54x DSP软件开发软件开发DSP技术讲义,2010DSP技术技术DSP汇编语言程序设计汇编语言程序设计DSP汇编程序开发工具汇编程序开发工具 DSP高级高级C语言程序设计语言程序设计DSP程序设计与开发程序设计与开发DSP技术讲义,2010第一部分第一部分DSP汇编语言程序设计汇编语言程序设计DSP技术讲义,2010 汇编语言程序以汇编语言程序以.asm为扩展名,可以用任意的编为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,汇编器辑器编写源文件。一条语句占源程序的一行,汇编器每行最多读每行最多读200个字符。因此,语句的执行部分必须个字符。因此,语句的执行部分必须限制在限制在200个字符以内。个字符以内。DSP技术讲义,2010DSP技术讲义,2010数据类型数据类型举举 例例说说 明明二进制二进制1110001b或1110001B八进制八进制226q或572Q十进制十进制1234或+1234或-11234缺省型十六进十六进制制0A40h或0A40H或0 xA40浮点数浮点数1.623e-23仅用于C语言字符字符D字符串字符串“this is a string”DSP技术讲义,2010 设置好堆栈后,就可以使用堆栈了,如:设置好堆栈后,就可以使用堆栈了,如:CALL pmad CALL pmad;(SP)-1SP,(PC)+2TOS(SP)-1SP,(PC)+2TOS,pmadPCpmadPC RET RET ;(TOS)PC,(SP)+1SP(TOS)PC,(SP)+1SPDSP技术讲义,20104.3 汇编器伪指令u将代码和数据汇编进指定的段;将代码和数据汇编进指定的段;u在存储器中为未初始化的变量保留空间;在存储器中为未初始化的变量保留空间;u初始化存储器;初始化存储器;u声明全局变量;声明全局变量;u为汇编器指定从中可以获得宏的库。为汇编器指定从中可以获得宏的库。汇编伪指令功能汇编伪指令功能DSP技术讲义,20101.定义段的伪指令定义段的伪指令.bss.bss 为未初始化的数据段保留空间(单位为字)为未初始化的数据段保留空间(单位为字).data.data 指定指定.data.data后面的代码为数据段后面的代码为数据段.sect.sect 定义初始化的命名段定义初始化的命名段.text.text 指定指定.text.text后面的代码为文本段后面的代码为文本段.usect.usect 为未初始化的命名段保留空间为未初始化的命名段保留空间DSP技术讲义,20102.初始化常数的伪指令初始化常数的伪指令u.bes 和和.space在当前的段中保留指定的位数在当前的段中保留指定的位数u.byte伪指令在当前段中放一个伪指令在当前段中放一个8位值进入连续的字;位值进入连续的字;u.field 将单个数放进当前字的指定位域将单个数放进当前字的指定位域u.float和和.xfloat计算单个单精度浮点数,并将其存储计算单个单精度浮点数,并将其存储在当前段的在当前段的2个连续的字中;个连续的字中;u.int,.word 将一个或多个将一个或多个16位的值放进当前段的连续位的值放进当前段的连续字中字中,.int 为无符号整型为无符号整型,.word 为带符号整型。为带符号整型。u.long,.xlong 把把32位数存放到当前段连续的两个字中。位数存放到当前段连续的两个字中。u.string,.pstring把把8位的字符从一个或多个字符串中传位的字符从一个或多个字符串中传送到当前段中。送到当前段中。DSP技术讲义,20103.输出列表格式伪指令输出列表格式伪指令u.title 为汇编器提供一个打印在每一页顶部的标题。为汇编器提供一个打印在每一页顶部的标题。u.list/nolist 重新启动重新启动/停止源程序清单。停止源程序清单。4.引用其他文件的伪指令引用其他文件的伪指令u.copy/.include 从其他文件包括源语句;从其他文件包括源语句;u.def 识别定义在当前和用在其他模块中的一个或多个识别定义在当前和用在其他模块中的一个或多个符号;符号;u.global 定义一个或多个全局符号定义一个或多个全局符号 u.mlib 定义宏库定义宏库u.ref 识别用在当前模块但定义在其他模块中的一个或识别用在当前模块但定义在其他模块中的一个或多个符号。多个符号。DSP技术讲义,20105.控制条件汇编的伪指令控制条件汇编的伪指令u.if/.elseif/.else/.endif 条件汇编条件汇编u.loop/.break/.endloop 循环汇编循环汇编6.其他伪指令其他伪指令u.equ/.set 使一个符号等于一个值使一个符号等于一个值u.end 结束程序结束程序u有关伪指令更详细的内容见有关伪指令更详细的内容见TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001 DSP技术讲义,2010宏语言宏语言 宏宏:用户用户定义的能被用作指令的程序。定义的能被用作指令的程序。汇编器支持宏语言,使用户可汇编器支持宏语言,使用户可以建立自己的以建立自己的“指令指令”。当程序要。当程序要将特定的任务执行若干次时,尤其将特定的任务执行若干次时,尤其有用有用。DSP技术讲义,2010宏的使用宏的使用DAT0 .set 60hDAT1 .set 61hDAT2 .set 62hDAT3 .set 63h .textADD3 .macro X1,X2,X3,X_SUM LD X1,A ADD X2,A ADD X3,A STL A,X_SUM .endm ST#0020h,DAT0 ST#0030h,DAT1 ST#1140h,DAT2 ADD3 DAT0,DAT1,DAT2,DAT3 NOP .endDSP技术讲义,2010iiixa41DSP技术讲义,2010续上表续上表DSP技术讲义,2010续上表续上表DSP技术讲义,2010第二部分第二部分DSP汇编程序开发工具汇编程序开发工具DSP技术讲义,2010uTMS320C54x提供提供2种编程语言:种编程语言:汇编语言汇编语言和和C/C+语言语言。对于完成一般性功能的代码,这。对于完成一般性功能的代码,这2种语言都可以种语言都可以使用,但对于一些运算量很大的关键代码,最好采用使用,但对于一些运算量很大的关键代码,最好采用手工编写的汇编语言来完成。手工编写的汇编语言来完成。uTMS320C54x 提供有提供有2种开发环境:种开发环境:非集成非集成的开发环的开发环境和境和集成集成开发环境开发环境Code Composer Studio,简称,简称CCS。CCS在在WINDOWS操作环境下运行,集成了非集成开操作环境下运行,集成了非集成开发环境的所有功能,并扩展了许多其他功能。发环境的所有功能,并扩展了许多其他功能。DSP技术讲义,2010C C源文件源文件C C编译器编译器汇编汇编源文件源文件汇编器汇编器汇编汇编源文件源文件COFFCOFF目标目标文件文件链接器链接器可执行的可执行的COFFCOFF文件文件宏宏源文件源文件存档存档器器宏库宏库存档器存档器目标目标文件库文件库建库工具建库工具运行时运行时支持库支持库EPROMEPROM编程器编程器交叉引用交叉引用列表器列表器调试工具调试工具TMS320C54xTMS320C54x绝对地址绝对地址列表器列表器HEXHEX代码代码转换工具转换工具DSP技术讲义,2010.asm源文件源文件.obj目标文件目标文件.out输出文件输出文件.cmd链接命链接命令文件令文件.lst列表文件列表文件.map存储器存储器映像文件映像文件-o-m-lDSP技术讲义,2010DSP技术讲义,2010DSP技术讲义,2010 段是段是COFF文件中最重要的概念。每个文件中最重要的概念。每个目标文件都分成若干段。目标文件都分成若干段。所谓所谓段段,是指存储器中占据相邻空间的,是指存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。是分开的和各不相同的。DSP技术讲义,2010 COFF目标文件都包含以下目标文件都包含以下3种形式的段:种形式的段:.text 段段(文本段文本段),通常包含可执行代码;,通常包含可执行代码;.data 段段(数据段数据段),通常包含初始化数据;,通常包含初始化数据;.bss 段段(保留空间段保留空间段),通常为未初始化变,通常为未初始化变量保留存储空间。量保留存储空间。DSP技术讲义,20102.段的基本类型段的基本类型 COFF目标文件中的段有两种基本类型。目标文件中的段有两种基本类型。初始化段初始化段 未未初始化段初始化段(1)初始化段初始化段 初始化段中包含有数据或程序代码。主要有:初始化段中包含有数据或程序代码。主要有:.text段段已初始化程序段;已初始化程序段;.data段段已初始化数据段;已初始化数据段;.sect段段已初始化段,由汇编器伪指令建立的自定义段。已初始化段,由汇编器伪指令建立的自定义段。DSP技术讲义,2010(2)(2)未初始化段未初始化段 在存储空间中,为未初始化数据保留存储空间。在存储空间中,为未初始化数据保留存储空间。它包括:它包括:.bssbss段段未初始化段;未初始化段;.usectusect段段未初始化段,由汇编命令建未初始化段,由汇编命令建立的命名段(自定义段)。立的命名段(自定义段)。DSP技术讲义,2010DSP技术讲义,2010目标文件中的段与目标存储器之间的关系目标文件中的段与目标存储器之间的关系 目标文件目标文件目标存储器目标存储器.bss.data.textRAME2PROMROMDSP技术讲义,2010 汇编器对段的处理是通过段伪指令来区别各个汇编器对段的处理是通过段伪指令来区别各个段的段的,并将段名相同的语句汇编在一起。并将段名相同的语句汇编在一起。汇编器有汇编器有5条伪指令可识别汇编语言程序的各条伪指令可识别汇编语言程序的各个段:个段:.bss .usect .text .data .sect定义未初始化段定义未初始化段定义未初始化段定义未初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段定义已初始化段313132323333DSP技术讲义,2010u链接器主要完成以下功能链接器主要完成以下功能:将程序中的各段按目标系统存储器配置表将程序中的各段按目标系统存储器配置表(.cmd)进行进行分配分配;给符号和段安排最终地址给符号和段安排最终地址,完成重定位操作完成重定位操作;在输入文件之间辨认没有定义的外部符号引用。在输入文件之间辨认没有定义的外部符号引用。链接器的使用链接器的使用 lnk500-option filenamefilename例例:lnk500 file1.obj file2.obj o link.outuTMS320C54x链接器把由汇编器产生的链接器把由汇编器产生的COFF目标文件目标文件作作为输入为输入,结合结合链接器命令文件链接器命令文件(*.cmd),输出可执行文件。输出可执行文件。DSP技术讲义,2010链接器命令文件链接器命令文件u目标系统存储器配置和链接使用伪指令目标系统存储器配置和链接使用伪指令MEMORY和和SECTIONS描述。描述。MEMORY:定义目标系统存储器配置定义目标系统存储器配置 SECTIONS:控制段的构成与存储器分配控制段的构成与存储器分配链接器命令文件链接器命令文件含有链接时所需的信息。这些信息含有链接时所需的信息。这些信息包括输入文件名、链接时的参数选项、目标系统存储包括输入文件名、链接时的参数选项、目标系统存储器配置和链接信息、全局符号定义等。器配置和链接信息、全局符号定义等。DSP技术讲义,2010u C54x用户自己设计的系统及存储器配置各不相同。用户自己设计的系统及存储器配置各不相同。MEMORY伪指伪指令可使你充分描述各个用户系统的实际存储器配置,然后用令可使你充分描述各个用户系统的实际存储器配置,然后用SECTIONS伪指令去指定各个段与存储器配置的分配关系。伪指令去指定各个段与存储器配置的分配关系。MEMORY伪指令语法格式如下:伪指令语法格式如下:MEMORYPAGE0:name1(attr):origin=constant,length=constant;fill=constant;.PAGEn:namen(attr):origin=constant,length=constant;fill=constant;DSP技术讲义,2010u 如果没有使用如果没有使用MEMORY和和SECTIONS定义存储器空间模型和定义存储器空间模型和配置,链接器对配置,链接器对C54x使用缺省的存储器模型和段分配方法。使用缺省的存储器模型和段分配方法。MEMORY /*MEMORY伪指令伪指令*/PAGE0:PROG:origin=0 x0080 length=0 xFF00PAGE1:DATA:origin=0 x0080 length=0 xFF80SECTIONS /*SECTIONS伪指令伪指令*/.text:PAGE=0.data:PAGE=0.cinit:PAGE=0.bss:PAGE=1DSP技术讲义,2010有关链接命令文件更详细的内容见有关链接命令文件更详细的内容见1、TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001或参考或参考2、TMS320C54x DSP应用程序设计与应用程序设计与开发开发.刘益成,北京航空航天大学出版社,刘益成,北京航空航天大学出版社,2002DSP技术讲义,2010链接命令文件的编写链接命令文件的编写/*链接命令文件链接命令文件*/*example.cmd*/*/a.obj b.obj c.obj /*输入文件名输入文件名*/-o prog.out /*输出输出out文件文件*/-m prog.mapMEMORY /*MEMORY伪指令伪指令*/RAM:origin=0100h length=0100hROM:origin=0100h length=0100hSECTIONS /*SECTIONS伪指令伪指令*/.text:ROM.data:RAM.bss:RAMDSP技术讲义,2010档案管理器(档案管理器(Archiver)u 档案管理器允许用户将一组文件归入一个单一文件中,这个单一档案管理器允许用户将一组文件归入一个单一文件中,这个单一文件就叫文件就叫库库或或归档文件归档文件。档案管理器的使用格式:档案管理器的使用格式:ar500-command option libname filename1filenamencommand 告诉档案管理器如何处理库告诉档案管理器如何处理库option 告诉档案管理器如何运行告诉档案管理器如何运行libname 归档库名,默认扩展名(归档库名,默认扩展名(.lib)filename 独立文件名(独立文件名(.obj)例例:创建一个名为创建一个名为function.lib的库,它包括文件的库,它包括文件sine.obj、cos.obj、flt.obj,命令为:,命令为:Ar500 a function sine cos fltDSP技术讲义,2010绝对列表器绝对列表器u绝对列表器是一个调试工具。它将链接后的目标文件作绝对列表器是一个调试工具。它将链接后的目标文件作为输入文件,创建扩展名为为输入文件,创建扩展名为.abs的文件作为输的文件作为输出。出。.abs文件显示目标代码绝对地址的列表。文件显示目标代码绝对地址的列表。启动绝对列表器的命令:启动绝对列表器的命令:abs500-option input-file 具体用法可参考具体用法可参考TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001DSP技术讲义,2010交叉引用列表器交叉引用列表器u交叉引用列表器也是一种调试工具。链接后的可执行交叉引用列表器也是一种调试工具。链接后的可执行文件作为交叉引用列表器的输入文件,其输出文件为文件作为交叉引用列表器的输入文件,其输出文件为交叉引用列表文件交叉引用列表文件(.xrf)。此列表文件列出可执行文件。此列表文件列出可执行文件中符号、符号的定义及它们的引用情况。中符号、符号的定义及它们的引用情况。启动交叉引用列表器的命令:启动交叉引用列表器的命令:xref500-option input file output filename 具体用法可参考具体用法可参考TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001DSP技术讲义,2010十六进制转换公用程序十六进制转换公用程序uC54x汇编器、链接器产生汇编器、链接器产生COFF可执行文件。可执行文件。COFF文文件是件是TI公司的二进制格式文件公司的二进制格式文件,便于模块化编程和提,便于模块化编程和提供灵活、方便的代码管理及存储空间管理。供灵活、方便的代码管理及存储空间管理。但是但是,大,大多数多数EPROM编程器不接收编程器不接收COFF格式文件,因此格式文件,因此TI公公司提供了一个将司提供了一个将COFF文件格式转化为文件格式转化为Intel、Tektronix、Motorola-S、ASCII-hex等文件格式的等文件格式的公用程序。公用程序。启动十六进制转换程序的命令:启动十六进制转换程序的命令:hex500-option filenameDSP技术讲义,2010第三部分DSP高级高级C语言程序设计语言程序设计DSP技术讲义,2010uTMS320C54x C/C+编译器支持编译器支持ANSI(American National Standards Institute)开发的开发的C/C+语言标准。语言标准。DSP技术讲义,2010C语言开发的优点语言开发的优点1)便于阅读,维护,交流;便于阅读,维护,交流;2)编程更为编程更为容易容易,不是特别精通汇编语言的开,不是特别精通汇编语言的开发人员也可以编写;发人员也可以编写;3)便于分工合作完成便于分工合作完成子模块子模块的编写,以及由子的编写,以及由子模块到模块到大系统大系统的搭建的搭建;4)便于便于移植移植到到C55、C2000、C6000等等DSP系系统中;统中;DSP技术讲义,2010TMS320C54x C编译器支持的关键词编译器支持的关键词1、const、volatile 关键词关键词 用来控制数据对象的存储分配,用来控制数据对象的存储分配,const定义的常定义的常数被分配在数被分配在ROM中,关键词中,关键词volatile定义的数据分配定义的数据分配在在RAM中。中。例如定义例如定义ROM表表 const int digits=0,1,2,3,4,5,6,7,8,9 例如定义例如定义RAM中的一个指向无符号整型的指针中的一个指向无符号整型的指针 volatile unsigned int*ctrlDSP技术讲义,20102、ioport 关键词关键词 用来访问用来访问TMS320C54x器件的器件的I/O端口空间端口空间 格式:格式:ioport type porthex_num ioport 指示这是一个端口变量的关键词。指示这是一个端口变量的关键词。type(类型)(类型)必须是必须是char(字符)、(字符)、short(短整数)、(短整数)、int(整数)或无符号的变量。(整数)或无符号的变量。porthex_num 指端口编号。指端口编号。hex_num变量为十六进制数。变量为十六进制数。DSP技术讲义,2010u 例:例:声明声明I/O端口为无符号端口端口为无符号端口10h,将,将a写到端口写到端口10h,然后将端口然后将端口10h读进读进b:ioport unsigned port10;/*访问访问I/O端口端口10h的变量的变量*/int func()port10=a;/*将将a写到端口写到端口10h*/b=port10;/*将端口将端口10h读进读进b*/u 端口变量的使用对赋值没有限制。端口变量可像其他变量端口变量的使用对赋值没有限制。端口变量可像其他变量一样用在表达式中。一样用在表达式中。a=port10+b;/*读端口读端口10h,加上,加上b,结果赋给,结果赋给a*/prot10+=a;/*读端口读端口10h,加上,加上a,结果写到端口,结果写到端口10h*/DSP技术讲义,20103、interrupt 关键词关键词 用来指定将函数作为中断函数处理。当用来指定将函数作为中断函数处理。当C代码被中断时,代码被中断时,中断程序必须保存所有寄存器的内容。中断程序必须保存所有寄存器的内容。中断函数的主体可具有局部变量并可自由使用堆栈。中断函数的主体可具有局部变量并可自由使用堆栈。interrupt void int_handler()unsigned int flags;C_int00 是是C/C+的进入点,为系统复位中断保留,该中的进入点,为系统复位中断保留,该中断程序初始化系统并调用函数断程序初始化系统并调用函数main。DSP技术讲义,2010 interrupt double compute_area(double radius)double area=PI*radius*radius;printf(nArea=%f,area);return area;u ISR 不能返回一个值。不能返回一个值。u ISR 不能传递参数。不能传递参数。u C编译器不允许在编译器不允许在ISR中做浮点运算。中做浮点运算。下面是一个错误的程序:下面是一个错误的程序:DSP技术讲义,2010面向面向DSP的的C程序设计准则程序设计准则 面向面向DSP的的C程序设计程序设计基本原则基本原则:C程序不但需要对数据流进程序不但需要对数据流进行编程,也要对时序机制进行编程。行编程,也要对时序机制进行编程。通用通用PC的的C程序程序u 大量数据集中式处理大量数据集中式处理u 数据流处理数据流处理u 非实时非实时u 直观的输入、输出设备,运直观的输入、输出设备,运行结果无需借助其他设备行结果无需借助其他设备u 数据来源可由软件仿真产生,数据来源可由软件仿真产生,或通过计算机接口从外部获或通过计算机接口从外部获取,数据可集中处理。取,数据可集中处理。面向面向DSP的的C程序程序u 极少数据的实时处理极少数据的实时处理u 数据流、时序处理数据流、时序处理u 实时性实时性u 输入输入/输出为映射在存储空间输出为映射在存储空间的数据,结果显示需借助示的数据,结果显示需借助示波器、逻辑分析仪等设备波器、逻辑分析仪等设备u 数据从数据从A/D获得,由于获得,由于DSP存储容量的限制,数据需实存储容量的限制,数据需实时处理。时处理。DSP技术讲义,2010实例#include#include hello.h#define BUFSIZE 30struct PARMS str=2934,9432,213,9432,&str;/*=main=*/void main()#ifdef FILEIO int i;char scanStrBUFSIZE;char fileStrBUFSIZE;size_t readSize;FILE *fptr;#endif /*write a string to stdout*/puts(hello world!n);DSP技术讲义,2010续上表#ifdef FILEIO /*clear char arrays*/for(i=0;i A STL A,*(_gvar);A=(gvar)RET .endC程序调用汇编程序程序调用汇编程序DSP技术讲义,2010DSP C程序中访问汇编变量和常数程序中访问汇编变量和常数有时要在有时要在C程序中访问汇编程序定义的程序中访问汇编程序定义的变量变量和和常数常数,汇编程序中变量,汇编程序中变量和常量的定义有以下三种方法:和常量的定义有以下三种方法:u 在在.bss段中定义的变量段中定义的变量u 不在不在.bss段中定义的变量段中定义的变量u 定义的常量定义的常量(1)直接在直接在.bss段或段或.usect段中定义的未初始化变量段中定义的未初始化变量第一步:使用第一步:使用.bss或或.usect段定义变量段定义变量第二步:使用第二步:使用.global伪指令定义为外部变量伪指令定义为外部变量第三步:在汇编程序中将下划线第三步:在汇编程序中将下划线“_”放在变量名之前放在变量名之前第四步:在第四步:在C中将变量说明为外部变量中将变量说明为外部变量1.访问汇编程序定义的变量访问汇编程序定义的变量DSP技术讲义,2010C程序(程序(mixc21.c)extern int asmfunction();/*说明外部的说明外部的asm函数函数*/extern int var;/*说明外部变量说明外部变量*/int result;main()int i=1000;var=1000;/*说明外部变量说明外部变量*/i=asmfunction();/*调用汇编函数调用汇编函数*/result=var*2+100;wait:goto wait;汇编程序(汇编程序(mixasm21.asm).bss _var,10 ;为变量为变量var留出留出10个字的空间个字的空间 .global _var ;说明外部变量说明外部变量 .global _asmfunction .text_asmfunction:LD#1000,A;A=1000 ADD*(_var),A ;(var)+A=A STL A,*(_var);A=(var)RET .endDSP技术讲义,2010(2)不在不在.bss段中定义变量段中定义变量 汇编变量可以在汇编变量可以在.bss中定义,也可以不在中定义,也可以不在.bss中定义。中定义。C程序(程序(mixc22.c)extern int data;/*这是一个对象这是一个对象*/int*data_p=data;/*说明指针指向它说明指针指向它*/int num;main()num=data_p3;/*指针指向数组的第指针指向数组的第4个元素个元素*/wait:goto wait;汇编程序(汇编程序(mixasm22.asm).global _data ;说明外部变量说明外部变量 .sect “.data:data _tab”;在在.data段产生一个名为段产生一个名为”data_tab“的数据的数据段段_data:.word 10 .word 20 .word 30 .word 40 .word 50 DSP技术讲义,2010C程序(程序(mixc23.c)extern int table_size;/*说明为外部的说明为外部的*/int a10,b10;main()int i;for(i=0;i table_size;i+)/*引用常量引用常量*/ai=0;bi=0;for(i=0;iA STM A,*(_gvar);A=(var)RET .endDSP技术讲义,2010u 该方法常常应用在该方法常常应用在C程序遇到无法实现的一些硬件控制问题程序遇到无法实现的一些硬件控制问题的情况下。而在的情况下。而在C程序中嵌入汇编语句不但能够有效的解决程序中嵌入汇编语句不但能够有效的解决这些问题,而且在这些问题,而且在C程序的关键部分用汇编语句代替程序的关键部分用汇编语句代替C语句语句可以优化这个程序。编译器将可以优化这个程序。编译器将DSP C程序中嵌入的汇编语程序中嵌入的汇编语句插入到由编译器产生的汇编语言文件中。句插入到由编译器产生的汇编语言文件中。格式:格式:在汇编语句前加在汇编语句前加”t”,然后再加左右双引号,用小括号将然后再加左右双引号,用小括号将语句括住,在括号前加上语句括住,在括号前加上asm标识符。标识符。asm(“t RSBX INTM”);/*使使INTM1*/DSP C程序中直接嵌套汇编语句程序中直接嵌套汇编语句DSP技术讲义,2010在在DSP C中嵌入汇编语句时,要注意以下几点:中嵌入汇编语句时,要注意以下几点:u要非常小心,不要干扰要非常小心,不要干扰C环境。编译器不能检验或分析插环境。编译器不能检验或分析插入的入的asm指令的正确性;指令的正确性;u将条件转移或标号插入到将条件转移或标号插入到C代码会产生无法预测的结果,代码会产生无法预测的结果,这是由于混淆了代码产生器使用的寄存器跟踪算法;这是由于混淆了代码产生器使用的寄存器跟踪算法;u当使用当使用asm语句时,不能改变语句时,不能改变C变量的值;变量的值;u不能利用不能利用asm语句插入汇编伪指令来改变汇编环境。语句插入汇编伪指令来改变汇编环境。DSP技术讲义,2010C程序程序(mixc31.c)extern unsigned int*vecTable;extern void c_int3()int a,b;main()unsigned int*pmst=(unsigned int*)0 x1d;asm(“t SSBX INTM“);/*INTM=1*/asm(“t STM 0 x08C0 PMST”);*pmst|=(unsigned int)&vecTable;asm(“t STM 0 x0100 IMR”);wait:asm(“t RSBX INTM“);/*INTM=0*/goto wait;DSP技术讲义,2010uDSP C编译器提供的内联函数与一般的函数一样编译器提供的内联函数与一般的函数一样使用,每一条使用,每一条intrinsics函数都相对应一条汇编函数都相对应一条汇编指令,并与汇编指令的功能相同。指令,并与汇编指令的功能相同。intrinsics函函数放在头文件数放在头文件intrindefs.h中。中。4.利用利用DSP C编译器的内联(编译器的内联(intrinsics)函函数访问汇编语句数访问汇编语句DSP技术讲义,2010C程序(程序(mixc41.c)#includeint x1,x2,result;main()x1=-1000;x2=-2000;x1=_abss(x1);x2=_abss(x2);result=_sadd(x1,x2);wait:goto wait;DSP技术讲义,2010程序设计范例程序设计范例例例 4.12 计算计算y=主要程序主要程序 .bss x,5 .bss y,1 STM#x,AR1 STM#4,AR2 LD#0,Aloop:ADD *AR1+,A BANZ loop,AR2-STL A,y51iixC程序设计:int sum5(int x5)int sum;int i;sum=x0;for(i=0;i5;i+)sum=sum+xi;return(sum);void main(void)int arr5=1,5,10,25,50;y=sum5(arr);DSP技术讲义,2010例例4.16 试编一程序,计算试编一程序,计算y=的值,并找出的值,并找出4项乘积项乘积 中中的最大值。的最大值。iia x#include math.hint a4=1,5,3,4;int x4=8,6,7,2;int y1,y2;void main(void)int i,j;int sum4=0,0,0,0;41iiixaDSP技术讲义,2010y1=0;for(i=0;i4;i+)sumi=ai*xi;/计算乘积计算乘积 y1=y1+sumi;/求和求和 y2=sum0;for(j=0;jy2)y2=sumj;DSP技术讲义,2010DSP技术讲义,2010DSP技术讲义,2010例4.19DSP技术讲义,201080 刚才的发言,如刚才的发言,如有不当之处请多指有不当之处请多指正。谢谢大家!正。谢谢大家!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


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

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


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