Use of pointers in C

Pointers in C for the 68HC12

To access a memory location:

    *address


Need to tell compiler whether you want to access 8-bit or 16 bit number,
signed or unsigned:

    *(type *)address

To read from an eight-bit unsigned number at memory location 0x0900:

   x = *(unsigned char *)0x0900;

To write an 0xaa55 to a sixteen-bit signed number at memory locations
0x0910 and 0x0911:

   *(signed int *)0x0910 = 0xaa55;

If there is an address which is used alot:

   #define PORTA (* (unsigned char *) 0x0000)

   x = PORTA;      /* Read from address 0x0000 */
   PORTA = 0x55;   /* Write to address 0x0000 */


To access consecutive locations in memory, use a variable as a pointer:

   unsigned char *ptr;

   ptr = (unsigned char *)0x0900;
   *ptr = 0xaa;                     /* Put 0xaa into address 0x0900 */
   ptr = ptr+2;                     /* Point two further into table */
   x = *ptr;                        /* Read from address 0x0902     */

To set aside ten locations for a table:

   unsigned char table[10];

Can access the third element in the table as:

   table[2]

or as

   *(table+2)

To set up a table of constant data:

   const unsigned char table[] = {0x00,0x01,0x03,0x07,0x0f};