编辑: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;
正在做的事感兴趣。
感谢您的任何反馈/帮助:)
答案 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;
并且具有完全相同的效果