Maybe this is a simple question, but I just couldn't figure it out. Can someone tell me how to place a constant variable into the specific ROM area? I would like to be able to set a constant value at a particualr ROM area and use a pointer to get it whenever I need it. Cheers, Tang
unfortunately, the _at_ keyword can't be used with initialisation. How about
code const unsigned char fred = 0xaa;
How to use linker to fix the location?
Dunno - I'm afraid you'll have to look that up for yourself in the manuals (which are all in PDF format on the free CD, and can be accessed via the Books tab in the uVision Project window): Look in the C51 manual for where it describes C51's segment naming & usage conventions, then look in the Assembler/Utilities manual for how to locate a specific segment at a specific address. Or try searching the Keil knowledge base, http://www.keil.com/search.asp Or, as your E-Mail appears to be at the University of Warwick, can you just pop over and ask the very nice people at Hitex? ;-)
Ha.. :)) good suggestion. Hitex is a good source of knowledge.
Here is a link to the knowledgebase atricle that describes how to do this. http://www.keil.com/support/docs/301.htm Jon
Exactly what I am looking for. CHEERS!!
Please see my latest posting re this issue. It differs slightly from your example. Specifically: User's guide, 01.97, C compiler C51 on page 63 'explicitly defined memory types' recommends a syntax. The Utilities guide, 04.95, page 119, has a different syntax in files c_mess0.c, c_mess1.c. the utilities guide contradicts the recommendation in the user's guide. Yet the 'preferred' method in the C51 compiler will NOT work. You must use the 'obsolete' method of the Utilities guide. (1) Please explain. (2) What is correct syntax for: const unsigned char code *MyArray[NumberFruits] = {"apple,"banana","cherry"};
View all questions in Keil forum