uboot1.3.4源码,start_armboot函数,分析(1)

本文深入探讨了函数指针及二重函数指针的概念,通过定义init_fnc_t类型和init_sequence数组,展示了如何使用函数指针进行初始化序列的管理和执行。详细解析了遍历函数指针数组并调用每个函数的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义了一个函数类型 init_fnc_t :

typedef int (init_fnc_t) (void);

定义了一个二重函数指针:

init_fnc_t **init_fnc_ptr;

二重指针的作用:

  1. 指向一重指针
  2. 指向指针数组(数组本质就是指针,两个差不多,只是表现形式不同)

下面定义了一个 函数指针数组init_fnc_t *init_sequence[] :

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 */
	NULL,
};

函数指针数组分析:

  1. 这是个数组,数组里存放的是函数指针,函数指针指向函数
  2. 因为函数名即为函数首地址,也就是函数指针,所以里面直接存放函数名

分析:



for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr)
 {
		if ((*init_fnc_ptr)() != 0)
		 {
			hang ();
		 }
}

1.init_fnc_ptr = init_sequence 在这里,二重指针init_fnc_ptr指向了函数指针数组init_sequence(第二种用法
2. * init_fnc_ptr 在这里等同于*init_fnc_ptr== NULL,*init_fnc_ptr即代表函数指针数组init_sequence里面的元素,即从函数cpu_init开始的多个函数
3. 这个for循环目的是遍历数组 init_sequence,检查每个函数的返回值,不等于0则调用hang()函数

void hang(void)
{
	/* if board_hang() returns, hange here */
	printf("X-Loader hangs\n");
	for (;;);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值