第6章C语言和汇编语言混合编程(C55xDSP).pptVIP

第6章C语言和汇编语言混合编程(C55xDSP).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章C语言和汇编语言混合编程(C55xDSP)

第6章 C语言和汇编语言混合编程;  在很多DSP应用中都使用C语言和汇编语言进行混合编程。C语言具有可读性高、便于维护和可移植性好等优点,然而汇编语言具有实时运行效率高和代码效率高的优点。使用汇编语言可以更充分地利用DSP的硬件资源,例如乘累加单元、单指令重复、块重复和块移动等。;  某些程序使用汇编语言编写时,实时运行效率是C语言的几十倍或更多,运算量越大,汇编语言编写的程序实时运行效率越明显。用C函数调用汇编子程序和C函数一样有参数传递和返回问题,下面介绍用C函数调用C55x汇编子程序的方法。;6.1.1 C语言和汇编语言之间名称转换   C函数调用汇编子程序时,汇编程序所有变量名和子函数名需加前缀下划线“ _ ”,例如使用_sum作为汇编语言程序子函数名。如果汇编程序中定义了变量,必须加前缀下划线,C函数才能使用该变量。前缀“ _ ”只在C编译时使用,当我们用C函数调用汇编子程序和变量时,不需要加前缀“ _ ”。以下是C函数调用汇编子程序的例子。; FIQ的中断向量地址在0x0000001C,而IRQ的在0 当允许IRQ中断时,CPSR[7]=0即CPSR的I位置为0.当允许FIQ中断时,CPSR[6]=0即CPSR的F位为0。 如果2个中断同时发生时,由于FIQ拥有最高中断优先级,而IRQ只有中等中断优先级,所以先执行FIQ中断(CPSR[7]=0),当中断结束后再执行IRQ中断(CPSR[6]=0);程序:   void disable_IRQ(void) //禁止中断程序 { int tmp; //定义临时变量,后面使用 __asm //内嵌汇编程序的关键词 { MRS tmp, CPSR //把状态寄存器加载给tmp ORR tmp, tmp, #80 //将IRQ控制位置1 MSR CPSR_c, tmp //加载程序状态寄存器 } } ;EXPORT Message @声明全局标号 Message DCB HELLO$ @定义5个有效字符,$为结束符 extern char* Message; int MessageLength() { int Length = 0; char *pMessage; //定义字符指针变量 pMessage = Message; //指针指向Message 内存块的首地址 while(*pMessage != $) //$为字符串的结束符 { Length++; pMessage++; } return(Length); //返回字符串的长度 } ;#include stdio.h extern void strcopy(char *d, const char *s); //声明,调用的汇编子程序 int main(void) { const char *srcstr = First ource; //定义字符串常量 char dststr[] = Second string-destination; //定义字符串变量 printf(Before copying: \n); printf(src=%s, dst=%s\n, srcstr, dststr); //显示字符串的内容 strcopy(dststr, srcstr); //调用汇编子程序R0=dststr, R1=srcstr printf(After copying: \n); printf(src=%s, dst=%s\n, srcstr, dststr); //显示复制后的结果 return(0); } ; AREA Example, CODE, READONLY @声明代码段Example EXPORT strcopy @声明strcopy,以便外部函数调用 strcopy @ R0为目标字符串的地址, R1为源字符串的地址 LDRB R2, [R1], #1 @读取字节数据,源地址加1 STRB R2

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档