版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
DSP芯片原理与应用第11讲C55x汇编语言的DSP芯片软件开发(二)——汇编程序设计1引言1C55x汇编语言程序目录2C55x汇编代码的优化CONTENTS3汇编和C混合编程1、C55x汇编语言程序一种源程序后缀名:.asm利用编译器可以得到目标代码.o由C/C++源程序也可以经过汇编得到相应的汇编语言程序1、C55x汇编语言程序**第1步:分配块−−−−−−利用助记符指令撰写、也可以用代数指令撰写.defx,y,init.usect"vars",4.usect"vars",1.sect"table"xy;;;为变量x保留4个未初始化的16位内存空间为变量y保留4个未初始化的16位内存空间创建一个名为“table”的初始化数据块1,2,3,4;定义一个数组init,包含4个整形数.text.defstart;;;创建一个代码块(默认是.text)定义代码的起始标号(起始地址)标号start*第2步:初始化处理器模式*−−−−−−BCLRC54CMBCLRAR0LCBCLRAR6LC;;;设置处理器为C55x本地模式设置寄存器AR0处于线性寻址状态设置寄存器AR0处于线性寻址状态汇编程序示例1、C55x汇编语言程序汇编语言程序•••由源语句构成的代码,通常放在.text块中,也可以自定义块名预先规定的数据块,通常放在.data,.bss等块中各段代码可以构成调用关系••CALL,调用RET,返回1、C55x汇编语言程序汇编语言程序
保护当前正在使用的数据
确定调用函数的入口地址
函数调用中参数值的传递函数调用CALL2000h返回堆栈指针SP减1,PC+2保存在堆栈中,PC值改为2000h,开始从地址2000h执行1、C55x汇编语言程序汇编语言程序
保护当前正在使用的数据
确定调用函数的入口地址
函数调用中参数值的传递函数调用返回与调用配套,放在函数结尾处堆栈顶端保存的返回地址送入PC中,SP加11、C55x汇编语言程序汇编语言程序函数的参数传递
函数调用前,第一个参数通过累加器AC0传递,其他传递参数按照逆序保存在堆栈中
函数中,先将累加器AC0中的值赋予第一个参数,随后按顺序将堆栈中的值赋予其他参数
返回数据保存在累加器AC0中传递start;标号*−−−−−−MOVCALLcont……#16,AC0;将16赋值为AC0;调用cont,16是参数cont;标号*−−−−−−SUBRET#1,AC0;;将A减1返回1、C55x汇编语言程序汇编语言程序函数的参数传递
函数调用时必须确定有用数据都已被保存
函数调用不影响状态寄存器,因此在编写函数时,必须确定该函数中各状态寄存器的设置是否与主调函数中的一致
若不一致,在被调函数的开始阶段修改,在被调函数返回前必须修改回来在涉及代数运算的函数中,由于影响计算结果的功能比特很多,汇编语言程序撰写比较麻烦start;标号*−−−−−−MOVCALLcont……#16,AC0;将16赋值为AC0;调用cont,16是参数cont;标号*−−−−−−SUBRET#1,AC0;;将A减1返回1、C55x汇编语言程序汇编语言程序的执行过程C语言程序从main开始,汇编语言程序呢?汇编语言程序由源语句构成源语句的核心是各条指令默认的执行过程是从上至下按照源语句的顺序执行利用程序控制的指令可以控制程序的执行过程
RESET
跳转
函数调用
块重复
软、硬件中断1引言1C55x汇编语言程序目录2C55x汇编代码的优化CONTENTS3C55x汇编和C混合编程2、C55x汇编语言的优化有效使用双MAC硬件C55x芯片中包含两个硬件的MAC单元,使用好这两个单元,将会有效提高执行效率。•双MAC/MAS操作只能使用三个操作数,即MAC/MAS操作要共用其中的一个操作数;共用操作数必须使用XCDP(系数指针)寻址,并保存在内部存储器中;共用操作数应与其他两个操作数存放在不同的存储块中。••2、C55x汇编语言的优化充分使用并行执行的特性C55x结构允许在一个指令周期并行执行两条指令,以减少执行时间。C55x支持并行方式可分为三类:•••单指令内建并行:自动的用户自定义并行:用户可选择来实现的内建和用户自定义混合并行:2、C55x汇编语言的优化实现高效循环C55汇编语言中实现循环的方法单循环:repeat(CSR/k8/k16),[CSR+=TA/k4];局部块循环:localrepeat{};块循环:blockrepeat{};当辅助寄存器非零时跳转:这是代数指令形式无开销循环if(ARn_mod!=0)goto#loop_start。与C程序流程的条件判断-跳转方式一样,需要进行判断、跳转才能执行核心的循环操作2、C55x汇编语言的优化实现高效循环C55汇编语言中实现无开销循环的方法单循环:这是汇编指令形式RPT(CSR/k8/k16)//紧接的源语句执行CSR/k8///k16+1次
使用单循环指令后,可以充分利用流水线的优势,将后续指令的连续执行时间减到最少
执行完单循环指令后,才执行中断2、C55x汇编语言的优化实现高效循环C55汇编语言中实现无开销循环的方法局部块循环:RPTBLOCALpmad//重复执行从紧接的源语句到pmad//处的一段指令,次数=(BRC0/1)//+1次。仅限于IRQ中的指令块循环RPTBpmad//重复执行从紧接的源语句到pmad//处的一段指令,次数=(BRC0/1)//+1次。2、C55x汇编语言的优化实现高效循环C55汇编语言中实现无开销循环的方法局部块循环:RPTBLOCALpmad//块循环RPTBpmad//
循环的块首地址放在RSA中,结束地址放在REA中
RPTB执行时,ST1中的BRAF为1,当BRC减为0时,ST1中的BRAF为0,禁止块重复操作
可以通过将ST1中的BRAF设为0来中止块重复操作2、C55x汇编语言的优化实现高效循环C55汇编语言中实现无开销循环的方法
注意:
受寄存器资源的限制,块重复不允许嵌套使用
RPT指令和RPTB指令使用的寄存器资源不同,RPT指令可以在块重复中使用2、C55x汇编语言的优化最小化流水线和IBQ延迟C55x芯片中的流水线指令3指令2指令1取指流水线指令3指令2指令1执行流水线在受保护情况下,如果同时执行的指令在数据访问发生冲突时,会自动对其中的某条指令插入额外的周期以防止发生错误,但也会增加处理延时。优化方法:指令重排、使用CPU寄存器、使用局部循环、重新安排变量和数组在内存中的位置……1引言1C55x汇编语言程序目录2C55x汇编代码的优化CONTENTS3C55x汇编和C混合编程3、C55x汇编和C混合编程典型方法(1)独立的C和汇编接口分别编写C和汇编程序,分开编译或汇编,形成各自的目标代码模块,然后用链接器将C模块和汇编模块链接起来。举例:信号分析的程序FFT程序一般采用汇编语言编写C程序中调用FFT程序3、C55x汇编和C混合编程典型方法(1)独立的C和汇编接口。•不论何种语言实现的函数,都必须遵循C语言环境中的寄存器使用规则。•必须保护函数要用到的几个特定寄存器。在C55x中,这些特定的寄存器包括:T2、T3、AR5~7和SP。其中,若SP是被正常使用,则不必明确加以保护,其他寄存器则可以自由使用。•从汇编程序调用C函数时,参数传递必须要满足C语言运行环境的要求。函数返回值要满足C语言运行环境要求。3、C55x汇编和C混合编程典型方法(1)独立的C和汇编接口。•特殊函数的处理。•C语言编写的程序无法通过IMR寄存器对中断进行允许或屏蔽。此时,实现中断管理的方法就是采用在C语言中嵌入汇编指令的方法来进行。中断程序必须保护所有用到的寄存器。调用一个用C54x汇编语言编写的函数,必须要用pragma预处理选项:C54X_CALL或者C54X_FAR_CALL。•••长整数和浮点数存储在存储器中的方法是最高有效字在低位地址。3、C55x汇编和C混合编程典型方法(1)独立的C和汇编接口。•汇编语言程序调用C语言程序•C编译器假定堆栈初始化在偶地址上,如果汇编代码调用C代码函数,必须将SP保证SP指针为偶数。如果SP指针为奇数,可以通过减1来将其变为偶数。例如:_func:AADD#−1,SP;使SP为偶数...AADD#1,SP;释放堆栈空间RET;函数体;函数返回•编写汇编语言程序时,必须在C程序可以访问的所有对象前加“_”。例如,在C程序中定义了变量x,如果在汇编程序中要使用,即为_x。3、C55x汇编和C混合编程典型方法(1)独立的C和汇编接口。•C语言程序调用汇编语言程序•汇编模块不能改变由C产生的.cinit块,如果改变其内容则会引起不可预测的后果。任何在汇编中定义的对象或函数,如果需在C中访问或调用,则必须用汇编指令.global定义。如果在C中定义的对象或函数,需在汇编中访问或调用,在汇编中也必须用.global指令定义C语言编写的程序在编译汇编后,将CPL置为1,因此调用的汇编函数中若需访问直接地址对象,唯一方法就是使用间接立即数寻址模式。若汇编函数中CPL设置为0,则在返回C语言程序前须将CPL置为1。•••3、C55x汇编和C混合编程典型方法(2)从C程序中访问汇编程序变量变量定义步骤••••采用.bss命令或.usect命令定义变量用.global命令定义为外部变量在变量名前加一下划线“_”在C程序中将变量说明为外部变量3、C55x汇编和C混合编程典型方法(2)从C程序中访问汇编程序变量变量在.bss块中定义汇编程序:.bss.global_var_var,1;定义变量;说明为外部变量C程序:externvar=1;intvar;/*外部变量*//*访问变量*/3、C55x汇编和C混合编程典型方法(2)从C程序中访问汇编程序变量常数汇编程序:_table_size.global.set10000;常数定义;定义为全局_table_sizeC程序:table_size;#defineTABLE_SIZE((int)(&table_size))for(i=0;i<TABLE_SIZE;++i)…3、C55x汇编和C混合编程典型方法(4)在C程序中直接嵌入汇编语句asm("汇编语句");优点•在C程序中实现用C语言无法实现的一些硬件控制功能,如修改中断控制寄存器、中断使能或无效、读取状态寄存器和中断标志寄存器等•在C程序中的关键部分用汇编语句代替C语句以优化程序缺点•比较容易破坏C环境3、C55x汇编和C混合编程典型方法(4)在C程序中直接嵌入汇编语句asm("汇编语句");与独立编写汇编程序实现混合编程相比:•程序的入口和出口由C自动管理,不必手工编写汇编程序实现。保留了C程序的结构,如变量的定义等,程序结构清晰,可读性强。C程序中的变量全部由C来定义,程序调试方便,用C源码调试器可以方便地观察C变量。••3、C55x汇编和C混合编程典型示例C主程序:/*cmain.c,将local的值加到global上*/externvoidasmfunc(int*);intglo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业员工培训与技能发展目标路径职业制度
- 企业内部保密责任制度
- 2026湖北武汉市文旅资本控股有限公司招聘1人备考题库附答案
- 2026湖南张家界中共桑植县委组织部调工作人员2人招聘参考题库附答案
- 2026福建漳州开发区育才实验小学招聘4人参考题库附答案
- 会议经费使用与审计监督制度
- 2026贵州安顺市集圣中学教师招聘、学生成长中心干事招聘参考题库附答案
- 公共交通车辆驾驶人员培训考核制度
- 2026陕西西安鄠邑区户县海丝村镇银行高校见习生招聘参考题库附答案
- 三台县2025年县级事业单位面向县内乡镇公开选调工作人员(16人)备考题库附答案
- 北京通州产业服务有限公司招聘备考题库附答案
- 工会法知识试题及答案
- 2025年深圳证券交易所及其下属单位信息技术人员公开招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解
- 运输合同模版2025年示范版
- 擒敌术课件底图
- 喉癌课件讲解
- 2025河南城发环保能源有限公司巩义分公司招聘13人备考题库及答案详解(历年真题)
- 暗恋桃花源课件教学
- (2025年)《气象学与气候学》习题集及答案(大学期末)
- 固化地坪施工流程工艺
- 2025年“一带一路”人工智能应用场景案例集-上海人工智能研究院
评论
0/150
提交评论