李现路:DSP6000中C/C++语言和汇编语言的混合编程的方法
发布时间:2009-11-28 10:40
发布者:stst158
李现路![]() 李现路 ![]() 一、混合编程的方法主要有以下几种: (1)独立编写C语言程序和汇编程序,分别编译形成各自的目标代码块, 然后用连接器将两种模块连接起来。 (2)直接在C/C++程序中嵌入汇编语句块。 (3)对C/C++程序进行编译生成相应的汇编程序,手工对生成的汇编程序进行修改。 (4)在C/C++程序中使用汇编语言的变量、常数、函数。 完整版本请见http://www.51qianru.cn/bbs/ 二、常用混合编程主要有下面两种: 1、直接在C/C++程序中嵌入汇编语句块: 例如在C/C++程序中嵌入以下汇编代码: asm("STR: .string\"abs\""); 注意:不要把汇编代码加到C/C++太复杂的结构里 2、在C/C++程序中使用汇编语言的变量、常数、函数 (1)在C/C++的函数中调用汇编函数: 1)在C/C++中所做工作 extern int asmfunc(int a); int gvar=4; void main() { int i; i=asmfunc(gvar); i=i+1; } 2) 汇编里的处理 .global _asmfuc .global _gvar _asmfunc: (2)在c/C++程序中访问汇编语言中的变量 第一种情况:在C/C++程序中访问.bss段中定义的变量 1)汇编: .bss _var1,4 .global _var1 2)在C/C++中作的工作: extern int var1; 第二种情况:在C/C++程序里访问没有定义在.bss段中定义的变量 1)汇编里要作的工作 .global _sine .sect "sine_tab" _sine: .float 0.0 .float 0.124554 .float 0.99882 .float 0.45231 首先要在汇编程序里定义一个数据表,将该数据表放到一个自己定义的段中,然后 定义一个全局指针变量,并将该指针变量指向数据表的首个地址。 2)在C/C++ 中要做的工作: extern float sine[]; float sine_p=sine; f=sine_p[4]; 需要定义一C/C++的指针变量,该指针变量和汇编中的全局变量可以进行数据读取。 (3)在C/C++程序中访问汇编语言中的常量: (1)汇编程序中的做法: _tablesize .set 1000 .global _table_size (2) C/C++程序中要做的工作: extern int table_size; #define TABLE_SIZE ((int)(&table_size)); ........ for(i=0;i 完整版本请见http://www.51qianru.cn/bbs/ 曙海教育 曙海嵌入式学院 (课程 ![]() 电话:021-51875830 网址:http://www.51qianru.cn 讲师:李现路 -----版权所有-曙海教育 转摘请注明作者和出处 课程有: pads培训 pads培训 高速板PCB培训 PADS Power PCB培训 MTK java MTK6225 手机开发板 Mtk平台源代码 |
网友评论