This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

C51: L48: IGNORED RECURSIVE CALL

I just migrated a project from Keil 3 to Keil 5 (C51 = V9.56.0.0 & LX51 4.66.66.0

I get the following (new) warnings:

*** WARNING L48: IGNORED RECURSIVE CALL CALLED: _SMBUS_SET_PACKET_DATA/SMBUS CALLER: SMBUS
*** WARNING L48: IGNORED RECURSIVE CALL CALLED: SMBUS CALLER: _SMBUS_SET_PACKET_DATA/SMBUS

puzzle is that while there is a routine called smbus_set_packet_data there is no routine called smbus. In fact the routine is reproduced below:

static void smbus_set_packet_data(uint8_t pos, uint8_t val,uint8_t info) { smbus_packet[pos] = val; smbus_packet_info[pos] = info;
}

What does the above warning indicate?

What exactly did the linker ignore? (Any calling sequence not included in the final binary?

thanks for the clarifications.

Parents
  • So you do have a function (or functions) called from both "mainline" and interrupt code?

    That, then, is probably what the warning referred to as a "recursive" call.

    That is a Bad Thing for C51 - because of the way the Overlaying works.

    Your approach of "inlining" the code - instead of calling it - is a safe solution.

Reply
  • So you do have a function (or functions) called from both "mainline" and interrupt code?

    That, then, is probably what the warning referred to as a "recursive" call.

    That is a Bad Thing for C51 - because of the way the Overlaying works.

    Your approach of "inlining" the code - instead of calling it - is a safe solution.

Children