Keil下STM32的C语⾔调⽤汇编函数
对于ARM体系来说,不同语⾔撰写的函数之间相互调⽤(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure Call Standard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回。
⽂章⽬录
⼀、准备⼯作
1)创建⼀个新项⽬。
2)根据⾃⾝情况选择硬件,配置⼀些参数。
3)为 SOURCE GROUP 1新建两个⽂件main.c(C程序)和Func.s(汇编程序)。
⼆、C语⾔调⽤汇编函数
C 程序调⽤汇编程序时,汇编程序的书写也要遵循ATPCS规则,以保证程序调⽤时参数正确传递。在C程序中调⽤汇编⼦程序的⽅法为:⾸先在汇编程序中使⽤ EXPORT伪指令声明被调⽤的⼦程序,表⽰该⼦程序将在其他⽂件中被调⽤;然后在C程序中使⽤extern关键字声明要调⽤的汇编⼦程序为外部函数。
1.C语⾔⽆参数调⽤汇编函数
Func.s代码
AREA MY_FUNCTION,CODE,READONLY
EXPORT Init_1 ;//与在c⽂件中定义的Init_1函数关联起来
;//⾼级语⾔中的声明和使⽤变量其实是对板⼦寄存器的使⽤,所以我们只需要直接使⽤寄存器即可
Init_1
MOV R1,#0;//设R1寄存器为i
MOV R2,#0;//设R2寄存器为j
LOOP ;// 写在最左边的是程序段的段名,执⾏跳转程序时⽤到
CMP R1,#10;//⽐较R1和10的⼤⼩
汇编语言如何编程BHS LOOP_END ;// 如果R1⼤于等于10,则跳转到LOOP_END程序段,反之忽略该语句,直接执⾏下⾯的语句
ADD R2,#1;//j++
ADD R1,#1;//i++
B LOOP ;//循环
LOOP_END
NOP
END ;//必须空格后再写END,不然会被认为是段名,表⽰程序结束
main.c代码
# include<stdio.h>
extern void Init_1(void);//与在汇编⽂件中定义的Init_1函数关联起来
int main()
{
Init_1();
return0;
}
在图⽰处设置五个断点。
点击translate、build,然后点击debug,选择第⼀个选项开始仿真调试。
点击单步运⾏,观察左边界⾯寄存器的变化状况。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论