主题中讨论的其他部件:MSP432P401R
我在查看RSLK示例时遇到的一个问题/烦恼是 ,很难从 我的其他 经历中(尽管只是少数几次)了解设置或清除位时发生的情况,尤其是在配置计时器,中断等时。 我目前是一名研究计算机工程的研究生),我看到过在位操作中使用宏来完成相同的任务,但对正在发生的事情提供了更清晰的了解。
例如,下面是 一个用于配置计时器的语句,该语句使用"硬编码"值。 如果有帮助,或者有人想知道,我在这里使用的特定代码来自 PeriodMeasure项目,TA0InputCapture.c,TimerA0Capture_Init()函数。
// bits15-10=XXXXXX, reserved // bits9-8=10, clock source to SMCLK // bits7-6=00, input clock divider /1 // bits5-4=00, stop mode // bit3=X, reserved // bit2=0, set this bit to clear // bit1=0, interrupt disable // bit0=0, clear interrupt pending TIMER_A0->CTL = 0x0200;
但同样的事情也可以用宏来完成,宏可以更好地指定设置。 此代码中的宏专门来自提供 的msp432p401r.h文件,代码是我自己的。
TIMER_A0->CTL = TIMER_A_CTL_SSEL__SMCLK | // clk src = SMCLK TIMER_A_CTL_ID__1 | // input clock divider = 1 TIMER_A_CTL_MC__STOP | // timer mode = stop (0 << TIMER_A_CTL_CLR_OFS) | // timer clear = no? (0 << TIMER_A_CTL_IE_OFS) | // timer interrupt = disabled (0 << TIMER_A_CTL_IFG_OFS); // timer interrupt flag = cleared (clear any pending interrupts)
我对为什么不使用宏有一些想法,但从我所能知道的内容来看,它们似乎不实用。 例如,我想,如果使用了宏,将会有更多的计算来处理所有OR语句;但是如果这些宏大多/只用于在程序中运行一次的初始化代码,那么可读性是否值得额外等待? 我还认为它可能与便携性有关,即宏仅针对此软件/套件的MSP板; 但如果是这样,无论我们使用的是"硬编码"值还是宏,都需要更改代码(同样,它似乎更值得阅读)。
但 我不确定不使用宏的确切原因。 如果有人知道这是不是有原因的,我很感谢您的反馈。
我也想对因可能弄乱帖子的标签,部件号等而造成的不便表示歉意