首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmel工作室的Arduino产量

Atmel工作室的Arduino产量
EN

Stack Overflow用户
提问于 2017-08-08 21:28:05
回答 3查看 665关注 0票数 0

我试图在Atmel Studio 7中为Arduino编写代码,为了保持它与Arduino IDE的相似,我尝试修改它的lib。

但是我已经被delay()阻止了,它使用yield()。收益率似乎在任何地方都没有实现。所以我的编译器说“未定义的引用就是屈服”。

我不明白Arduino IDE是怎么处理的?如何在Atmel Studio中使用yield()

以下是我的尝试:

代码语言:javascript
复制
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <util/delay.h>
#include <avr/io.h>

#include <Arduino.h>
#include <wiring.c>

int main(void) {
  DDRB = (1 << DDB5);
  while(1) {
    PORTB = (1 << DDB5);
    delay(1000);
    PORTB = (0 << DDB5);
    delay(1000);
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-09 00:41:13

虽然,正如评论者所建议的那样,延迟通常是可以避免的,但我们中的大多数人都是从闪烁的LED程序开始设计裸金属Atmel芯片的。这是裸金属嵌入式编程的"Hello“。延迟一下就可以了。

如果您查看您的util/delay.h,您将看到特别为您的芯片编写的函数。使用这些而不是在Arduino版本中链接。您将找到一个_delay_ms()_delay_us()函数,它们非常适合这种第一步类型的程序。

票数 1
EN

Stack Overflow用户

发布于 2017-08-10 20:15:43

下面是在Arduino AVR板核心:https://github.com/arduino/Arduino/blob/1.8.3/hardware/arduino/avr/cores/arduino/hooks.c#L19-L31中实现它的方法

代码语言:javascript
复制
void yield(void) __attribute__ ((weak, alias("__empty")));

正如该文件中的评论所解释的:

空头()钩此函数用于库编写人员构建支持协作线程的库或草图。它被定义为一个弱符号,它可以被重新定义来实现一个真正的协作调度器。

因此,如果您愿意,可以在自己的代码中定义yield()。否则,空定义将防止遇到未定义的引用错误。

当然,编写正确的非阻塞代码比使用这个yield()解决方案更好,但是您询问了Arduino IDE是如何处理它的,所以就有了它。

票数 2
EN

Stack Overflow用户

发布于 2017-08-10 18:25:14

谢谢你的帮助。因此,我创建了一个类样式的解决方案:

代码语言:javascript
复制
#include "Blink.h"

#include <util/delay.h>
#include "Arduino.h"

#define boardLedOn PORTB  |= (1 << DDB5);
#define boardLedOff PORTB &= ~(1 << DDB5); // inverse bits

#define delay(ms) _delay_ms(ms);

Blink::Blink(){
};

void Blink::run(){

    boardLedOn;

    delay(1000);

    boardLedOff;

    delay(1000);

}

来电者:

代码语言:javascript
复制
#include <avr/io.h>
#include <Arduino.h>
#include <Blink.h>

int main(void)
{


    Blink blink;

    while(1)
    {       
        blink.run();        
    }
}

头文件:

代码语言:javascript
复制
#ifndef BLINK_H
#define BLINK_H

class Blink{

  public: 

    Blink();
    void run();

};

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

https://stackoverflow.com/questions/45578320

复制
相关文章

相似问题

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