C51关于多重调用报错的问题与解决方案

本文介绍了C51编程中遇到的多重调用警告问题,特别是涉及_I2CRECVDATA/CLOCK函数的情况。警告表明函数可能在主函数和中断服务程序中同时调用,原因包括函数不可重入性和内存区冲突。解决方案包括判断函数执行时机、使用OVERLAY指令、禁止中断、复制函数代码或设置函数为重入型。
摘要由CSDN通过智能技术生成

问题描述:

*** WARNING L15: MULTIPLE CALL TO FUNCTION
    NAME:    _I2CRECVDATA/CLOCK
    CALLER1: INT0ISR/MAIN

    CALLER2: ?C_C51STARTUP

    该警告表示连接器发现有一个函数可能会被主函数和一个中断服务程序(或者调用中断服务程序的函数)同时调用,或者同时被多个中断服务程序调用。
   
出现这种问题的原因之一是这个函数是不可重入性函数,当该函数运行时它可能会被一个中断打断,从而使得结果发生变化并可能会引起一些变量形式的冲突(即引起函数内一些数据的丢失,可重入性函数在任何时候都可以被ISR打断,一段时间后又可以运行,但是相应数据不会丢

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值