Мне нужно запрограммировать периферийные регистры в микроконтроллере на базе 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