首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于mini2440 的 bootloader 设计 ---- 7、进入C大门

基于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语言编写。
返回列表