推 mosquito520:你只說明compiler, 並沒有說明你的chip是甚麼架構 12/07 04:17
→ mosquito520:假設使用8051或8bit的MCU, 你的程式看起來像是從x86 12/07 04:17
→ mosquito520:直接抄過來用, 請試著用8bit的思維去實作這個功能 12/07 04:18
→ mosquito520:中間的變數u運算中用了兩個整數乘法,應該是這裡最占 12/07 04:19
→ mosquito520:時間,但我不熟這個控制方式,所以我沒辦法跟你說 12/07 04:20
→ mosquito520:所以你應該去思考你要如何用8bit去實現這個演算法 12/07 04:20
→ mosquito520:或是取捨,犧牲精度實現功能 12/07 04:21
不是x86上抄的耶...@@ 這是我看著增強型8051的datasheet一行一行寫出來的
這些程式執行時間在11~13ms
我將*18 替換成 <<4 + <<1
*14 替換成 <<3 + <<2 + <<1
但是一點都沒有變快
※ 編輯: deo2000 來自: 140.122.44.137 (12/07 12:14)
推 morewatertw:用Keil模擬沒有這麼慢.把printf去掉再跑看看. 12/07 20:41
謝謝
後來我發現幾乎是printf佔去,其他只有30us,所以把printf留在main,其他放中斷
※ 編輯: deo2000 來自: 140.122.44.137 (12/07 21:35)
推 mosquito520:對不起 我錯了 我沒看到最後一行的printf= = 12/07 22:34
→ mosquito520:另外 如果要在51裡面用printf建議改寫一下 12/07 22:36
→ mosquito520:如果是放中斷 那就不建議放printf 中斷應該越精簡越好 12/07 22:37
謝謝,原本都放在main, 中斷只用來刻10ms的時間刻度讓main poll
推 mosquito520:另外 我提到這個程式像是x86 style, 因為你都是用int 12/07 22:40
→ mosquito520:type做運算...不過變種51夠快 那就沒差(  ̄ c ̄)y▂ξ 12/07 22:41
因為需要夠大的變數, 只好用int
※ 編輯: deo2000 來自: 140.122.43.34 (12/08 15:53)
推 wasidada:請問8051 的 printf 是印到哪阿 = = 12/10 21:08
推 WolfLord:UART 12/11 01:32