微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > DSP混合编程关键技术研究

DSP混合编程关键技术研究

时间:04-16 来源:西北工业大学 孙亮 点击:

①在C语言程序的局部帧后将汇编函数的参数依次压栈;
②程序指针(PC)跳转到汇编函数的代码段;
③保存出口地址;
④保存C语言程序局部帧指针;
⑤分配局部变量;
⑥调用结束前将以上所有内容弹出软件栈。
下面以具体例子来讲述这个操作过程。



(2)汇编语言程序调用C函数
汇编语言程序中调用C函数。被调用的C函数在C语言环境中需要用extern进行定义,在汇编程序中用.ref说明为外部标号,且函数名加"_"。在调用C函数之前应手工编程将参数以逆序写入当前运行任务所使用的任务堆栈中,压栈之前堆栈指针可不作调整。被调用的C函数即可正常访问调用者传递的参数,函数调用完毕后需要调整堆栈指针,清除函数调用中参数所占用的堆栈空间。C函数的返回值可以通过访问累加器获得。具体例子如下。
C语言模块中编写乘法函数:


3 注意事项

(1)中断的处理
LF240xA发生中断时,程序指针(PC)就指向相应的中断向量,并通过中断向量映射到相应的中断服务子程序。例如,在0004h~0005h处是INT2的中断向量,在此存储了1条跳转指令,跳转至INT2的服务子程序。LF240xA的C语言有interrupt修饰符可以用来定义中断服务子程序,如下所示:


将上述2个模块分别编译后链接,就能响应INT2中断了。
(2)字母大小写
在C语言环境中,对于字母大小写的区分是很严格的,因此在混合编程的过程中也应该严格遵守这一点。例如,在写命令文件时,误将".data"写成".daTA",此时系统将无法给初始化代码分配存储空间,导致程序无法执行。
(3)C语言库函数应用
TI的C编译器中内置了很多函数,包含在rts2xx.1ib的函数库中。库函数并不是C语言的一部分,它是由人们根据需要编制并提供给用户直接使用的。每一种C编译系统都提供了一批库函数,不同的编译系统所提供的库函数的数目、函数名及函数功能是不完全相同的。要使用库函数,只需在源文件中添加语句"#include"函数名.h"",就可使用相应的库函数了。

结 语

以上提到的LF240xA DSP的C语言和汇编语言混合编程技术已经在笔者参与开发的卷烟机重量控制系统的控制软件中得到应用。实践证明,采用混合编程的软件更加契合一般嵌入式系统对时问和空间的严格约束。设计良好的混合编程软件既能有效地满足嵌入式系统对功能与性能的需求,同时也可以为程序的扩展和移植预留足够的空间。混合编程是编制复杂的LF240xA控制软件的有效方法,同时也是嵌入式系统软件最优化的重要途径。

发布者:小宇

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top