Skip to content

Commit 69aead5

Browse files
committed
Added general yield()-hook for cooperative scheduling development (part 2)
1 parent 6e2b0e8 commit 69aead5

File tree

3 files changed

+33
-1
lines changed

3 files changed

+33
-1
lines changed

Diff for: cores/arduino/Arduino.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
extern "C"{
1616
#endif
1717

18-
#define yield()
18+
void yield(void);
1919

2020
#define HIGH 0x1
2121
#define LOW 0x0

Diff for: cores/arduino/hooks.c

+31
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")));

Diff for: cores/arduino/wiring.c

+1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ void delay(unsigned long ms)
111111
uint16_t start = (uint16_t)micros();
112112

113113
while (ms > 0) {
114+
yield();
114115
if (((uint16_t)micros() - start) >= 1000) {
115116
ms--;
116117
start += 1000;

0 commit comments

Comments
 (0)