基于mini2440 的 bootloader 设计 ---- 7、进入C大门
- UID
- 1066743
|
基于mini2440 的 bootloader 设计 ---- 7、进入C大门
开发环境:
电脑系统:RedHat Enterprise Linux6 kernel version : linux-2.6.32
交叉工具链:arm-linux-xxx4.3.2
开发板版本:mini2440 S3C2440处理器 64M SDRAM 256M nand flash
前一篇文章介绍了bootloader中C程序的运行环境及其代码实现,本章将完成从汇编程序跳转进入C程序的任务。
一、背景知识
这里必须得介绍几个概念:汇编代码中调用C函数,C函数中调用汇编代码,在C程序中嵌入汇编代码。
1、汇编代码中调用C函数:调用方法很简单,将C程序的名字赋值给PC指针(绝对跳转)或者 采用相对跳转指令跳转如bl C_function_name(相对跳转)。
2、C函数中调用汇编代码:调用的方法也很简单,直接在汇编代码标号后加一个(),然后像调用普通C函数一样调用。
3、C函数中嵌入汇编代码:这种方式相对复杂,但也是最常见的方式。格式如下:
__asm__(
"汇编代码"
:输出部分
:输入部分
:破坏描述部分
);
其中 汇编代码是必需的,后三者可选,但是:必须有。
汇编代码:需要嵌入的汇编代码,若有多条指令,需用\n分开另行写;
输出部分:汇编代码将要修改的C函数的变量;
输入部分:C函数传递给汇编的变量参数列表;
破坏描述部分:执行汇编会破坏掉的寄存器描述。
二、代码实现
我们实现的是在汇编中调用C函数,因此代码就一句调用:
ldr pc, =arm_main
注意:进入C大门后,bootloader 的剩余部分就是用C语言编写。 |
|
|
|
|
|