函数指针是实现回调函数的基础,回调函数是C程序架构的基础。所以函数指针的重要性不言而喻。然而最近在ARM开发板上测试程序时,发现函数指针虽然能编译通过,但是运行时确总是报错。如下是一个最简单的测试程序源码。
static void test()
{
puts("test\n");
}
static void(*f)() = test;
void Main(void)
{
led_init();
key_init();
io_init(0);
f();
while(1){
puts("-------hello from main()----------\n");
delay(100000);
}
}
使用gcc -S编译得到的汇编代码如下:
.cpu arm10tdmi
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi