Arduino micros()实现 - 代码构造和SREG

时间:2015-06-16 18:53:25

标签: c arduino

编辑:IGNORE关于',t'的问题bit ...请在cli()

之前回答关于SREG的问题

我只是浏览源代码并在wiring.c中看到了这个:

unsigned long micros() {
    unsigned long m;
    uint8_t oldSREG = SREG, t; <<<<<<< What is the ', t' bit here?!

    cli();
    m = timer0_overflow_count;
    //etc

我也想知道为什么在cli()之前存储SREG。

当然,如果在SREG和cli()存储之间发生中断,则当micros()恢复其版本的SREG(oldSREG)时,SREG可能会被更改,导致状态丢失......

IGNORE:主要是我对uint8_t oldSREG = SREG, t;正在做的事感兴趣。

感谢您的任何反馈/帮助:)

3 个答案:

答案 0 :(得分:1)

uint8_t oldSREG = SREG, t;

与:

相同
uint8_t oldSREG = SREG;
uin8_t t;

它只声明t类型的对象uint8_t

编辑:编辑了问题,这是另一个答案:

如果您的函数在其结尾处恢复SREG,并且您的中断处理程序正在访问SREG,则应在oldSREG = SREG调用后放置cli()以避免任何竞争条件。< / p>

答案 1 :(得分:0)

这只是宣告多个变量的简单方法。

uint8_t oldSREG = SREG, t;

相当于:

uint8_t oldSREG = SREG;
uint8_t t;

答案 2 :(得分:0)

uint8_t oldSREG = SREG, t;

用于初始化多个变量(SREG的oldSREG和默认uint8_t的t)

与以下内容相同:

uint8_t oldSREG = SREG;
uint8_t;

你也可以把它写成:

uint8_t t, oldSREG = SREG;

并且具有完全相同的效果