c51语言 code 函数指针,Keil C51 中的函数指针和再入函数

本文通过实例分析了C51语言中函数指针的使用,探讨了Keil C51中因函数指针引起的存储区冲突问题。通过`OVERLAY`指令修正调用树,确保了函数独立的存储空间,从而避免了调用过程中的数据破坏。同时,文章介绍了如何正确声明和使用函数指针列表,以避免函数变量空间覆盖的问题。
摘要由CSDN通过智能技术生成

下面两个源文件将解答这个问题,使问题容易明白。第一个源文件FPCALLER.C,包括一个函数,它通过一个函数指针(fptr)调用另一个函数。

voidfunc_caller(long (code *fptr) (unsigned int))

{

unsigned char i;

for(i=0;i<10;i++)

{

(*ftpr)(i);

}

}

第二个源文件FPMAIN.C,包含C主函数和被func_caller调用的函数func。注意main函数调用func_caller,把func的地址作为参数传递给func_caller。

extern void func_caller (long (code *) (unsigned int));

int func (unsigned int count)

{

long j;

long k;

k = 0;

for (j = 0; j < count; j++)

{

k += j;

}

return (k);

}

void main (void)

{

func_caller (func);

while (1) ;

}

上面的两个的源文件编译和链接都没有错误。通过连接器,调用树的映射文件如下:

SEGMENTDATA_GROUP

+--> CALLED SEGMENTSTA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值