ARM嵌入式实验

问题:在startup.s中增加函数,由c程序调用,以此取得汇编中相关参数的设置值。(获取PLL中m,p值,c程序调用汇编函数)


在C语言中,要extern 一个函数声明即可,然后这个函数在汇编里面实现。

在汇编里面,用EXPORT 把C语言定义的函数名引进来,再开始编写函数名开始的段


实现:

c程序调用:

extern int m();
extern int p();


汇编程序:

    AREA M, CODE, READONLY
       EXPORT m      
m
       LDR R0, = PLLCFG_Val
   AND R0,0x0000001F
   ADDS R0,R0,#1
       BX  LR    
   
   AREA P, CODE, READONLY
       EXPORT p     
p
       LDR R0, = PLLCFG_Val
   MOV R1,#0x00000003
   ANDS R0,R1,R0,LSR #5    
       BX  LR              //返回
   

       END                                  


参考:点击打开链接

例子:一个六个数相加的函数。

AREA    EXAMPLE,CODE,READONLY
        EXPORT    sum
        ENTRY
        
sum
        ADD R0,R0,R1
        ADD R2,R2,R3
        ADD R0,R0,R2
        
        LDR    R4,[SP]   //从堆栈里读第四个参数
        LDR R5,[SP,#4]   //从堆栈里读第五个参数
        
        ADD R4,R4,R5
        ADD R0,R4,R0
        
        BX LR
        
        END

其实关键的问题是参数和返回值。

我们能看到,C里面调用这个函数,C给里面传参数。

汇编是怎么接受这些参数的呢?

4个以内的参数,直接存放在R0~R3 这4个寄存器里面。

4个以后的参数放在堆栈里。

如果函数有返回值,那么返回值放在R0里。


结果放在R0,然后BX LR返回
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值