You've hit the problem already but resolved it the wrong way in your code on line 23. The compiler didn't allow you to multiply an int by time.Duration (int64) but unfortunately you resolved to convert the time.Duration to an int instead of the other way around. On 32-bit architectures ints are not large enough to hold a full duration in nanoseconds and you overflow. You can verify this by issuing this on your ubuntu host:
GOARCH=386 go run t.go (assuming your program is called t.go) the playground is 32-bit, however it does its own time emulation for the purposes of repeatability or the result. check the documentation. to solve the problem change line 23 to: currDur = currDur * time.Duration(scale) On Wed, Jan 11, 2017 at 12:32 PM, Art Mellor <[email protected]> wrote: > The code below implements a simple timer loop that doubles the amount of > time it waits (up to a max) after each firing. It works fine on my x86 linux > box, but behaves erratically on a Raspberry Pi ARM platform (and on the > playground). > > I'm assuming I'm doing something bad, but it isn't clear at all to me what > I'm missing. > > Code on playground and below, as well as machine specs and output. What is > going on? > > // https://play.golang.org/p/8hN9pR6LlU > package main > > import ( > "fmt" > "time" > ) > > func main() { > scale := 2 > max := 15 * time.Second > currDur := 250 * time.Millisecond > > tick := time.After(currDur) > > prev := time.Now() > for i := 1; i <= 10; i++ { > select { > case t := <-tick: > now := time.Now() > delta := now.Sub(prev) > prev = now > fmt.Printf("%2d: %s %s\n", i, delta, t) > currDur = time.Duration(int(currDur) * scale) > if currDur >= max { > currDur = max > } > > tick = time.After(currDur) > } > } > > return > } > > /* > > -------------------- > Host for cross compile > > mke% go version > go version go1.7.3 linux/amd64 > > mke% lsb_release -a > No LSB modules are available. > Distributor ID:Ubuntu > Description:Ubuntu 14.04.5 LTS > Release:14.04 > Codename:trusty > > mke% uname -a > Linux mke 4.2.0-42-generic #49~14.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC > 2016 \ > x86_64 x86_64 x86_64 GNU/Linux > > # compile native > mke% go build tryit.go > > # cross-compile > mke% GOOS=linux GOARCH=arm go build tryit.go > > mke% ./tryit > 1: 250.192493ms 2017-01-11 14:07:12.041348721 -0500 EST > 2: 500.386557ms 2017-01-11 14:07:12.541735315 -0500 EST > 3: 1.000226231s 2017-01-11 14:07:13.541964105 -0500 EST > 4: 2.000227623s 2017-01-11 14:07:15.542191833 -0500 EST > 5: 4.000226419s 2017-01-11 14:07:19.542417936 -0500 EST > 6: 8.000232073s 2017-01-11 14:07:27.542649813 -0500 EST > 7: 15.000257032s 2017-01-11 14:07:42.542907276 -0500 EST > 8: 15.000299935s 2017-01-11 14:07:57.543207607 -0500 EST > 9: 15.000226352s 2017-01-11 14:08:12.543433699 -0500 EST > 10: 15.000233635s 2017-01-11 14:08:27.543667311 -0500 EST > > -------------------- > Target machine (Raspberry Pi 3 B) > > pi3% lsb_release -a > No LSB modules are available. > Distributor ID:Raspbian > Description:Raspbian GNU/Linux 8.0 (jessie) > Release:8.0 > Codename:jessie > > pi3% uname -a > Linux art-pi3 4.4.11-v7+ #888 SMP Mon May 23 20:10:33 BST 2016 armv7l > GNU/Linux > > pi3% ./tryit > 1: 250.18908ms 2017-01-11 14:22:36.294351503 -0500 EST > 2: 501.487843ms 2017-01-11 14:22:36.795825492 -0500 EST > 3: 1.000988352s 2017-01-11 14:22:37.796819 -0500 EST > 4: 2.000598851s 2017-01-11 14:22:39.79741155 -0500 EST > 5: 440.832us 2017-01-11 14:22:39.797884724 -0500 EST > 6: 292.394us 2017-01-11 14:22:39.798177848 -0500 EST > 7: 266.196us 2017-01-11 14:22:39.798443888 -0500 EST > 8: 1.935652004s 2017-01-11 14:22:41.734063912 -0500 EST > 9: 458.539us 2017-01-11 14:22:41.734553753 -0500 EST > 10: 267.29us 2017-01-11 14:22:41.734821408 -0500 EST > > */ > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
