Я должен программировать периферийные регистры в микроконтроллере на базе ARM9.
Например, для USART я храню соответствующие адреса памяти в enum
:
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
s или другие директивы препроцессора.Таким образом, вопрос в данном конкретном случае: действительно ли стоит #define
s вместо enum
s и указателей, выделенных в стеке?
Смежный вопрос: Хотите настроить конкретныйпериферийный регистр в чипе на базе ARM9