首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino micros()实现-代码构造和SREG

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

Stack Overflow用户
提问于 2015-06-16 18:53:25
回答 3查看 980关注 0票数 0

编辑:忽略关于',t‘的问题.请在cli()之前回答有关SREG的问题。

我正在浏览源代码,并在wiring.c中看到了这个

代码语言:javascript
复制
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;正在做什么感兴趣。

(谢谢你的反馈/帮助:)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-16 18:54:35

代码语言:javascript
复制
uint8_t oldSREG = SREG, t;

与以下相同:

代码语言:javascript
复制
uint8_t oldSREG = SREG;
uin8_t t;

它只是声明了一个类型为uint8_t的对象uint8_t

编辑:问题被编辑了,下面是另一个答案:

如果您的函数在其末尾恢复SREG,并且如果您的中断处理程序正在访问SREG,那么oldSREG = SREG应该放在cli()调用之后,以避免任何争用条件。

票数 1
EN

Stack Overflow用户

发布于 2015-06-16 18:54:43

这只是一种简单的方法来声明多个变量。

代码语言:javascript
复制
uint8_t oldSREG = SREG, t;

相当于:

代码语言:javascript
复制
uint8_t oldSREG = SREG;
uint8_t t;
票数 0
EN

Stack Overflow用户

发布于 2015-06-16 18:57:17

代码语言:javascript
复制
uint8_t oldSREG = SREG, t;

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

它与以下内容相同:

代码语言:javascript
复制
uint8_t oldSREG = SREG;
uint8_t;

你也可以把它写成:

代码语言:javascript
复制
uint8_t t, oldSREG = SREG;

会产生同样的效果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30875881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档