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

inline \ MACROs

Hi,
I want to avoid the CALL \ RET overhead of a certain function which is called only once in my program.

I understand the uVision compiler does not support the inline keyword (http://www.keil.com/support/docs/1755.htm), and I should use macros instead.
The problem is that uVision cannot step into macros when debugging.

Is there any good solution for this problem?

Parents Reply Children
  • Those goals are ultimately in contradiction to each other. Modularity requires clean interfaces, but clean interfaces cost CPU-cycles to set up and use.

    A "clean interface" is not a requirement for modular code, it is only a requirement for "isolated module" code.

    If you have all code related to stuffing and draining the UART in one module; I would still call the code modular even if another module had

    if (drain != fill)
    { .... = buffer[drain]; drain++;
    }

    I hate the fact that the site makes this into a crappy format (yes, I know about 'pre')

    isolated module code would, of course be
    ... = getUARTchar():

    Actually this is one case where I see the modularity prophets going overboard. You need to have getUARTchar() return an int which you then have to split into flags and (possible) received char which lead to making a ridiculous offering on the altar of modularity

    what I would do forgive me Mr. modular would be
    if (getUARTchar())
    { .... = global char
    }

    Erik

  • That is a nice thing with assembly code. Calling a "function" and have the flag in zero or carry processor flag and optionally the character in the accumulator.

  • well, theoritically, an assembler 'function' can return regs8 +ac1 +b1 +dptr2 = 12 (maybe more) values.

    Erik

  • "A 'clean interface' is not a requirement for modular code"

    On the contrary, I think it most certainly is a requirement!

    "it is only a requirement for 'isolated module' code."

    To me, that is a tautology.

    Think about modular hardware: to be truly "modular", you want a single, well-defined connector; replacing the module requires knowledge of just that connector and its specs...

  • OK
    we can differ on how modular something must be to be called modular :)

    I just want to avoid that non-modular (by the 'firm' definition) becomes equalized with spaghetti.

    So let us agree that you can have well organized code that is not modular (by the 'firm' definition).

    I have seen truly modular code and I have seen code that made me call for tomato sauce, and then I have seen well organized code.

    Erik