作者IOP14759 (iop14759)
看板Electronics
標題[問題] 請問指令週期比if.else小的寫法
時間Wed Nov 22 19:40:33 2017
正在練習一個RGB LED IC
他是用24個BIT控制RGB,每個顏色8個BIT
送完24個BIT後LOW超過10uS就會RESET
我現在用的MCU震盪晶體直接換成20Mhz(無法再大)
但是在寫CODE控制LED的時候面臨到用if.else+CALL副程式下去會接近10uS
https://imgur.com/a/gN1VM
如圖,我寫的簡單的跑馬燈
這樣子寫完去量每個燈之間相距約10uS所以有時候跑馬燈跑一跑會RESET造成燈亂亮
像do.while要先執行一次,感覺不行
然後switch我查書本都是要填字,好像不能直接用變數去讀
當然我也可以寫成
https://imgur.com/a/PCcjo
這樣直接填絕對不會出問題,但是感覺這樣就沒有什麼練習的意義
想請問大大還有什麼寫法嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.158.217
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1511350885.A.4E1.html
1F:推 bxxl: 把副程式改成MACRO試試? 11/22 19:49
2F:→ bxxl: 其實你應該去看翻出來的組合語言,看哪個部份指令/cycle最多 11/22 19:50
3F:→ bxxl: 才能決定要改哪裡 11/22 19:50
4F:推 bxxl: 另感覺程式結構頗奇怪,為什麼亮第n號燈的函數不用給參數n? 11/22 19:59
5F:→ bxxl: 而是用第幾次call他來設計,難道是用global counter嗎? 11/22 20:00
6F:→ bxxl: 可這樣設計並不好 11/22 20:00
7F:→ bxxl: 再來,你可以先把所有的燈都reset一次再去點你要的燈, 11/22 20:02
8F:→ bxxl: 這樣邏輯上或許會簡單一些. 11/22 20:03
9F:推 mentchin: make the common case faster. 11/22 22:02
10F:→ yuleen123: 將 RGB 資料先寫進一個 3*6=18bytes 的緩衝區 11/22 22:56
11F:→ yuleen123: 之後再一次全部送出去 11/22 22:56
12F:→ god145145: i,j是uint8_t嗎? 11/22 23:14
i,j是我開頭會宣告int,我沒有相關基礎,是看書本自己瞎寫的
這個用法參考書本裡的單燈位移來改的,所以很low我也知道qq
※ 編輯: IOP14759 (60.248.158.217), 11/23/2017 09:01:56
13F:推 yudofu: 除非不立刻reset會有問題,否則把該點的燈號都點完,收到r 11/23 09:43
14F:→ yudofu: eset訊號再設定一次LED全黑表示reset,然後再真的reset, 11/23 09:43
15F:→ yudofu: 最後再從頭開始點燈就好了。 11/23 09:43
16F:推 DRQX: 架構重新檢討可能會更好 11/23 15:42