在不同時脈下工作的 CPU,例如在 pmode=0 的模式 fpp0(/2) fpp1(/8)
假設 fpp0 的 1T=1us、那麼 fpp1 的 1T=4us…
程式碼A:
fpp0:
delay unknown_cycles
set0 signal
goto fpp0
fpp1:
wait0 signal
set1 signal
goto fpp1
問題:fpp1 在 wait 的時候是每 4us 去檢查一次 signal 或者是每 1us 就會檢查一次(或更即時?) 並且往下跑 ? (這影響到 fpp1 頻率固定的問題)
實際測試結果==>
使用 ICE 單步追蹤的結果是 wiat 指令是按當時 CPU 的指令周期來算的,fppa1每 4us 才會檢查一次signal ~(真正的晶片應該也是?)
於是底下程式碼就有可能變成 fpp1 always waitting。(因為每次去檢查都不巧被設為1)
程式碼B:
fpp0Loop:
set0 signal;
set0 signal;
set1 signal;
goto fpp0Loop;
fpp1Loop:
wait0 signal;
// do something
goto fpp1Loop;
再回頭看原來的程式碼A…
程式碼A的 fpp1 有可能在檢查 signal 之前剛好 signal 被設為 0
也可能在檢查 signal 之後的 3us 之內 signal 才被設為 0,於是有了誤差。
相反的,若是快的 cpu 等慢的 cpu 也會有搶到拍子的情況發生。
結論==>
這應該是屬於 fppa 硬體上的特性,程式設計師自己要小心留意到的一個問題。
2007年7月26日 星期四
訂閱:
張貼留言 (Atom)
更高效處理 micro second 的方式
更高效處理 micro second 的方式… 以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) { HAL_IncTick(); sys_tick += (SysTi...
-
rails blog -d mysql 建立一個名為 blog 的網站app,使用 mysql cd blog 進去 gen 好的網站 config/database.yml 編輯資料庫設定 rake db:create 自動建立資料庫 ruby script/generate ...
-
https://github.com/ljean/modbus-tk/ install pip… sudo apt-get install python-pip install... download modbus_tk-x.x.x.tar.gz tar zxvf...
-
DMX protocol… # 1:break + 1:start + 512:channel python: import serial class DMX512: def __init__(self, port): self.seria...
沒有留言:
張貼留言