gpt4 book ai didi

c++ - Atmel Studio 中的 Arduino 产量

转载 作者:行者123 更新时间:2023-11-28 05:02:28 28 4
gpt4 key购买 nike

我正在尝试在 Atmel Studio 7 中为 Arduino 编写代码。为了使其与 Arduino IDE 相似,我正在尝试调整其库。

但是我已经被 delay() 阻止了,它使用了 yield()。产量似乎没有在任何地方实现。所以我的编译器说“对 yield 的 undefined reference ”

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

这是我的尝试:

#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);
}
}

最佳答案

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

void yield(void) __attribute__ ((weak, alias("__empty")));

正如该文件中的注释所解释的那样:

Empty yield() hook. This function is intended to be used by library writers to build libraries or sketches that supports cooperative threads. Its defined as a weak symbol and it can be redefined to implement a real cooperative scheduler.

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

当然,最好编写适当的非阻塞代码,而不是使用此 yield() 解决方法,但您询问了 Arduino IDE 如何处理它,所以您知道了。

关于c++ - Atmel Studio 中的 Arduino 产量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45578320/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com