Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
資深會員
|
MCU可以產生一定程度內的階梯波,但更重要的是適不適合的問題。
根據過往的經歷,這類的,十個裡面有八個方向錯誤。LZ未交待應用項目,自然也就無從得知。如果祇是針對主題的話,個人認為板主正解!
發表於: 2009/10/27 15:51
|
|||
The Answer to Life, the Universe, and Everything.
|
||||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
基本上 選定 HS crystal ~~ 那是定頻率的晶體 並不可以調頻 頂多只能降頻率 透過前除器 因為C經過很多次的處理 所以效率遠不及Assembly~ 組語的效率 基本上都會高過C 因為那是最貼近晶片的CODE
發表於: 2009/10/27 9:33
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
新會員
|
參照:
首先,應該道歉,我的這篇應當發在8-bit上,寫在16-bit里是弄錯了,pic18f4520是8-bit,先前沒有弄清。 組合語言,也就是彙編語言,我沒有學過,對於一個搞這個的人,在要用的時候應該盡其學,而不應有任何藉口推脫,所以我已經在找英國同學問他們學assembly language的資料了,希望能儘快有所領悟。 對於PIC24,dsPIC,我是不瞭解的。 我的程式要求就是輸出一個從0至31再至0的5-bit周波信號,要盡可能提高無delay的頻率,并在可以達到的範圍內,從輸入端選擇,1,2,4,8khz四種信號輸出。 關於振盪器,據我看到的c18 libraries說明書里是有選擇頻率的,最高可以到25MHz,但是我不知道怎麼調整,目前我選擇的是HS晶振模式,如果選擇HS-PLL可以達到 40MHz。但是如果通過調整振盪器來實現結果,雖然可行,但這樣一來就不能鍛煉programer的編程能力。所以在這裡,最好是能夠通過對code的改進來實現更高效率。
發表於: 2009/10/26 19:41
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
資深會員
|
參照:
換石英振盪器, 振盪器頻率不可調 , 可以換 不會組語那就從頭學 , C 絕對比 組語 慢 三倍以上 , 想要發揮 MCU 的極限 只有組語 你的述求 , PIC24 , dsPIC 應該都能輕鬆達成 你的程式 跟本無認任何輸出 , 你要求的輸出到底是 : 0,1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0,1 ....... OR 0 , 1 , 2 , 4 , 8 , 4 , 2 , 1 , 0 , 1 ......
發表於: 2009/10/26 6:44
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
高級會員
|
因为goto需要耗两个指令.
为了波形不突变,则需要在 incf latd,f decf latd,f 后加两个nop incf latd,f nop nop decf latd,f nop nop 则周期变为10,000,000/(31*2*3)=53763.440860215053763440860215054Hz
發表於: 2009/10/25 9:32
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
高級會員
|
问题简化如下:
在端口d依次依序产生0-31,再30-0. 问如何才能产生最高频率. 10MIPS@pic18.
發表於: 2009/10/25 9:07
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
高級會員
|
for(value=0;value<32;value++)
for(;value>1;value--) 查下汇编后是什么. 这个for要耗时间. 实验下value>0和value>1,汇编后的结果看看是否可以省一个指令吧.
發表於: 2009/10/25 8:55
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
高級會員
|
兄弟,goto loop需要时间.可能会造成你波形的不准确.
可能和我这个帖子有点一样, 可参考: http://bbs.21ic.com/viewthread.php?ti ... hlight=%E6%9E%81%E9%99%90
發表於: 2009/10/25 8:34
|
|||
|
Re: 請教關於code簡化以減少Instruction cycle達到更高效率實現更高頻率的問題
|
||||
---|---|---|---|---|
資深會員
|
main_loop
我實在是太無聊了,居然花了 半小時在算這個 跟據你的想法,我用組語來寫,最快一個period 要640 cycle 10Mhz 一cycle = 0.4us 換算一下是 250us = 4khz 也就是就 c 而言 ,c compiler 已經死而後已~~ 雖然用c 是達不到我上面的時序,每個 loop 都一樣長,但是就效能而言,讓人眼睛一亮。 回到你的問題,加到20mhz ,你的程序了不起到 8khz 要再更快,那就要將 period 縮小 例如你不要每次都 ++ ,直接 +2 ,這樣period 就變成 320cycles 周期立刻變成 8khz ,直接+4 period 變成 16khz 但是取而代之的就是出來的波形問題 有一好沒兩好。 另一種解決方式 找顆簡單點的 dac 另外,最快的頻率實際上是這樣做
loop
10Mhz 可以產出 60khz 就你的程式要求,產出三角波時,基本上mcu 是沒有餘力做中斷或其它的處理,即然是這樣,那你可以直接將code 展開, 反正flash rom 大的很~~
發表於: 2009/10/25 0:36
|
|||
|