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"};
You can obtain a free CD from Keil, which includes all the manuals in PDF. My CD is dated 09.2000 and has C51 User's Guide 03.2000 and Assembler/Utilities Guide 07.2000 - so your manauals would seem to be way out of date! With the mspace qualifiers (code, xdata, etc), you can specify both where the pointer is located, and the mspace to which it points; eg: A definition of the form
int code *var
code int code *var
>Andrew Neil wrote: >A definition of the form >code int code *var >is a pointer located in code memort >which points to an int located in code >memory. This work, but this is obsolete syntax, supplied just for compatibility with old versions of C51. I think, good style is: Exapmle_1:
>code int code *var
int code * code ptr;
VAR_TYPE MEMORY_TYPE VAR_NAME;
// VAR_NAME - "ptr" // MEMORY_TYPE - "code" // VAR_TYPE - "int code * " // (pointer to int, located in 'code' memory)
int xdata * code ptr; // VAR_NAME - "ptr" // MEMORY_TYPE - "code" // VAR_TYPE - "int xdata * " // (pointer to int, located in 'xdata' memory)
char code * xdata * data ptr; // Read from right to left: // // 'ptr' (located in 'data' memory) is a pointer to // (located in 'xdata' memory) pointer to // (located in 'code' memory) 'char'
View all questions in Keil forum