目录 一、C语言调用汇编函数 二、修改参考代码并仿真调试 三、汇编函数中调用C语言函数
一、C语言调用汇编函数
(1)arm keil下创建新工程project->New μVision Project… 此处我命名工程名为TEST (2) 选择芯片 (3)CMIS下勾选CORE;Device下勾选Startup
点击OK,即可完成工程的创建
(4)右击 Source Group1,选择Add New Item to Group ‘Source Group 1’添加源文件 (5)在弹出的窗口中选择 Asm File(.s),编辑文件名为func2 (6)编辑汇编语言代码
AREA MY_Function,CODE,READONLY;
EXPORT Init_1;
Init_1
MOV R1,
MOV R2,
LOOP;
CMP R1,
BHS LOOP_END;
ADD R2,
ADD R1,
B LOOP;
LOOP_END;
NOP
END;
(7)重复(4)步骤,右击右击 Source Group1,选择Add New Item to Group ‘Source Group 1’添加源文件 (8)编辑C语言代码,文件名为main2.c
#include<stdio.h>
extern void Init_1(void);
int main(){
Init_1();
return 0;}
当R1 R2由0x00变为0x0A,时,代表调用成功
二、修改参考代码并仿真调试
AREA MY_Function,CODE,READONLY
EXPORT Init_1
Init_1
ADD R0,
MOV PC,LR
LOOP
CMP R1,
BHS LOOP_END
ADD R2,
ADD R1,
B LOOP
LOOP_END
NOP
END
# include<stdio.h>
extern int Init_1(int x);
int main(){
int xx = Init_1(10);
printf("%d", xx);
return 0;
}
- 编译
- 调试
可以发现调用成功,xx的值变为0x6E
三、汇编函数中调用C语言函数
编写代码
AREA MY_Function,CODE,READONLY
EXPORT Init_1
IMPORT get5
Init_1
MOV R1,
MOV R2,
LOOP
CMP R1,
BHS LOOP_END
ADD R2,
ADD R1,
BL get5
B LOOP
LOOP_END
NOP
END
# include<stdio.h>
extern void Init_1(void);
int get5(void);
int main(){
printf("Begin...\n");
Init_1();
return 0;
}
int get5(){
return 5;
}
- 设置断点
- 编译
- 仿真调试
R0显示为05时表示调试完成,即调用成功
参考资料 STM下c语言和汇编语言的混合编程 keil c语言里面调用汇编程序
|