When do I use xdata?

前端 未结 5 1435
借酒劲吻你
借酒劲吻你 2021-02-14 15:44

I am new at embedded system programming. I am working on a device that uses an 8051 chipset. I have noticed in the sample programs that when defining variables, sometimes they u

5条回答
  •  梦谈多话
    2021-02-14 16:35

    An important point not yet mentioned is that because different instructions are used to access different memory areas, the hardware has no unified concept of a "pointer". Any address which is known to be in DATA/IDATA space may be uniquely identified with a one-byte pointer; likewise any address which is known to be in PDATA space. Any address which is known to be in CODE space may be identified with a two-byte pointer; likewise any address which is known to be in XDATA space. In many cases, though, a routine like memcpy won't know in advance which memory space should be used with the passed-in pointers. To accommodate that, 8x51 compilers generally use a three-byte pointer type which may be used to access things in any memory space (one byte selects which type of instructions should be used with the pointer, and the other bytes hold the value). A pointer declaration like:

    char *ptr;
    

    will define a three-byte pointer which can point to any memory space. Changing the declaration to

    char xdata *data ptr;
    

    will define a two-byte pointer which is stored in DATA space, but which can only point to things in the XDATA space. Likewise

    char data * data ptr;
    

    will define a two-byte pointer which is stored in DATA space, but which can only point to things in the DATA and IDATA spaces. Code which uses pointers that point to a known data space will be much faster (possibly by a factor of ten) than code which uses the "general-purpose" three-byte pointers.

提交回复
热议问题