编辑:忽略关于',t‘的问题.请在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我还想知道为什么SREG的存储发生在cli()之前。
当然,如果中断在SREG和cli()的存储之间启动,那么当micros()恢复其版本的SREG (OldSREG)时,SREG可能会被更改,从而导致状态的丢失.
忽略:主要是我对uint8_t oldSREG = SREG, t;正在做什么感兴趣。
(谢谢你的反馈/帮助:)
发布于 2015-06-16 18:54:35
uint8_t oldSREG = SREG, t;与以下相同:
uint8_t oldSREG = SREG;
uin8_t t;它只是声明了一个类型为uint8_t的对象uint8_t。
编辑:问题被编辑了,下面是另一个答案:
如果您的函数在其末尾恢复SREG,并且如果您的中断处理程序正在访问SREG,那么oldSREG = SREG应该放在cli()调用之后,以避免任何争用条件。
发布于 2015-06-16 18:54:43
这只是一种简单的方法来声明多个变量。
uint8_t oldSREG = SREG, t;相当于:
uint8_t oldSREG = SREG;
uint8_t t;发布于 2015-06-16 18:57:17
uint8_t oldSREG = SREG, t;用于初始化多个变量( SREG的oldSREG和默认的uint8_t的t)。
它与以下内容相同:
uint8_t oldSREG = SREG;
uint8_t;你也可以把它写成:
uint8_t t, oldSREG = SREG;会产生同样的效果
https://stackoverflow.com/questions/30875881
复制相似问题