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

cannot figure out this link warning

I am using 5.20 if it matters

I have a function that is indirectly called from an array of functions. This function is contained in its own module. When I link, I get the following warning:

WARNING 16: Uncalled Segment, ignored for overlay process
segment: ?CO?FACT_CON

in this module I have one variable that I define as

static float code ideal_values[LAST_POINT] ={

if I change the "code" to "const" (or remove it entirely), it will link with no warnings, but now the variable is taking up XDATA, and with only 2K of it, XDATA is VERY precious...

I've also tried several other incantations of the same line of code. It either ends up in XDATA, or gives me the warning.

I've had this problem in several other places, but until now, I chosen to ignore it... any ideas? (if anyone thinks more info is needed, please ask, I just didn't want to flood the list with things like link maps, and other such things)

Parents
  • I have a function that is indirectly called from an array of functions. This function is contained in its own module. When I link, I get the following warning:

    WARNING 16: Uncalled Segment, ignored for overlay process
    segment: ?CO?FACT_CON
    You know this will happen. Okay.

    static float code ideal_values[LAST_POINT]
    if I change the "code" to "const" (or remove it entirely), it will link with no warnings, but now the variable is taking up XDATA, and with only 2K of it, XDATA is VERY precious...


    Remember, C says nothing about const meaning "in PROM", it just means read-only at compile time (undefined at run-time if you try to write to it). So, C51 could place const data in XDATA and not violate C rules. With C51 code tables are constant implicitly so you should make any code table const as well for safety.

    To ensure vars. are placed in code memory you must define them with the code memory space qualifier. Your definition should absolutely be written as:
    static const float code ideal_values[LAST_POINT];
    - Mark

Reply
  • I have a function that is indirectly called from an array of functions. This function is contained in its own module. When I link, I get the following warning:

    WARNING 16: Uncalled Segment, ignored for overlay process
    segment: ?CO?FACT_CON
    You know this will happen. Okay.

    static float code ideal_values[LAST_POINT]
    if I change the "code" to "const" (or remove it entirely), it will link with no warnings, but now the variable is taking up XDATA, and with only 2K of it, XDATA is VERY precious...


    Remember, C says nothing about const meaning "in PROM", it just means read-only at compile time (undefined at run-time if you try to write to it). So, C51 could place const data in XDATA and not violate C rules. With C51 code tables are constant implicitly so you should make any code table const as well for safety.

    To ensure vars. are placed in code memory you must define them with the code memory space qualifier. Your definition should absolutely be written as:
    static const float code ideal_values[LAST_POINT];
    - Mark

Children