Skip to content

Commit 3f04a76

Browse files
committed
Add missing yield() support
The yield function was added to the Arduino core to allow for cooperative scheduling, but in the case of the AVR core, is simply defined as a void function to prevent error in code that expects it, such as the FastLED library. This patch removes the "error: 'yield' was not declared in this scope" compile failure from the digispark and digispark pro cores.
1 parent 684c36a commit 3f04a76

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

digistump-avr/cores/pro/Arduino.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
extern "C"{
1616
#endif
1717

18+
void yield(void);
19+
1820
#define ATTINY_CORE 1
1921

2022
#define HIGH 0x1

digistump-avr/cores/pro/hooks.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
Copyright (c) 2012 Arduino. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
/**
20+
* Empty yield() hook.
21+
*
22+
* This function is intended to be used by library writers to build
23+
* libraries or sketches that supports cooperative threads.
24+
*
25+
* Its defined as a weak symbol and it can be redefined to implement a
26+
* real cooperative scheduler.
27+
*/
28+
static void __empty() {
29+
// Empty
30+
}
31+
void yield(void) __attribute__ ((weak, alias("__empty")));

digistump-avr/cores/tiny/WProgram.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#include "TinyDebugSerial.h"
1919
#include "HardwareSerial.h"
2020

21+
void yield(void);
22+
2123
uint16_t makeWord(uint16_t w);
2224
uint16_t makeWord(byte h, byte l);
2325

digistump-avr/cores/tiny/hooks.c

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
Copyright (c) 2012 Arduino. All right reserved.
3+
4+
This library is free software; you can redistribute it and/or
5+
modify it under the terms of the GNU Lesser General Public
6+
License as published by the Free Software Foundation; either
7+
version 2.1 of the License, or (at your option) any later version.
8+
9+
This library is distributed in the hope that it will be useful,
10+
but WITHOUT ANY WARRANTY; without even the implied warranty of
11+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12+
See the GNU Lesser General Public License for more details.
13+
14+
You should have received a copy of the GNU Lesser General Public
15+
License along with this library; if not, write to the Free Software
16+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17+
*/
18+
19+
/**
20+
* Empty yield() hook.
21+
*
22+
* This function is intended to be used by library writers to build
23+
* libraries or sketches that supports cooperative threads.
24+
*
25+
* Its defined as a weak symbol and it can be redefined to implement a
26+
* real cooperative scheduler.
27+
*/
28+
static void __empty() {
29+
// Empty
30+
}
31+
void yield(void) __attribute__ ((weak, alias("__empty")));

0 commit comments

Comments
 (0)