编辑:忽略关于',t' bit的问题.请在()之前回答关于SREG的Q
我只是翻阅了一下源代码,在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的存储发生在()之前。
当然,如果一个中断在存储SREG和SREG()之间发生,那么当micros()恢复其SREG版本(oldSREG)时,SREG可能会被更改,从而导致状态丢失。
Ignore:我主要对uint8_t oldSREG = SREG, t;
正在做的事情感兴趣。
感谢任何反馈/帮助:)
3条答案
按热度按时间lfapxunr1#
字符串
是相同的:
型
它只是声明了一个
uint8_t
类型的对象t
。**编辑:**问题已编辑,以下是另一个答案:
如果你的函数在其结束时恢复
SREG
,并且如果你的中断处理程序正在访问SREG
,那么oldSREG = SREG
应该放在cli()
调用之后,以避免任何竞争条件。laik7k3q2#
这只是声明多个变量的一种简单方法。
字符串
相当于:
型
hivapdat3#
字符串
用于初始化多个变量(SREG的oldSREG和默认uint8_t的t)
它与以下内容相同:
型
你也可以把它写成:
型
也会有同样的效果