uboot中typedef int (init_fnc_t) (void);详解

原文地址:u-boot中typedef应用解析___init_fnc_t*init_sequence[]作者:谢争

 

u-boot中有这么一段代码。

/*这里定义了一个新的数据类型init_fnc_t

*这个数据类型是参数为空,返回值为int的函数。
*/

typedef int (init_fnc_t) (void);
/*init_sequence是一个指针数组,指向的是init_fnc_t类型的函数*/
init_fnc_t *init_sequence[]=

{
     cpu_init, /* basic cpu dependent setup */
     board_init, /* basic board dependent setup */
     interrupt_init, /* set up exceptions */
     env_init, /* initialize environment */
     init_baudrate, /* initialze baudrate settings */
     serial_init, /* serial communications setup */
     console_init_f, /* stage 1 init of console */
     display_banner, /* say that we are here */
     dram_init, /* configure available RAM banks */
     display_dram_config,
#if defined(CONFIG_VCMA9)|| defined(CONFIG_CMC_PU2)
     checkboard,
#endif
NULL,
};

/*init_fnc_ptr为指向函数指针的指针*/
    init_fnc_t **init_fnc_ptr;
/*init_fnc_ptr初始化指向init_sequence指针数组,下面的循环遇到NULL结束*/
    for (init_fnc_ptr= init_sequence;*init_fnc_ptr;++init_fnc_ptr)

    {
        if ((*init_fnc_ptr)()!= 0)

        {

           /*(*init_fnc_ptr)()为C中调用指针指向的函数*/
            hang ();
        }
    }


自己写了2个test程序
一个typedef int (test_fnc_t) (void);
一个typedef int (*test_fnc_t) (void);

#include<stdio.h>

int test0 (void);
int test1 (void);

typedef int (*test_fnc_t)(void);

test_fnc_t test_sequence[]=

{
    test0,
    test1,
    NULL,
};


//int _tmain(int argc, _TCHAR* argv[])

int main()
{
     test_fnc_t *test_fnc_ptr;

      for (test_fnc_ptr = test_sequence;*test_fnc_ptr;++test_fnc_ptr)

      {
           if((*test_fnc_ptr)()!= 0)

           {
                printf("error here!");
           }
      }
  return 0;
}

int test0 (void)
{
     printf("test0n");
     return 0;
}

int test1 (void)
{
     printf("test1n");
     return 0;
}

#include<stdio.h>

int test0 (void);
int test1 (void);


typedef int (test_fnc_t) (void);

test_fnc_t *test_sequence[]=

{
    test0,
    test1,
    NULL,
};


//int _tmain(int argc, _TCHAR* argv[])

int main()
{
    test_fnc_t **test_fnc_ptr;

    for (test_fnc_ptr = test_sequence;*test_fnc_ptr;++test_fnc_ptr)

    {
          if((*test_fnc_ptr)()!= 0)

          {
                 printf("error here!");
          }
     }
  return 0;
}

int test0 (void)
{
     printf("test0n");
     return 0;
}

int test1 (void)
{
     printf("test1n");
     return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
uboot是一种常用的开源引导加载程序,用于嵌入式系统的引导启动。其,board_init_r和board_init_f是uboot的两个重要函数。 board_init_r函数是在uboot启动过程执行的第一个函数。它负责执行一系列的初始化工作,例如初始化系统时钟、设置内存映射等。此函数被用于配置和初始化各个硬件模块,包括断控制器、串口控制器、定时器等,以确保系统正常运行。该函数还读取并解析配置文件,加载设备树等操作,为后续的引导加载准备好必要的条件。 board_init_f函数是在board_init_r函数之后调用的。它用于进一步初始化系统,并执行一些与硬件相关的操作。例如,该函数可能会初始化网络接口、USB接口、存储设备等,并设置系统的默认环境变量。此外,board_init_f函数还负责将uboot的控制权交给操作系统的引导加载程序,从而完成uboot的使命。 通过调用board_init_r和board_init_f函数,uboot能够在系统启动时完成各种硬件的初始化和配置工作。这两个函数是uboot启动过程的重要环节,确保系统能够顺利地加载操作系统并运行。同时,它们也为开发者提供了扩展uboot的接口,可以在这两个函数添加自定义的初始化代码,以满足系统特定的需求。 总结来说,board_init_r和board_init_f是uboot两个重要的函数,用于初始化和配置嵌入式系统的硬件,并为操作系统的加载做好准备。它们是uboot启动过程不可或缺的一部分,保证系统的正常启动和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值