I defined a array like this: uchar *tuning_order[160]={}; or const uchar *tuning_order[160]={}; but Keil said: error C249: 'DATA': SEGMENT TOO LARGE I do not konw why?I use the AT89S51.
uchar *tuning_order[160]={}? that would be 160 char pointers stored in the default memory space (256 bytes of RAM) uchar tuning_order[160]= {}; would be an an array. uchar code tuning_order[160]= {}; would be an an array in ROM. If you really want uchar *tuning_order[160]={} then you need code two times 1. to tell the compiler where to put the pointers. And, one to tell the compiler what kind of memeroy the pointers are pointing to. Read this part of the manual carefully. It will save much memory space.
You need to read the section of the C51 Manual that describes the language extensions added by Keil to support the 8051's various memory areas: http://www.keil.com/support/man/docs/c51/c51_le_memareas.htm If you don't already understand the various memory areas in the 8051 architecture, you will also need to read the "bible" documents cited by Erik.