不過, 看著它跑了好一會兒, 咦! 怎麼怪怪的, 明明用亂數取6個字串之一來顯示, 為什麼永遠只出現1,4 二個字串, 一開始不以為意, 時間久了, 就覺得好像有問題, 雖然說ramdom()都會提說這不是真正的亂數, 這點我瞭解, 之前在做寫排隊理論時, 就有為這問題, 另外寫過一個亂數程式, 不過好像跟這問題無關, 明明都是一直不斷電在run, 不存在亂數重覆的問題, 於是試著加 randomSeed() 去修改亂數種子, 但仍沒改善, 再把ramdom() 取值範圍加大, 情況好一些, 但幾個值之後還是開始重覆循環.
最後死心上網找答案, 很快就發現這狀況只會出現在特定的環境下, 原來是compiler的問題, 這真的很詭異, 直正執行程式不是在單晶片上面嗎? 為什麼compile出問題會導至單晶片執行錯誤, 是因為編譯成錯誤的machine code嗎? 在window下安裝了一個新的arduino ide環境, 用同一個範例程式, 編譯上傳, 哇 沒問題了, 真是長見識了, 沒想到問題竟然會出現在這裡, 真是意想不到, 找到一些說明, 主要的原因應該是 avr-gcc 4.3.0 的bug, 換掉這個版本應該就ok了, 不過偷懶把debain的源加上之後, 要更新的部份相當多, 想想就先算了, 明天(4/23) 9.04要發表了, 也許這個版本就會更新了, 這個問題就自然被解決了
lcd4bit控制參考網址:
The 4-bit Arduino LCD library
Arduino控制2x16 LCD (使用LCD4Bit Library)
機器人●夢-Arduino&LCD1602
問題解決參考網址如下:
Help - Random function not working
RE: [avr-libc-dev] bug in rand()/random()/do_rand()/do_random( )
package下載位置:
http://packages.debian.org/
底下是網路上找到解決的方法, 據描述, 應該換掉 binutils-avr, avr-libc, gcc-avr 3個套件應該就ok了
-------------------------------------------------------------------------------------------------------------------------
Ubuntu 8.10 (Intrepid Ibex)
avr-libc 1:1.6.2-1
avr-gcc 1:4.3.0-2
Maintainer: Ubuntu MOTU Developers
Linux main 2.6.27-11-generic #1 SMP Fri Dec 19 16:29:35 UTC 2008 x86_64
GNU/Linux
but when she installs the following files from debian sid, it fixes the
problem:
binutils-avr_2.18-4_amd64.deb
avr-libc_1.6.2.cvs20080610-2_all.deb
gcc-avr_4.3.2-1_amd64.deb
沒有留言:
張貼留言