runtime: remove the asyncScheduler constant

There is no reason to specialize this per chip as it is only ever used
for JavaScript. Not only that, it is causing confusion and is yet
another quirk to learn when porting the runtime to a new
microcontroller.
Этот коммит содержится в:
Ayke van Laethem 2021-05-08 20:05:34 +02:00 коммит произвёл Ron Evans
родитель 25b045d0a7
коммит 8cd2a462b9
25 изменённых файлов: 8 добавлений и 52 удалений

Просмотреть файл

@ -71,8 +71,6 @@ func ticks() timeUnit {
return 0 return 0
} }
const asyncScheduler = false
func sleepTicks(d timeUnit) { func sleepTicks(d timeUnit) {
// TODO // TODO
} }

Просмотреть файл

@ -243,8 +243,6 @@ var rtcOverflows volatile.Register32 // number of times the RTC wrapped around
var timerWakeup volatile.Register8 var timerWakeup volatile.Register8
const asyncScheduler = false
// ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds. // ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds.
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
// The following calculation is actually the following, but with both sides // The following calculation is actually the following, but with both sides

Просмотреть файл

@ -232,8 +232,6 @@ var rtcOverflows volatile.Register32 // number of times the RTC wrapped around
var timerWakeup volatile.Register8 var timerWakeup volatile.Register8
const asyncScheduler = false
// ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds. // ticksToNanoseconds converts RTC ticks (at 32768Hz) to nanoseconds.
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
// The following calculation is actually the following, but with both sides // The following calculation is actually the following, but with both sides

Просмотреть файл

@ -58,8 +58,6 @@ func init() {
initUART() initUART()
} }
const asyncScheduler = false
const tickNanos = 1024 * 16384 // roughly 16ms in nanoseconds const tickNanos = 1024 * 16384 // roughly 16ms in nanoseconds
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {

Просмотреть файл

@ -27,8 +27,6 @@ func main() {
abort() abort()
} }
const asyncScheduler = false
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks) return int64(ticks)
} }

Просмотреть файл

@ -97,8 +97,6 @@ func ticks() timeUnit {
return timeUnit(uint64(esp.TIMG0.T0LO.Get()) | uint64(esp.TIMG0.T0HI.Get())<<32) return timeUnit(uint64(esp.TIMG0.T0LO.Get()) | uint64(esp.TIMG0.T0HI.Get())<<32)
} }
const asyncScheduler = false
func nanosecondsToTicks(ns int64) timeUnit { func nanosecondsToTicks(ns int64) timeUnit {
// Calculate the number of ticks from the number of nanoseconds. At a 80MHz // 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: // APB clock, that's 25 nanoseconds per tick with a timer prescaler of 2:

Просмотреть файл

@ -89,8 +89,6 @@ func ticks() timeUnit {
return currentTime return currentTime
} }
const asyncScheduler = false
const tickNanos = 3200 // time.Second / (80MHz / 256) const tickNanos = 3200 // time.Second / (80MHz / 256)
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {

Просмотреть файл

@ -100,8 +100,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c) machine.UART0.WriteByte(c)
} }
const asyncScheduler = false
var timerWakeup volatile.Register8 var timerWakeup volatile.Register8
func ticks() timeUnit { func ticks() timeUnit {

Просмотреть файл

@ -112,8 +112,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c) machine.UART0.WriteByte(c)
} }
const asyncScheduler = false
var timerWakeup volatile.Register8 var timerWakeup volatile.Register8
func ticks() timeUnit { func ticks() timeUnit {

Просмотреть файл

@ -10,8 +10,6 @@ import (
"unsafe" "unsafe"
) )
const asyncScheduler = false
//go:extern _svectors //go:extern _svectors
var _svectors [0]byte var _svectors [0]byte

Просмотреть файл

@ -6,8 +6,6 @@ import "unsafe"
type timeUnit int64 type timeUnit int64
const asyncScheduler = false
const ( const (
// Handles // Handles
infoTypeTotalMemorySize = 6 // Total amount of memory available for process. infoTypeTotalMemorySize = 6 // Total amount of memory available for process.

Просмотреть файл

@ -67,8 +67,6 @@ func putchar(c byte) {
machine.UART0.WriteByte(c) machine.UART0.WriteByte(c)
} }
const asyncScheduler = false
func sleepTicks(d timeUnit) { func sleepTicks(d timeUnit) {
for d != 0 { for d != 0 {
ticks := uint32(d) & 0x7fffff // 23 bits (to be on the safe side) ticks := uint32(d) & 0x7fffff // 23 bits (to be on the safe side)

Просмотреть файл

@ -232,9 +232,6 @@ func putchar(c byte) {
machine.PutcharUART(&machine.UART0, c) machine.PutcharUART(&machine.UART0, c)
} }
// ???
const asyncScheduler = false
func abort() { func abort() {
println("!!! ABORT !!!") println("!!! ABORT !!!")

Просмотреть файл

@ -24,8 +24,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initCLK() initCLK()

Просмотреть файл

@ -80,8 +80,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initOSC() // configure oscillators initOSC() // configure oscillators
initCLK() initCLK()

Просмотреть файл

@ -42,8 +42,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initCLK() initCLK()

Просмотреть файл

@ -41,8 +41,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initCLK() initCLK()

Просмотреть файл

@ -13,8 +13,6 @@ const (
type arrtype = uint16 type arrtype = uint16
const asyncScheduler = false
func putchar(c byte) { func putchar(c byte) {
machine.UART0.WriteByte(c) machine.UART0.WriteByte(c)
} }

Просмотреть файл

@ -66,8 +66,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initCLK() initCLK()

Просмотреть файл

@ -42,8 +42,6 @@ const (
type arrtype = uint32 type arrtype = uint32
const asyncScheduler = false
func init() { func init() {
initCLK() initCLK()

Просмотреть файл

@ -24,8 +24,6 @@ func main() {
abort() abort()
} }
const asyncScheduler = false
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
return int64(ticks) return int64(ticks)
} }

Просмотреть файл

@ -123,8 +123,6 @@ func putchar(c byte) {
_putchar(int(c)) _putchar(int(c))
} }
const asyncScheduler = false
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
// The OS API works in nanoseconds so no conversion necessary. // The OS API works in nanoseconds so no conversion necessary.
return int64(ticks) return int64(ticks)

Просмотреть файл

@ -40,8 +40,6 @@ func go_scheduler() {
scheduler() scheduler()
} }
const asyncScheduler = true
func ticksToNanoseconds(ticks timeUnit) int64 { func ticksToNanoseconds(ticks timeUnit) int64 {
// The JavaScript API works in float64 milliseconds, so convert to // The JavaScript API works in float64 milliseconds, so convert to
// nanoseconds first before converting to a timeUnit (which is a float64), // nanoseconds first before converting to a timeUnit (which is a float64),

Просмотреть файл

@ -59,10 +59,7 @@ func nanosecondsToTicks(ns int64) timeUnit {
return timeUnit(ns) return timeUnit(ns)
} }
const ( const timePrecisionNanoseconds = 1000 // TODO: how can we determine the appropriate `precision`?
asyncScheduler = false
timePrecisionNanoseconds = 1000 // TODO: how can we determine the appropriate `precision`?
)
var ( var (
sleepTicksSubscription = __wasi_subscription_t{ sleepTicksSubscription = __wasi_subscription_t{

Просмотреть файл

@ -20,6 +20,10 @@ import (
const schedulerDebug = false 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 var schedulerDone bool
// Queues used by the scheduler. // Queues used by the scheduler.
@ -138,6 +142,7 @@ func scheduler() {
if t == nil { if t == nil {
if sleepQueue == nil { if sleepQueue == nil {
if asyncScheduler { if asyncScheduler {
// JavaScript is treated specially, see below.
return return
} }
waitForEvents() waitForEvents()
@ -154,7 +159,8 @@ func scheduler() {
if asyncScheduler { if asyncScheduler {
// The sleepTicks function above only sets a timeout at which // The sleepTicks function above only sets a timeout at which
// point the scheduler will be called again. It does not really // 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 break
} }
continue continue