在之前的一篇文章 【C语言】没想到指针还能这么用 @!!! 中介绍了【函数指针】的基本概念和简单应用;今天再给大家分享一个【函数指针】的高级应用;在嵌入式系统开发中,此类用法非常地常见,但如果对【函数指针】的理解不够透彻,很有可能会看得一头雾水。
代码片段如下:
typedef void (*kernel_func)(void);
void jump_to_kernel(void)
{
uint32_t *kernel_start = (uint32_t *)0x410000;
kernel_func func = (kernel_func)kernel_start[0];
printk("%s()%d: %08x\n", __FUNCTION__, __LINE__, func);
local_irq_disable();
func();
}
我们来分析下这段代码:
从函数名,我们可以知道,这个函数的功能就是实现从boot程序到kernel程序的跳转,即boot程序将kernel程序跑起来。
函数的第一句代码: uint32_t *kernel_start = (uint32_t *)0x41