aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/runtime/runtime_arm7tdmi.go2
-rw-r--r--src/runtime/runtime_atsamd21.go2
-rw-r--r--src/runtime/runtime_atsamd51.go2
-rw-r--r--src/runtime/runtime_avr.go2
-rw-r--r--src/runtime/runtime_cortexm_qemu.go2
-rw-r--r--src/runtime/runtime_esp32.go2
-rw-r--r--src/runtime/runtime_esp8266.go2
-rw-r--r--src/runtime/runtime_fe310.go2
-rw-r--r--src/runtime/runtime_k210.go2
-rw-r--r--src/runtime/runtime_mimxrt1062.go2
-rw-r--r--src/runtime/runtime_nintendoswitch.go2
-rw-r--r--src/runtime/runtime_nrf.go2
-rw-r--r--src/runtime/runtime_nxpmk66f18.go3
-rw-r--r--src/runtime/runtime_stm32f103.go2
-rw-r--r--src/runtime/runtime_stm32f405.go2
-rw-r--r--src/runtime/runtime_stm32f407.go2
-rw-r--r--src/runtime/runtime_stm32f7x2.go2
-rw-r--r--src/runtime/runtime_stm32l0.go2
-rw-r--r--src/runtime/runtime_stm32l4x2.go2
-rw-r--r--src/runtime/runtime_stm32l5x2.go2
-rw-r--r--src/runtime/runtime_tinygoriscv_qemu.go2
-rw-r--r--src/runtime/runtime_unix.go2
-rw-r--r--src/runtime/runtime_wasm_js.go2
-rw-r--r--src/runtime/runtime_wasm_wasi.go5
-rw-r--r--src/runtime/scheduler.go8
25 files changed, 8 insertions, 52 deletions
diff --git a/src/runtime/runtime_arm7tdmi.go b/src/runtime/runtime_arm7tdmi.go
index 70b764042..705d5edfa 100644
--- a/src/runtime/runtime_arm7tdmi.go
+++ b/src/runtime/runtime_arm7tdmi.go
@@ -71,8 +71,6 @@ func ticks() timeUnit {
return 0
}
-const asyncScheduler = false
-
func sleepTicks(d timeUnit) {
// TODO
}
diff --git a/src/runtime/runtime_atsamd21.go b/src/runtime/runtime_atsamd21.go
index 452532b2d..117f5a6de 100644
--- a/src/runtime/runtime_atsamd21.go
+++ b/src/runtime/runtime_atsamd21.go
@@ -243,8 +243,6 @@ var rtcOverflows volatile.Register32 // number of times the RTC wrapped around
var timerWakeup volatile.Register8
-const asyncScheduler = false
-
// ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds.
func ticksToNanoseconds(ticks timeUnit) int64 {
// The following calculation is actually the following, but with both sides
diff --git a/src/runtime/runtime_atsamd51.go b/src/runtime/runtime_atsamd51.go
index 9babc686b..f59c82f2b 100644
--- a/src/runtime/runtime_atsamd51.go
+++ b/src/runtime/runtime_atsamd51.go
@@ -232,8 +232,6 @@ var rtcOverflows volatile.Register32 // number of times the RTC wrapped around
var timerWakeup volatile.Register8
-const asyncScheduler = false
-
// ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds.
func ticksToNanoseconds(ticks timeUnit) int64 {
// The following calculation is actually the following, but with both sides
diff --git a/src/runtime/runtime_avr.go b/src/runtime/runtime_avr.go
index 8365b7f86..4aedf811b 100644
--- a/src/runtime/runtime_avr.go
+++ b/src/runtime/runtime_avr.go
@@ -58,8 +58,6 @@ func init() {
initUART()
}
-const asyncScheduler = false
-
const tickNanos = 1024 * 16384 // roughly 16ms in nanoseconds
func ticksToNanoseconds(ticks timeUnit) int64 {
diff --git a/src/runtime/runtime_cortexm_qemu.go b/src/runtime/runtime_cortexm_qemu.go
index bc4fc2d1c..634144fa9 100644
--- a/src/runtime/runtime_cortexm_qemu.go
+++ b/src/runtime/runtime_cortexm_qemu.go
@@ -27,8 +27,6 @@ func main() {
abort()
}
-const asyncScheduler = false
-
func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks)
}
diff --git a/src/runtime/runtime_esp32.go b/src/runtime/runtime_esp32.go
index 6f2ad6def..ca7d7c14e 100644
--- a/src/runtime/runtime_esp32.go
+++ b/src/runtime/runtime_esp32.go
@@ -97,8 +97,6 @@ func ticks() timeUnit {
return timeUnit(uint64(esp.TIMG0.T0LO.Get()) | uint64(esp.TIMG0.T0HI.Get())<<32)
}
-const asyncScheduler = false
-
func nanosecondsToTicks(ns int64) timeUnit {
// Calculate the number of ticks from the number of nanoseconds. At a 80MHz
// APB clock, that's 25 nanoseconds per tick with a timer prescaler of 2:
diff --git a/src/runtime/runtime_esp8266.go b/src/runtime/runtime_esp8266.go
index 2ad109639..28af3c554 100644
--- a/src/runtime/runtime_esp8266.go
+++ b/src/runtime/runtime_esp8266.go
@@ -89,8 +89,6 @@ func ticks() timeUnit {
return currentTime
}
-const asyncScheduler = false
-
const tickNanos = 3200 // time.Second / (80MHz / 256)
func ticksToNanoseconds(ticks timeUnit) int64 {
diff --git a/src/runtime/runtime_fe310.go b/src/runtime/runtime_fe310.go
index 437f03bf5..d2e0d91ed 100644
--- a/src/runtime/runtime_fe310.go
+++ b/src/runtime/runtime_fe310.go
@@ -100,8 +100,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c)
}
-const asyncScheduler = false
-
var timerWakeup volatile.Register8
func ticks() timeUnit {
diff --git a/src/runtime/runtime_k210.go b/src/runtime/runtime_k210.go
index 457a1e177..932361818 100644
--- a/src/runtime/runtime_k210.go
+++ b/src/runtime/runtime_k210.go
@@ -112,8 +112,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c)
}
-const asyncScheduler = false
-
var timerWakeup volatile.Register8
func ticks() timeUnit {
diff --git a/src/runtime/runtime_mimxrt1062.go b/src/runtime/runtime_mimxrt1062.go
index 7fbd0d9e1..a9cc063df 100644
--- a/src/runtime/runtime_mimxrt1062.go
+++ b/src/runtime/runtime_mimxrt1062.go
@@ -10,8 +10,6 @@ import (
"unsafe"
)
-const asyncScheduler = false
-
//go:extern _svectors
var _svectors [0]byte
diff --git a/src/runtime/runtime_nintendoswitch.go b/src/runtime/runtime_nintendoswitch.go
index e5120d425..99cb3b0b6 100644
--- a/src/runtime/runtime_nintendoswitch.go
+++ b/src/runtime/runtime_nintendoswitch.go
@@ -6,8 +6,6 @@ import "unsafe"
type timeUnit int64
-const asyncScheduler = false
-
const (
// Handles
infoTypeTotalMemorySize = 6 // Total amount of memory available for process.
diff --git a/src/runtime/runtime_nrf.go b/src/runtime/runtime_nrf.go
index b55ca18e9..2e7765b67 100644
--- a/src/runtime/runtime_nrf.go
+++ b/src/runtime/runtime_nrf.go
@@ -67,8 +67,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c)
}
-const asyncScheduler = false
-
func sleepTicks(d timeUnit) {
for d != 0 {
ticks := uint32(d) & 0x7fffff // 23 bits (to be on the safe side)
diff --git a/src/runtime/runtime_nxpmk66f18.go b/src/runtime/runtime_nxpmk66f18.go
index cff830d28..1cb523349 100644
--- a/src/runtime/runtime_nxpmk66f18.go
+++ b/src/runtime/runtime_nxpmk66f18.go
@@ -232,9 +232,6 @@ func putchar(c byte) {
machine.PutcharUART(&machine.UART0, c)
}
-// ???
-const asyncScheduler = false
-
func abort() {
println("!!! ABORT !!!")
diff --git a/src/runtime/runtime_stm32f103.go b/src/runtime/runtime_stm32f103.go
index a7c8563df..50d2b968f 100644
--- a/src/runtime/runtime_stm32f103.go
+++ b/src/runtime/runtime_stm32f103.go
@@ -24,8 +24,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initCLK()
diff --git a/src/runtime/runtime_stm32f405.go b/src/runtime/runtime_stm32f405.go
index 7596c8644..799e4eac9 100644
--- a/src/runtime/runtime_stm32f405.go
+++ b/src/runtime/runtime_stm32f405.go
@@ -80,8 +80,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initOSC() // configure oscillators
initCLK()
diff --git a/src/runtime/runtime_stm32f407.go b/src/runtime/runtime_stm32f407.go
index 5a30a81c2..a1af7bbf0 100644
--- a/src/runtime/runtime_stm32f407.go
+++ b/src/runtime/runtime_stm32f407.go
@@ -42,8 +42,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initCLK()
diff --git a/src/runtime/runtime_stm32f7x2.go b/src/runtime/runtime_stm32f7x2.go
index a80c7e921..034986b37 100644
--- a/src/runtime/runtime_stm32f7x2.go
+++ b/src/runtime/runtime_stm32f7x2.go
@@ -41,8 +41,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initCLK()
diff --git a/src/runtime/runtime_stm32l0.go b/src/runtime/runtime_stm32l0.go
index c7045087b..be61749e6 100644
--- a/src/runtime/runtime_stm32l0.go
+++ b/src/runtime/runtime_stm32l0.go
@@ -13,8 +13,6 @@ const (
type arrtype = uint16
-const asyncScheduler = false
-
func putchar(c byte) {
machine.UART0.WriteByte(c)
}
diff --git a/src/runtime/runtime_stm32l4x2.go b/src/runtime/runtime_stm32l4x2.go
index 5a6eb1ad9..9aad880ce 100644
--- a/src/runtime/runtime_stm32l4x2.go
+++ b/src/runtime/runtime_stm32l4x2.go
@@ -66,8 +66,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initCLK()
diff --git a/src/runtime/runtime_stm32l5x2.go b/src/runtime/runtime_stm32l5x2.go
index 1bf9c7ee9..1ecc662b2 100644
--- a/src/runtime/runtime_stm32l5x2.go
+++ b/src/runtime/runtime_stm32l5x2.go
@@ -42,8 +42,6 @@ const (
type arrtype = uint32
-const asyncScheduler = false
-
func init() {
initCLK()
diff --git a/src/runtime/runtime_tinygoriscv_qemu.go b/src/runtime/runtime_tinygoriscv_qemu.go
index 27caa398a..0b4438387 100644
--- a/src/runtime/runtime_tinygoriscv_qemu.go
+++ b/src/runtime/runtime_tinygoriscv_qemu.go
@@ -24,8 +24,6 @@ func main() {
abort()
}
-const asyncScheduler = false
-
func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks)
}
diff --git a/src/runtime/runtime_unix.go b/src/runtime/runtime_unix.go
index 584f03383..c185c4ab7 100644
--- a/src/runtime/runtime_unix.go
+++ b/src/runtime/runtime_unix.go
@@ -123,8 +123,6 @@ func putchar(c byte) {
_putchar(int(c))
}
-const asyncScheduler = false
-
func ticksToNanoseconds(ticks timeUnit) int64 {
// The OS API works in nanoseconds so no conversion necessary.
return int64(ticks)
diff --git a/src/runtime/runtime_wasm_js.go b/src/runtime/runtime_wasm_js.go
index 5e2eb1f51..b39aef0a5 100644
--- a/src/runtime/runtime_wasm_js.go
+++ b/src/runtime/runtime_wasm_js.go
@@ -40,8 +40,6 @@ func go_scheduler() {
scheduler()
}
-const asyncScheduler = true
-
func ticksToNanoseconds(ticks timeUnit) int64 {
// The JavaScript API works in float64 milliseconds, so convert to
// nanoseconds first before converting to a timeUnit (which is a float64),
diff --git a/src/runtime/runtime_wasm_wasi.go b/src/runtime/runtime_wasm_wasi.go
index b1a58886e..76d0a4520 100644
--- a/src/runtime/runtime_wasm_wasi.go
+++ b/src/runtime/runtime_wasm_wasi.go
@@ -59,10 +59,7 @@ func nanosecondsToTicks(ns int64) timeUnit {
return timeUnit(ns)
}
-const (
- asyncScheduler = false
- timePrecisionNanoseconds = 1000 // TODO: how can we determine the appropriate `precision`?
-)
+const timePrecisionNanoseconds = 1000 // TODO: how can we determine the appropriate `precision`?
var (
sleepTicksSubscription = __wasi_subscription_t{
diff --git a/src/runtime/scheduler.go b/src/runtime/scheduler.go
index 42cc0fef8..c5286d33b 100644
--- a/src/runtime/scheduler.go
+++ b/src/runtime/scheduler.go
@@ -20,6 +20,10 @@ import (
const schedulerDebug = false
+// On JavaScript, we can't do a blocking sleep. Instead we have to return and
+// queue a new scheduler invocation using setTimeout.
+const asyncScheduler = GOOS == "js"
+
var schedulerDone bool
// Queues used by the scheduler.
@@ -138,6 +142,7 @@ func scheduler() {
if t == nil {
if sleepQueue == nil {
if asyncScheduler {
+ // JavaScript is treated specially, see below.
return
}
waitForEvents()
@@ -154,7 +159,8 @@ func scheduler() {
if asyncScheduler {
// The sleepTicks function above only sets a timeout at which
// point the scheduler will be called again. It does not really
- // sleep.
+ // sleep. So instead of sleeping, we return and expect to be
+ // called again.
break
}
continue