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

Mixed Memory Models

C51 v6.03+; uVision v2.07+

I want to build a Project with some files using the SMALL model, but most using LARGE.

If I select LARGE in the Target options, and specify SMALL in the C51 'Misc Controls' where required, or use a #pragma in the file itself, I get a fatal Compiler error:

RESPECIFIED OR CONFLICTING CONTROL

If I select SMALL in the Target options, and specify LARGE in the C51 'Misc Controls' box where required, everything Compiles OK, but I get Linker warnings for each of the 'Large' Modules:
L14: INCOMPATIBLE MEMORY MODEL

If I specify 'large' in each function declaration where required, it all Compiles and Links OK!

Thus it is possible to create a mixed-model Project, but extremely cumbersome to have to specify the model on every function!
Why doesn't it work when the model is specified at the module level?

(yes, I know you wouldn't want to design a Project like this from scratch, but this is "inherited" stuff...)

Parents
  • So if I don't use any (Keil) Library functions, or if I'm careful to make sure they're all the same model, I should be OK?

    Yep, but I haven't tested this.

    Is it possible to specify explicitly which Library the Linker should use?

    If I had:

    #pragma LARGE
    :
    int my_func (int a, int b, int c) small
    would that call 'large' model libraries?


    Yep.

    Jon

Reply
  • So if I don't use any (Keil) Library functions, or if I'm careful to make sure they're all the same model, I should be OK?

    Yep, but I haven't tested this.

    Is it possible to specify explicitly which Library the Linker should use?

    If I had:

    #pragma LARGE
    :
    int my_func (int a, int b, int c) small
    would that call 'large' model libraries?


    Yep.

    Jon

Children
No data