#define vs. enums для адресации периферийных устройств

Мне нужно запрограммировать периферийные регистры в микроконтроллере на базе ARM9.

Например, для USART я сохраняю соответствующие адреса памяти в перечислении :

enum USART
{
    US_BASE = (int) 0xFFFC4000,
    US_BRGR = US_BASE + 0x16,
    //...
};

Затем я использую указатели в функции для инициализации регистров:

void init_usart (void)
{
    vuint* pBRGR = (vuint*) US_BRGR;
    *pBRGR = 0x030C;
    //...
}

Но мой учитель говорит, что мне лучше использовать #define s, например:

#define US_BASE (0xFFFC4000)
#define US_BRGR (US_BASE + 0x16)
#define pBRGR   ((vuint*) US_BRGR)

void init_usart (void)
{
    *pBRGR = 0x030C;
}

Вот так, он говорит, что у вас нет накладных расходов на размещение указателей в стеке.

Лично мне не нравятся ни #define , ни другие директивы препроцессора. Итак, в данном конкретном случае возникает вопрос, действительно ли стоит использовать #define вместо enum и указателей, выделенных в стеке?


Связанный вопрос: Хотите, чтобы настроить конкретный периферийный регистр в микросхеме на базе ARM9

6
задан Community 23 May 2017 в 12:00
поделиться