ImageVerifierCode 换一换
格式:PPT , 页数:80 ,大小:1,016.04KB ,
资源ID:12861988      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/12861988.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(DSP软件开发.ppt)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

DSP软件开发.ppt

1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,DSP,技术讲义,,2007,,陈军波,电子信息工程学院,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,DSP,技术讲义,,2007,,陈军波,电子信息工程学院,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Cliquez pour modifier le style du titre du masque,Cliquez pour modifier les styles du texte du masque,Deuxime niv

2、eau,Troisime niveau,Quatrime niveau,Cinquime niveau,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精选课件ppt,*,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,DSP,技术讲义,,2010,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,精选课件ppt,*,单击此处编辑母版标

3、题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,精选课件ppt,*,*,DSP,技术,04 TMS320C54x DSP,软件开发,DSP,技术,DSP,汇编语言程序设计,DSP,汇编程序开发工具,DSP,高级,C,语言程序设计,DSP,程序设计与开发,第一部分,DSP,汇编语言程序设计,汇编语言程序以,.,asm,为扩展名,可以用任意的编辑器编写源文件。一条语句占源程序的一行,汇编器每行最多读200个字符。因此,语句的执行部分必须限制在200个字符以内。,4.1.1,汇编语言源程序格式,源文件格式,助记符指令源语句的每一行通常包含,4,个部分:标号区、助记符区、操作数区和注

4、释区。,标号,:,助记符,操作数,;注释,助记符指令语法格式:,【例】,助记符指令源语句举例。,NANHU,.set,1,;,符号,NANHU1,Begin:,LD,#NANHUA,AR1,;,将,1,加载到,AR1,标 号,助记符,操作数,注 释,4,.,1,.,2,汇编语言中的常数与字符串,汇编器可支持7种类型的常数(常量)。,数据类型,举 例,说 明,二进制,b,或1110001,B,八进制,226,q,或572,Q,十进制,1234或+1234或-11234,缺省型,十六进制,0,A40h,或0,A40H,或0,xA40,浮点数,1.623,e-23,仅用于,C,语言,字符,D,字符串

5、this is a string”,4.2,堆栈的使用方法,1.,堆栈的设置,size .set 120,stack .usect “STACK”,size,STM#,stack,+,size,SP,在数据,RAM,空间开辟一个堆栈区。,在,RAM,中定义一个,STACK,的保留空间,共120个单元,设置堆栈指针,,#,stack,+,sizeSP,。,保留区的高地址赋给,SP,,作为堆栈的栈底,若程序中要使用堆栈,必须先进行设置,如:,设置好堆栈后,就可以使用堆栈了,如:,CALL pmad;(SP)-1SP,(PC)+2TOS,,,pmadPC,RET ;(TOS)PC,(SP)+1

6、SP,4.3,汇编器伪指令,将代码和数据汇编进指定的段;,在存储器中为未初始化的变量保留空间;,初始化存储器;,声明全局变量;,为汇编器指定从中可以获得宏的库。,汇编伪指令功能,1,.,定义段的伪指令,.bss,为未初始化的数据段保留空间(单位为字),.data,指定,.data,后面的代码为数据段,.sect,定义初始化的命名段,.text,指定,.text,后面的代码为文本段,.usect,为未初始化的命名段保留空间,2.,初始化常数的伪指令,.bes,和,.space,在当前的段中保留指定的位数,.byte,伪指令在当前段中放一个,8,位值进入连续的字;,.field,将单个数放进当前字

7、的指定位域,.float,和,.xfloat,计算单个单精度浮点数,并将其存储在当前段的,2,个连续的字中;,.int,.word,将一个或多个,16,位的值放进当前段的连续字中,.int,为无符号整型,.word,为带符号整型。,.long,.xlong,把,32,位数存放到当前段连续的两个字中。,.string,.pstring,把,8,位的字符从一个或多个字符串中传送到当前段中。,3.,输出列表格式伪指令,.title,为汇编器提供一个打印在每一页顶部的标题。,.list/nolist,重新启动,/,停止源程序清单。,4.,引用其他文件的伪指令,.copy/.include,从其他文件包

8、括源语句;,.def,识别定义在当前和用在其他模块中的一个或多个符号;,.global,定义一个或多个全局符号,.mlib,定义宏库,.ref,识别用在当前模块但定义在其他模块中的一个或多个符号。,5.,控制条件汇编的伪指令,.if/.elseif/.else/.endif,条件汇编,.loop/.break/.endloop,循环汇编,6.,其他伪指令,.equ/.set,使一个符号等于一个值,.end,结束程序,有关伪指令更详细的内容见,TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 200

9、1,宏语言,宏,:,用户,定义的能被用作指令的程序。,汇编器支持宏语言,使用户可以建立自己的,“,指令,”,。当程序要将特定的任务执行若干次时,尤其有用,。,宏的使用,DAT0 .set 60h,DAT1 .set 61h,DAT2 .set 62h,DAT3 .set 63h,.text,ADD3,.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,.end,【,例】计算,

10、y=,程序:,*,*example.asm *,*,.title “example.asm”,.mmregs,STACK .usect “STACK”,10h,.,bss a,4,.,bss x,4,.bss y,1,.def start,.data,;,为堆栈指定空间,;,为变量分配9个字的空间,table:,.word 1,2,3,4,.,word 8,6,4,2,.text,start:STM#0,SWWSR,STM#STACK+10h,SP,STM#a,AR1,RPT#7,MVPD table,*AR1+,CALL SUM,end:B end,;,变量初始化,;,插入0个等待状态,;,

11、设置堆栈指针,;,AR1,指向,a,;,移动8个数据,;,程序存储器到数据存储器,;,调用,SUM,子程序,续上表,SUM:STM#a,AR3,STM#x,AR4,RPTZ A,#3,MAC *AR3+,*AR4+,A,STL A,y,RET,.end,;,子程序执行,续上表,第二部分,DSP,汇编程序开发工具,TMS320C54x,提供,2,种编程语言:,汇编语言,和,C/C+,语言,。对于完成一般性功能的代码,这,2,种语言都可以使用,但对于一些运算量很大的关键代码,最好采用手工编写的汇编语言来完成。,TMS320C54x,提供有,2,种开发环境:,非集成,的开发环境和,集成,开发环境,C

12、ode Composer Studio,,简称,CCS,。,CCS,在,WINDOWS,操作环境下运行,集成了非集成开发环境的所有功能,并扩展了许多其他功能。,C,源文件,C,编译器,汇编,源文件,汇编器,汇编,源文件,COFF,目标,文件,链接器,可执行的,COFF,文件,宏,源文件,存档,器,宏库,存档器,目标,文件库,建库工具,运行时,支持库,EPROM,编程器,交叉引用,列表器,调试工具,TMS320C54x,绝对地址,列表器,HEX,代码,转换工具,汇编语言程序的编辑、汇编和链接过程,示意图,汇编器,调试程序,链接器,文本编辑器,.,asm,源文件,.,obj,目标文件,.,out,

13、输出文件,.,cmd,链接命,令文件,.,lst,列表文件,.,map,存储器,映像文件,十六进制,转换程序,HEX500,-,o,-,m,-,l,4.,4 COFF,的一般概念,汇编器和链接器生成的目标文件,是一个可以由,C54x,器件执行的文件。这些目标文件的格式称之为,公共目标文件格式(,COFF),。,在编写汇编语言程序时,,COFF,采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。,这些代码段和数据段简称为,段,。汇编器和链接器提供一些伪指令来建立和管理各种各样的段。,4.4.1 COFF,文件的基本单元,1.,段(,sections),段是,COFF,文件中

14、最重要的概念。每个目标文件都分成若干段。,所谓,段,,是指存储器中占据相邻空间的代码或数据块。一个目标文件中的每个段都是分开的和各不相同的。,COFF,目标文件都包含以下3种形式的段:,.text,段(文本段),,通常包含可执行代码;,.data,段(数据段),,通常包含初始化数据;,.bss,段(保留空间段),,通常为未初始化变量保留存储空间。,2.,段的基本类型,COFF,目标文件中的段有两种基本类型。,初始化段,未,初始化段,(1)初始化段,初始化段中包含有数据或程序代码。主要有:,.,text,段,已初始化程序段;,.,data,段,已初始化数据段;,.,sect,段,已初始化段,由汇

15、编器伪指令建立的自定义段。,(2),未初始化段,在存储空间中,为未初始化数据保留存储空间。,它包括:,.,bss,段,未初始化段;,.,usect,段,未初始化段,由汇编命令建立的命名段(自定义段)。,3.,段与目标存储器的对应关系,汇编器的任务:,在汇编过程中,根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。,链接器的任务,:,就是分配存储单元,将目标文件中的段重新定位到目标系统的不同存储器中,这一过程称为,定位,或,分配,。,目标文件中的段与目标存储器之间的关系,目标文件,目标存储器,.,bss,.,data,.,text,RAM,E,2,PROM,ROM,4.4.2,

16、汇编器对段的处理,汇编器对段的处理是通过段伪指令来区别各个段的,,,并将段名相同的语句汇编在一起。,汇编器有5条伪指令可识别汇编语言程序的各个段:,.,bss,.,usect,.,text,.,data,.,sect,定义未初始化段,定义未初始化段,定义已初始化段,定义已初始化段,定义已初始化段,经汇编后,得列表文件(部分):,2,*,3,*,汇编一个初始化表到.,data,段,*,4,*,5,0000,.data,6,0000,0044,coeff .word 044h,055h,066h,0001,0055,0002,0066,7,*,8,*,在,.,bss,段中为变量保留空间,*,9,*

17、10,0000,.bss buffer,,,8,11,*,12,*,仍然在,.,data,段中,*,13,*,14,0003,0456,prt,.,word 0456h,行号,目标代码,段名,100,d,f010,0001,f842,0001,110a,f166,000a,F868,0006,0044,0055,0066,0456,00,cc,00dd,00ee,0044,0088,没有数据,保留10个字,5 0000 .data,6 0000 0044 coeff .word 044h,055h,066h,10 0000 .bss buffer,,,8,14 0003 0456 prt,.

18、word 0456h,.,data,6,0044,6,0055,6,0066,10,.,bss,没有数据,保留8个字,14,0456,31,精选课件ppt,15,*,16,*,汇编代码到,.,text,段,*,17,*,18,0000,.text,19,0000,100d,add,:,LD 0Dh,,,A,20,0001,f010,aloop,:,SUB#1,,,A,0002,0001,21,0003,f842,BC aloop,,,AGEQ,0004,0001,22,*,23,*,汇编另一个初始化表到,.,data,段,*,24,*,25,0004,.,data,26,0004,00cc,

19、ivals,.,word 0CCh,,,0DDh,,,0EEh,0005,00dd,0006,00ee,27,*,28,*,为更多的变量定义另一个段,*,29,*,30,0000,var2,.,usect “newvars”,,,2,31,0001,inbuf,.,usect “newvars”,,,8,行号,目标代码,段名,100,d,f010,0001,f842,0001,110a,f166,000a,F868,0006,6,6,6,14,0044,0055,0066,0456,00,cc,00dd,00ee,.,data,0044,0088,10,没有数据,保留8个字,.,bss,没有数

20、据,保留10个字,.,text,18 0000 .text,19 0000 100d add,:,LD 0Dh,,,A,19,100d,20 0001 f010 aloop,:,SUB#1,,,A,20,f010,20,0001,21 0003,f842 BC aloop,,,AGEQ,21,f842,21,0001,25 0004,.,data,26 0004 00cc ivals,.,word 0CCh,,,0DDh,,,0EEh,.,data,26,00cc,26,00dd,26,00ee,30 0000 var2,.,usect “newvars”,,,2,newvars,30,保留2

21、个字,31 0001 inbuf,.,usect “newvars”,,,8,31,保留8个字,32,精选课件ppt,32,*,*,33,*,汇编更多代码到,.,text,段,*,34,*,35,0005,.,text,36,0005,110a,mpy,:,LD 0Ah,,,B,37,0006,f166,mloop MPY#0Ah,,,B,0007,000a,38,0008,f868,BC mloop,,,BNOV,0009,0006,39,*,40,*,为中断向量,.,vectors,定义一个自定义段,*,41,*,42,0000,.,sect “vectors”,43,0000,0044,

22、word 044h,,,088h,0001,0088,行号,目标代码,段名,19,20,20,21,21,100,d,f010,0001,f842,0001,110a,f166,000a,F868,0006,.,text,6,6,6,14,26,26,26,0044,0055,0066,0456,00,cc,00dd,00ee,.,data,0044,0088,10,没有数据,保留8个字,.,bss,30,31,没有数据,保留10个字,newvars,35 0005,.,text,.,text,36 0005 110a mpy,:,LD 0Ah,,,B,36,110a,37,0006 f1

23、66 mloop MPY#0Ah,,,B,37,f166,37,000a,38 0008 f868 BC mloop,,,BNOV,38,f868,38,0006,42 0000,.,sect “vectors”,vectors,43 0000 0044,.,word 044h,,,088h,43,0044,43,0088,33,精选课件ppt,链接器主要完成以下功能,:,将程序中的各段按目标系统存储器配置表,(.cmd),进行分配,;,给符号和段安排最终地址,完成重定位操作,;,在输入文件之间辨认没有定义的外部符号引用。,链接器的使用,lnk500-option,例,:,lnk500 o l

24、ink.out,TMS320C54x,链接器把由汇编器产生的,COFF,目标文件,作为输入,结合,链接器命令文件,(*.cmd),输出可执行文件。,链接器命令文件,目标系统存储器配置和链接使用伪指令,MEMORY,和,SECTIONS,描述。,MEMORY:,定义目标系统存储器配置,SECTIONS:,控制段的构成与存储器分配,链接器命令文件,含有链接时所需的信息。这些信息包括输入文件名、链接时的参数选项、目标系统存储器配置和链接信息、全局符号定义等。,C54x,用户自己设计的系统及存储器配置各不相同。,MEMORY,伪指令可使你充分描述各个用户系统的实际存储器配置,然后用,SECTIONS,

25、伪指令去指定各个段与存储器配置的分配关系。,MEMORY,伪指令语法格式如下:,MEMORY,PAGE0:name1(attr):origin=constant,length=constant;fill=constant;,.,.,.,PAGEn:namen(attr):origin=constant,length=constant;fill=constant;,如果没有使用,MEMORY,和,SECTIONS,定义存储器空间模型和配置,链接器对,C54x,使用缺省的存储器模型和段分配方法。,MEMORY /*MEMORY,伪指令*,/,PAGE0:PROG:origin=0 x0080 le

26、ngth=0 xFF00,PAGE1:DATA:origin=0 x0080 length=0 xFF80,SECTIONS /*SECTIONS,伪指令*,/,.text:PAGE=0,.data:PAGE=0,.cinit:PAGE=0,.bss:PAGE=1,有关链接命令文件更详细的内容见,1,、,TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001,或参考,2,、,TMS320C54x DSP,应用程序设计与开发,.,刘益成,北京航空航天大学出版社,,2002,链接命令文件的编写,/

27、链接命令文件*,/,/*example.cmd*/,/*/,a.obj b.obj c.obj /*,输入文件名*,/,-o prog.out /*,输出,out,文件*,/,-m prog.map,MEMORY /*MEMORY,伪指令*,/,RAM:origin=0100h length=0100h,ROM:origin=0100h length=0100h,SECTIONS /*SECTIONS,伪指令*,/,.text:ROM,.data:RAM,.bss:RAM,档案管理器(,Archiver,),档案管理器允许用户将一组文件归入一个单一文件中,这个单一文件就叫,库,或,归档文件

28、档案管理器的使用格式:,ar500-command option libname,command,告诉档案管理器如何处理库,option,告诉档案管理器如何运行,libname,归档库名,默认扩展名(,.lib),独立文件名(,.obj),例,:,创建一个名为,function.lib,的库,它包括文件,sine.obj,、,cos.obj,、,flt.obj,,命令为:,Ar500 a function sine cos flt,绝对列表器,绝对列表器是一个调试工具。它将链接后的目标文件作为输入文件,创建扩展名为,.abs,的文件作为输出。,.abs,文件显示目标代码绝对地址的列表。,

29、启动绝对列表器的命令:,abs500-option input-file,具体用法可参考,TMS320C54x Assembly Language Tools Users Guide.Texas Instruments Inc,June 2001,交叉引用列表器,交叉引用列表器也是一种调试工具。链接后的可执行文件作为交叉引用列表器的输入文件,其输出文件为交叉引用列表文件,(.xrf),。此列表文件列出可执行文件中符号、符号的定义及它们的引用情况。,启动交叉引用列表器的命令:,xref500-option input file output,具体用法可参考,TMS320C54x Assembly

30、 Language Tools Users Guide.Texas Instruments Inc,June 2001,十六进制转换公用程序,C54x,汇编器、链接器产生,COFF,可执行文件。,COFF,文件是,TI,公司的二进制格式文件,,便于模块化编程和提供灵活、方便的代码管理及存储空间管理。,但是,,大多数,EPROM,编程器不接收,COFF,格式文件,因此,TI,公司提供了一个将,COFF,文件格式转化为,Intel,、,Tektronix,、,Motorola-S,、,ASCII-hex,等文件格式的公用程序。,启动十六进制转换程序的命令:,hex500-option,第三部分,D

31、SP,高级,C,语言程序设计,TMS320C54x C/C+,编译器支持,ANSI(American National Standards Institute),开发的,C/C+,语言标准。,C,语言开发的优点,1)便于阅读,维护,交流;,2)编程更为,容易,,不是特别精通汇编语言的开发人员也可以编写;,3)便于分工合作完成,子模块,的编写,以及由子模块到,大系统,的搭建;,4)便于,移植,到,C55、C2000、C6000,等,DSP,系统中;,TMS320C54x C,编译器支持的关键词,1,、,const,、,volatile,关键词,用来控制数据对象的存储分配,,const,定义的常数

32、被分配在,ROM,中,关键词,volatile,定义的数据分配在,RAM,中。,例如定义,ROM,表,const int digits=0,1,2,3,4,5,6,7,8,9,例如定义,RAM,中的一个指向无符号整型的指针,volatile unsigned int*ctrl,2,、,ioport,关键词,用来访问,TMS320C54x,器件的,I/O,端口空间,格式:,ioport,type,port,hex_num,ioport,指示这是一个端口变量的关键词。,type,(类型)必须是,char,(字符)、,short,(短整数)、,int,(整数)或无符号的变量。,port,hex_nu

33、m,指端口编号。,hex_num,变量为十六进制数。,例:,声明,I/O,端口为无符号端口,10h,,将,a,写到端口,10h,,然后将端口,10h,读进,b,:,ioport unsigned port10;/*,访问,I/O,端口,10h,的变量*,/,int func(),port10=a;/*,将,a,写到端口,10h*/,b=port10;/*,将端口,10h,读进,b*/,端口变量的使用对赋值没有限制。端口变量可像其他变量一样用在表达式中。,a=port10+b;,/*,读端口,10h,,加上,b,,结果赋给,a*/,prot10+=a;,/*,读端口,10h,,加上,a,,结果写

34、到端口,10h*/,3,、,interrupt,关键词,用来指定将函数作为中断函数处理。当,C,代码被中断时,中断程序必须保存所有寄存器的内容。,中断函数的主体可具有局部变量并可自由使用堆栈。,interrupt,void int_handler(),unsigned int flags;,C_int00,是,C/C+,的进入点,为系统复位中断保留,该中断程序初始化系统并调用函数,main,。,interrupt double compute_area(double radius)double area=PI*radius*radius;printf(nArea=%f,area);return

35、 area;,ISR,不能返回一个值。,ISR,不能传递参数。,C,编译器不允许在,ISR,中做浮点运算。,下面是一个错误的程序:,面向,DSP,的,C,程序设计准则,面向,DSP,的,C,程序设计,基本原则,:,C,程序不但需要对数据流进行编程,也要对时序机制进行编程。,通用,PC,的,C,程序,大量数据集中式处理,数据流处理,非实时,直观的输入、输出设备,运行结果无需借助其他设备,数据来源可由软件仿真产生,或通过计算机接口从外部获取,数据可集中处理。,面向,DSP,的,C,程序,极少数据的实时处理,数据流、时序处理,实时性,输入,/,输出为映射在存储空间的数据,结果显示需借助示波器、逻辑分

36、析仪等设备,数据从,A/D,获得,由于,DSP,存储容量的限制,数据需实时处理。,实例,#include,#include hello.h,#define BUFSIZE 30,struct PARMS str=,2934,9432,213,9432,&str,;,/*,*=main=,*/,void main(),#ifdef FILEIO,int i;,char scanStrBUFSIZE;,char BUFSIZE;,size_t readSize;,FILE *fptr;,#endif,/*write a string to stdout*/,puts(hello world!n);

37、续上表,#ifdef FILEIO,/*clear char arrays*/,for(i=0;i A,STL A,*(_gvar),;A=(gvar),RET,.end,C,程序调用汇编程序,DSP C,程序中访问汇编变量和常数,有时要在,C,程序中访问汇编程序定义的,变量,和,常数,,汇编程序中变量和常量的定义有以下三种方法:,在,.bss,段中定义的变量,不在,.bss,段中定义的变量,定义的常量,(1),直接在,.bss,段或,.usect,段中定义的未初始化变量,第一步:使用,.bss,或,.usect,段定义变量,第二步:使用,.global,伪指令定义为外部变量,第三步:在汇编

38、程序中将下划线“,_”,放在变量名之前,第四步:在,C,中将变量说明为外部变量,1.,访问汇编程序定义的变量,C,程序(,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,

39、为变量,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,.end,(2),不在,.bss,段中定义变量,汇编变量可以在,.bss,中定义,也可以不在,.bss,中定义。,C,程序(,mixc22.c,),extern int data,;,/*,这是一个对象*,/,int*data_p=data;,/*,说明指针指向它,*/,int num

40、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,C,程序(,mixc23.c,),extern int,table_size,;,/*,说明为外部的*,/,int a10,b10;,main(),int i;,for(

41、i=0;i,table_size,;i+),/*,引用常量*,/,ai=0;,bi=0;,for(i=0;iA,STM A,*(_gvar),;A=(var),RET,.end,该方法常常应用在,C,程序遇到无法实现的一些硬件控制问题的情况下。而在,C,程序中嵌入汇编语句不但能够有效的解决这些问题,而且在,C,程序的关键部分用汇编语句代替,C,语句可以优化这个程序。编译器将,DSP C,程序中嵌入的汇编语句插入到由编译器产生的汇编语言文件中。,格式:,在汇编语句前加”,t”,然后再加左右双引号,用小括号将语句括住,在括号前加上,asm,标识符。,asm(“t RSBX INTM”);,/*,使

42、INTM,1*/,DSP C,程序中直接嵌套汇编语句,在,DSP C,中嵌入汇编语句时,要注意以下几点:,要非常小心,不要干扰,C,环境。编译器不能检验或分析插入的,asm,指令的正确性;,将条件转移或标号插入到,C,代码会产生无法预测的结果,这是由于混淆了代码产生器使用的寄存器跟踪算法;,当使用,asm,语句时,不能改变,C,变量的值;,不能利用,asm,语句插入汇编伪指令来改变汇编环境。,C,程序,(mixc31.c),extern unsigned int*vecTable,;,extern void c_int3(),int a,b;,main(),unsigned int*pmst

43、unsigned int*)0 x1d;,asm(“t SSBX INTM“);,/*INTM=1*/,asm(“t STM 0 x08C0 PMST”);,*pmst|=(unsigned int),asm(“t STM 0 x0100 IMR”);,wait:,asm(“t RSBX INTM“);,/*INTM=0*/,goto wait;,DSP C,编译器提供的内联函数与一般的函数一样使用,每一条,intrinsics,函数都相对应一条汇编指令,并与汇编指令的功能相同。,intrinsics,函数放在头文件,intrindefs.h,中。,4.,利用,DSP C,编译器的内联(,

44、intrinsics),函数访问汇编语句,C,程序(,mixc41.c),#include,int x1,x2,result;,main(),x1=-1000;,x2=-2000;,x1=_abss(x1);,x2=_abss(x2);,result=_sadd(x1,x2);,wait:,goto wait;,程序设计范例,例,4.12,计算,y=,主要程序,.bss x,5,.bss y,1,STM#x,AR1,STM#4,AR2,LD#0,A,loop:ADD *AR1+,A,BANZ loop,AR2-,STL A,y,C,程序设计:,int sum5(int x5),int sum;

45、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);,例,4.16,试编一程序,计算,y=,的值,并找出,4,项乘积 中的最大值。,#include math.h,int 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;,y1=0;,for(i=0;i4;i+),sumi=ai*xi;/,计算乘积,y1=y1+sumi;/,求和,y2=sum0;,for(j=0;jy2),y2=sumj;,例,4.19,此课件下载可自行编辑修改,供参考!,感谢您的支持,我们努力做得更好!,

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服