aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/runtime/scheduler.go
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2020-05-21 23:43:08 +0200
committerRon Evans <[email protected]>2020-05-25 22:08:28 +0200
commit3c55689566153047f1d2e5403188557481f90d42 (patch)
tree55bd119f08ba39f30d7a0351a8f99b31c76ff3c9 /src/runtime/scheduler.go
parent95f509b109d4936bec9b6020cb34fbb4bd5cba16 (diff)
downloadtinygo-3c55689566153047f1d2e5403188557481f90d42.tar.gz
tinygo-3c55689566153047f1d2e5403188557481f90d42.zip
runtime: refactor time handling
This commit refactors both determining the current time and sleeping for a given time. It also improves precision for many chips. * The nrf chips had a long-standing TODO comment about a slightly inaccurate clock. This should now be fixed. * The SAM D2x/D5x chips may have a slightly more accurate clock, although probably within the error margin of the RTC. Also, by working with RTC ticks and converting in the least number of places, code size is often slightly reduced (usually just a few bytes, up to around 1kB in some cases). * I believe the HiFive1 rev B timer was slightly wrong (32768Hz vs 30517.6Hz). Because the datasheet says the clock runs at 32768Hz, I've used the same conversion code here as in the nrf and sam cases. * I couldn't test both stm32 timers, so I kept them as they currently are. It may be possible to make them more efficient by using the native tick frequency instead of using microseconds everywhere.
Diffstat (limited to 'src/runtime/scheduler.go')
-rw-r--r--src/runtime/scheduler.go6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/runtime/scheduler.go b/src/runtime/scheduler.go
index 49cf8e402..a8c9f16b1 100644
--- a/src/runtime/scheduler.go
+++ b/src/runtime/scheduler.go
@@ -75,14 +75,14 @@ func runqueuePushBack(t *task.Task) {
}
// Add this task to the sleep queue, assuming its state is set to sleeping.
-func addSleepTask(t *task.Task, duration int64) {
+func addSleepTask(t *task.Task, duration timeUnit) {
if schedulerDebug {
- println(" set sleep:", t, uint(duration/tickMicros))
+ println(" set sleep:", t, duration)
if t.Next != nil {
panic("runtime: addSleepTask: expected next task to be nil")
}
}
- t.Data = uint(duration / tickMicros) // TODO: longer durations
+ t.Data = uint(duration) // TODO: longer durations
now := ticks()
if sleepQueue == nil {
scheduleLog(" -> sleep new queue")