ARM汇编语言与C语言调用的一段代码问题

ARM汇编语言与C语言调用的一段代码问题,第1张

STR storage register 就是存储寄存器的意思,是将寄存器中的值存进内存中。LDR则是将内存单元中的值存入寄存器中。

STR lr, [sp, #-4]! 是将lr寄存器也称链接寄存器r14(用于保存子程序的返回地址)的值(32位)存入sp指向堆栈的地址,从sp到sp-3地址单元。感叹号是表示保存后sp的值跟着改变,及sp=sp-3,没有感叹号sp在使用结束后值不变。LDR那部分就不用解释了吧,应该很详细了。

汇编中:

EXPORT MMU_EnableICache

MMU_EnableICache

mrc p15,0,r0,c1,c0,0

orr r0,r0,#R1_I

mcr p15,0,r0,c1,c0,0

MOV_PC_LR

然后C中调用 MMU_EnableICache()

调用汇编则更简单,

unsigned int UserAppPTR = 0x00081040//设置成汇编入口的绝对地址。

void (*UserAPP)(void)

UserAPP = (void (*)(void))UserAppPTR

UserAPP()

恩,一般来说在C中调用汇编比较常见,而且是非必要才用

你需要一个编译过的二进制的C Lib, 网上有很多开源的, 编译器一般选用GCC. 这样以后你的C函数可以直接调用C Lib的二进制代码. 制作C Lib注意是否支持多线程多核, 是否支持调试.


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11083192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存