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

Using XCROM and genarating a HEX file only for const messages

Hi,
I have a simple application such as a microcontroller having internal ROM, an ext. RAM placed from 0x8000-0xEFFF, and an EPROM placed from 0x0000 - 0x1FFF.
The EPROM is purposed to hold only display messages defined in the c code such as
char const xdata Message[] ="Hello";
I don't want to have any other code in that EPROM.
I want besides the genarated program code to have a separate HEX file for these messages ready for the EPROM. For example in format HEX-80.

How am I to configure the settings using uVison?

I have read the artıcles and the thread:
http://www.keil.com/forum/docs/thread2074.asp

Also, all related threads or similar.
However, I haven't understood: am I able to use XCONST type constants in an external memory and genarate a HEX file only containing them without having a code Banking?

So far some of my setings are as follow:
Checked boxes:
OPTIONS-Device-Use Extended Linker(LX51) instead of BL51
OPTIONS-Target-Use On Chip ROM(0x0-0xFFFF)
OPTIONS-Target-Off-chip Xdata Memory 0x8000 size 0x7000
OPTIONS-C51-Misc Controls: XCROM
OPTIONS-LX51 Locate-Use Memory Layout from Target Dialog checked
User Classes: XCONST (X:0x0000-X:0x3FFF)

Thanks in advance for your concern!

BR
Oktay

Parents
  • Hi Andrew,

    Thanks a lot!
    For me the required clue was RANGE( X:0xE000-X:0xFFFF ).
    It hadn't worked before for me because I used it as RANGE( 0xE000-0xFFFF ).

    Yesterday, I found out that if I don't specify ?XC?LCD(X:0x0) the Debugger error keeps coming.
    When I specified it like ?XC?LCD(0x0) it gave me SEGMENT errors.

    In the documents' examples for such directives, the memory ranges are specified such as (0x1000 - 0x2FFF) etc. without putting the memory descriptor X:, C:, I:.
    This solved my problem!

    However,
    I do insist that in my case using const or const xdata doesn't differ :-)
    They are compiled and mapped in the same way.

    Thank you for your time and help to resolve my problem!

    Best regards,

    Oktay Pehlivanoglu

Reply
  • Hi Andrew,

    Thanks a lot!
    For me the required clue was RANGE( X:0xE000-X:0xFFFF ).
    It hadn't worked before for me because I used it as RANGE( 0xE000-0xFFFF ).

    Yesterday, I found out that if I don't specify ?XC?LCD(X:0x0) the Debugger error keeps coming.
    When I specified it like ?XC?LCD(0x0) it gave me SEGMENT errors.

    In the documents' examples for such directives, the memory ranges are specified such as (0x1000 - 0x2FFF) etc. without putting the memory descriptor X:, C:, I:.
    This solved my problem!

    However,
    I do insist that in my case using const or const xdata doesn't differ :-)
    They are compiled and mapped in the same way.

    Thank you for your time and help to resolve my problem!

    Best regards,

    Oktay Pehlivanoglu

Children
No data