如果已經(jīng)有了針對某MCU的C實現(xiàn)的某個算法,保持框架不變,對核心的部分用匯編優(yōu)化,請問有沒有一些比較通用的原則?有這些方面介紹的書么?
1.每個人的編程都有自己的風格與習慣,如果你要利用別人的程序,在其中修修改改,如果它的程序并沒有很好的模塊化的話,建議你最好不要這么做,否則你本來預(yù)期達到事倍功半,說不定反而事半功倍了。要參考他人的程序當然可以,但是首要是你要看懂并理解他人程序的算法精髓,而不是在他的基礎(chǔ)上打補丁。而關(guān)于算法方面的優(yōu)化,你可以購買一些數(shù)據(jù)結(jié)構(gòu)的書籍,上面有比較詳細的說明。
2.算法的運行時間是指一個算法在計算機上運算所花費的時間。它大致等于計算機執(zhí)行簡單操作(如賦值操作,比較操作等)所需要的時間與算法中進行簡單操作次數(shù)的乘積。通常把算法中包含簡單操作次數(shù)的多少叫做算法的時間復(fù)雜性。它是一個算法運行時間的相對量度,一般用數(shù)量級的形式給出。度量一個程序的執(zhí)行時間通常有兩種方法:
一種是事后統(tǒng)計的方法。因為很多計算機內(nèi)部都有計時功能,不同算法的程序可通過一組或若干組相同的統(tǒng)計數(shù)據(jù)以分辨優(yōu)劣。但這種方法有兩個缺陷:一是必須先運行依據(jù)算法編制的程序;二是所得時間的統(tǒng)計量依賴于計算機的硬件、軟件等環(huán)境因素,有時容易掩蓋算法本身的優(yōu)劣。因此人們常常采用另一種事前分析估算的方法。
事前分析估算的方法。一個程序在計算機上運行時所消耗的時間取決于下列因素:
① 依據(jù)的算法選用何種策略;
② 問題的規(guī)模。例如求100 以內(nèi)還是1000 以內(nèi)的素數(shù);
③ 書寫程序的語言。對于同一個算法,實現(xiàn)語言的級別越高,執(zhí)行效率就越低;
④ 編譯程序所產(chǎn)生的機器代碼的質(zhì)量。這個跟你的編譯器有關(guān);
⑤ 機器執(zhí)行指令的速度。
顯然,同一個算法用不同的語言實現(xiàn),或者用不同的編譯程序進行編譯,或者在不同的計算機上運行時,效率均不相同。這表明使用絕對的時間單位衡量算法的效率是不合適的。撇開這些與計算機硬件、軟件有關(guān)的因素,可以認為一個特定算法“運行工作量”的大小,只依賴于問題的規(guī)模(通常用整數(shù)量n 表示),或者說,它是問題規(guī)模的函數(shù)。
一個算法是由控制結(jié)構(gòu)(順序、分支和循環(huán)三種)和原操作(指固有數(shù)據(jù)類型的操作)構(gòu)成的,則算法時間取決于兩者的綜合效果。為了便于比較同一問題的不同算法,通常的做法是,從算法中選取一種對于所研究的問題(或算法類型)來說是基本運算的原操作,以該基本操作重復(fù)執(zhí)行的次數(shù)作為算法的時間度量。
了解更多單片機應(yīng)用編程技巧,請見以下鏈接http://www.holtek.com.cn/referanc/htk_book.htm