This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TIRSLK-EVM-SW:为什么要使用aren't宏(掩码/偏移)来提高可读性?

Guru**** 655180 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/other-wireless-group/other-wireless/f/other-wireless-technologies-forum/1102625/tirslk-evm-sw-why-aren-t-macros-masks-offsets-used-for-better-readability

部件号:TIRSLK-EVM-SW
主题中讨论的其他部件: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板; 但如果是这样,无论我们使用的是"硬编码"值还是宏,都需要更改代码(同样,它似乎更值得阅读)。

但 我不确定不使用宏的确切原因。 如果有人知道这是不是有原因的,我很感谢您的反馈。

我也想对因可能弄乱帖子的标签,部件号等而造成的不便表示歉意

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Andy:

    很高兴回答您的问题。 "硬代码"和"微粒"都可以实现您想要的相同功能。 实际上,硬代码将比Macron更快。 因为如果需要用其实际值替换这些微粒。 但为什么有人要使用macrons,例如TI提供的头文件? 因为人们很容易阅读代码的含义。  此外,它还可以方便 地为同一系列中的系列设备创建软件支持包。 这是为了提高兼容性和可读性。 例如,如果设计师更改了系列中的设备。 如果使用硬代码,他可以更改所有配置代码以适合新设备。 但是,如果使用macrons,则可以通过相对较小的修改来实现代码移植。

    总之,这取决于设计师。 我更喜欢使用兼容性和可读性更好的macrons或驱动程序库。