#define ABC *(unsigned int *)0xFFFFF000
можно понимать как указатель на ячейку памяти размером типа int, расположенную по адресу 0xFFFFF000, т.е. фактически именование ячейки. Не есть переменная, но используется как таковая. При наличии чтения-модификации-записи у соответствующих ячеек может быть использована как обычная переменная указанного типа. Приведение типа при использовании в выражениях может вызвать вопросы (к компилятору и голове

.
#define EXTERNAL_ADDR 0x00800000
#define RAM_COMM_HBYTE (*(unsigned char *)(EXTERNAL_ADDR+(0x0300<<1)))
Фактически то же - можно понимать как указатель на ячейку памяти размером типа unsigned char, расположенную по адресу EXTERNAL_ADDR+(0x0300<<1), т.е. по адресу 0x00800000+(0x0300<<1). Также есть именование ячейки памяти.