Hi, I am trying to recompile a project with C251 v2.This project was originaly compiled with C251 v1. In one of my C files I use a string table declared like this :
char code *ErrorMess[]={"error1", "error2", "error3"};
I tried to compile what you had, and I kept getting an error (*** WARNING 151 IN LINE 2 OF X.C: pointer truncation: 'near const' to 'code')that indicated i couldn't reach it because I had a near pointer to a far object. I changed what you sent to this:
char far *ErrorMess[]={"error1", "error2", "error3"};
const char far *ErrorMess[]={"error1", "error2", "error3"};
#ifdef __C251__ /* Memory segment defines: */ #define HUGE huge /* 16 Meg indirect addressing, full access */ #define FAR far /* 16 Meg indirect addressing, in page */ #define NEAR near /* 64k direct and indirect addressing */ #define DATA near /* On-chip data */ #define XDATA near /* was far */ #define FXDATA xdata /* */ #define PDATA /* Paged xdata */ #define CODE far /* */ #define IDATA idata /* */ #define BDATA bdata /* Bit addressable memory */ #define EBDATA ebdata /* Extended bit addressable memory */ #define SBIT sbit #define BIT bit #endif #ifdef __C51__ /* Memory segment defines: */ #define HUGE #define FAR xdata #define NEAR xdata #define DATA data #define XDATA xdata #define FXDATA idata #define PDATA pdata #define CODE code #define IDATA idata #define BDATA bdata #define SBIT sbit #define BIT bit #endif
Thank you for your answer, but your solution didn't change anything. There are 59 error messages in my ErrorMess table. When I have a look to the map file, the compiler assigns 118 bytes to this tables. So it seems as if these are pointers to each text line of the table, whose text is written somewhere else, maybe in code area. Canthis be right ? If yes, is it possible to force the pointers in the code area ? Thanks.
Yes, you can put the pointers in any memory space, such as:
const char far * code ErrorMess[]={"error1", "error2", "error3"};
Thank you for the tip. It works.