知识点:
1、汇编调用C函数
2、C函数调用汇编函数
3、C内嵌汇编
1、为什么需要混合编程
(1)执行效率
(2)能够直接控制寄存器
2、汇编调用C函数
ldr pc, =gboot_main 在汇编脚本中直接改变pc指针即可
3、C函数调用汇编函数
.global _start
.global light_led
int gboot_main()
{
light_led();直接调用汇编脚本中的标识即可,但是同时需要light_led申明全局
return 0;
}
4、C语言内嵌汇编
(1)格式:
(2)范例
1)往cp15协处理器的c1寄存器写一个值,如果用汇编的话mcr指令就能解决
2)往cp15协处理器的c1寄存器读一个值
3)优化
5、实例-点亮led-main.c
#define GPBCON (volatile unsigned long*)0x56000010
#define GPBDAT (volatile unsigned long*)0x56000014
int gboot_main()
{
__asm__ volatile(
"ldr r1,=0x15400\n"
"str r1, [%0]\n"
"ldr r1,=0x6BF\n"
"str r1, [%1]\n"
:
:"r"(GPBCON),"r"(GPBDAT)
:"r1"
);
return 0;
}