1、雨下整夜我的爱溢出就像雨水,窗台蝴蝶像诗里纷飞的美丽章节。我接着写把永远爱你写进诗的结尾,你是我唯一想要的了解。这里是整理的空间留言寄语【优秀3篇】,您的肯定与分享是对小编最大的鼓励。
(中国电子科技集团公司第二十研究所,陕西 西安 710068)
【摘要】介绍了在TS201上进行软件开发的几种方法,从工程实现的角度比较各自的优缺点,指出C/C++语言和汇编语言混合编程技术的优越性。之后详细阐述ccts编译器的C/C++运行时模型对TigerShark系列DSP芯片的C/C++混合编程所规定的调用规则和接口规范,并给出程序设计实例。对工程实践有很大的参考价值。
关键词 DSP;混合编程
1C/C++语言和汇编语言混合编程特点
TS201的软件开发平台Visual DSP++允许用户从汇编语言、C语言的任意一种进行编程或者两种结合使用。C语言程序和汇编程序各具特点,根据不同的场合选择不同的编程语言。C语言程序除了具备可移植性好、兼容性好、软件资源丰富等优点外,对于这种DSP处理器的开发而言,采用C语言编写还能免去熟悉DSP指令体系、硬件的内部结构等工作,简单方便。但是,虽然汇编语言写程序代码长,程序检查也很困难,汇编语言的算法执行效率远远高于C语言。在程序设计的时候,可根据系统计算量、时间资源等选择适合的编程语言,同时也可以选择两种编程语言结合使用。在实际的工程中,常常采用的都是两种结合使用的方式,程序的框架和控制部分采用C语言设计,算法和数据传输部分采用汇编语言设计,这样程序就可读性好,同时执行效率高。
2混合编程参数传递规则
如果在C语言中调用汇编子程序,则这些汇编子程序必须遵守DSP运行规则,这些运行规则称为C语言实时运行模式。
2.1堆栈管理
实时运行堆栈就是内部存储器中的一个缓冲区,通过堆栈指针(j/k27寄存器)和帧指针(j/k26寄存器)进行堆栈的维护。堆栈主要用于保存局部变量,在函数中可能被修改的专用和保留寄存器的值,函数的输入输出参数以及链接信息。
ccts编译器目前使用两个堆栈。这两个堆栈位于不同的存储器块中,分别通过iALU寄存器J和K寻址。堆栈指针从存储器的高地址向低地址增长,且堆栈行4字为1组,帧指针指向当前堆栈帧的起始地址,而堆栈指针则指向下一个可用的存储器地址单元。
帧指针总是在实际帧基地址的基础上的,偏移量-0x40以便为局部变量提供较大的寻址范围,J帧指针可以保存到k24中。当在JALU中进行其他地址计算时,允许JFP相对寻址引用可以提高程序的执行效率。如果程序不使用k堆栈,就可以省去所有的操作,包括与k堆栈相关的链接信息等。在调用者的帧中,至少要为4个“参数字”分配空间,这样对于输入参数较少的叶子函数避免创建堆栈。
2.2参数传递规则
1)指针和整数类型通过j寄存器传递。
2)浮点数和双字变量通过XR寄存器来传递。
3)如果输入参数超过2个字,则调用者通过为变量分配存储空间,并将地址以通过j寄存器传递到被调函数中。前4个参数字一般通过寄存器来传递,这样就可以提高程序执行的效率,也大大方便了程序的编写。
4)如果函数原型有参数(“…”),则紧跟着省略号之前的那个参数和省略号后的参数都将通过存储器传递。
2.3返回值规则
返回值总是通过寄存器j8和X8、X9来传递。返回值的类型决定使用j寄存器还是使用寄存器X,指针和整数通过j寄存器来传递,浮点和双字结果通过两个X寄存器来传递。如果返回值大于2个字,则调用者必须为被调用者的返回值分配空间,并将此空间的地址以隐含参数的方式传递到被调函数中。
3实例分析
子函数:Rx_compute(plusenumber,X,Rx)
该子函数实现了计算矩阵的协方差矩阵的功能。由于输入和输出矩阵的大小都超过了两个字,所以可以采取分配存储空间,通过地址来进行参数传递。
输入参数:plusenumber矩阵的大小
X输入矩阵的地址
输出参数:Rx输出矩阵的地址
则按照上面的顺序,子函数中三个参数分别在j4、j5、j6 中存储。
4结束语
本文介绍了基于TS201平台的C/C++语言☆☆和汇编语言混合编程方法。由示例程序的比较结果可以看出,这种方法既可以极大提高程序的执行效率,也可以方便用户编程。
参考文献
[1]Visual DSP++4.0 C/C++ Compiler and Library Manual for TigerSHARC Processors[Z].2005.
[2]刘树明,苏涛,罗辉军。TigerSHARC DSP应用系统设计[M].北京:电子工业出版社,2004.
2、点击“留言板”选项,进入页面;
3、在留言板上点击"编缉主人寄语"选项,弹出对话框;
4、选择“插入图片”选项,出现插入图片对话框;
桑田一变已难寻。别有仙居对三市,金阙银宫相向起。
台前镜影伴仙娥,楼上箫声随凤史。凤楼迢递绝尘埃,
莺时物色正裴回。灵芝紫检参差长,仙桂丹花重叠开。
双童绰约时游陟,三鸟联翩报消息。尽言真侣出遨游,
传道风光无限极。轻花委砌惹裾香,残月窥窗觇幌色。
个时无数并妖妍,个里无穷总可怜。别有众中称黜帝,
天上人间少流例。洛滨仙驾启遥源,淮浦灵津符远筮。
自言少小慕幽玄,只言容易得神仙。珮中邀勒经时序,
箫里寻思复几年。寻思许事真情变,二人容华识少选。
漫道烧丹止七飞,空传化石曾三转。寄语天上弄机人,
寄语河边值查客,乍可匆匆共百年,谁使遥遥期七夕。
想知人意自相寻,果得深心共一心。一心一意无穷已,
投漆投胶非足拟。只将羞涩当风流,持此相怜保终始。
相怜相念倍相亲,一生一代一双人。不把丹心比玄石,
惟将浊水况清尘。只言柱下留期信,好欲将心学松蕣。
不能京兆画蛾眉,翻向成都骋驺引。青牛紫气度灵关,
尽素赩鳞去不还。连苔上砌无穷绿,修竹临坛几处斑。
此时空床难独守,此日别离那可久。梅花如雪柳如丝,
年去年来不自持。初言别在寒偏在,何悟春来春更思。
春时物色无端绪,双枕孤眠谁分许。分念娇莺一种啼,
生憎燕子千般语。朝云旭日照青楼,迟晖丽色满皇州。
落花泛泛浮灵沼,垂柳长长拂御沟。御沟大道多奇赏,
侠客妖容递来往。宝骑连花铁作钱,香轮骛水珠为网。
香轮宝骑竞繁华,可怜今夜宿倡家。鹦鹉杯中浮竹叶,
凤凰琴里落梅花。许辈多情偏送款,为问春花几时满。
千回鸟信说众诸,百过莺啼说长短。长短众诸判不寻,
千回百过浪关心。何曾举意西邻玉,未肯留情南陌金。
南陌西邻咸自保,还辔归期须及早。为想三春狭斜路,
莫辞九折邛关道。假令白里似长安,须使青牛学剑端。
蘋风入驭来应易,竹杖成龙去不难。龙飙去去无消息,
鸾镜朝朝减容色。君心不记下山人,妾欲空期上林翼。
上林三月鸿欲稀,华表千年鹤未归。不分淹留桑路待,