新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)開(kāi)發(fā)原則

51單片機(jī)開(kāi)發(fā)原則

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò) 收藏
1.盡可能讓變量使用占用代碼空間最小的變量類(lèi)型。例如無(wú)符號(hào)字符型和位操作(8051作為一款8位處理器提供了位操作支持,而且大多數(shù)操作指令都是8位或者位操作的通常用小的數(shù)據(jù)類(lèi)型去編寫(xiě)代碼其效率更高)

2.盡可能使用無(wú)符號(hào)類(lèi)型數(shù)據(jù)(8051單片機(jī)不直接支持有符號(hào)的數(shù)據(jù)類(lèi)型,有符號(hào)的操作需要額外的指令來(lái)支持,但是無(wú)符號(hào)的數(shù)據(jù)類(lèi)型是直接就能被8051支持的)

本文引用地址:http://butianyuan.cn/article/201612/324111.htm

3.盡可能選擇小的存儲(chǔ)模式即small(絕大多數(shù)的應(yīng)用采用small存儲(chǔ)模式都能滿(mǎn)足,也可以選擇large存儲(chǔ)模式,將一些數(shù)組和結(jié)構(gòu)體存入xdata或者pdata存儲(chǔ)空間的話選擇極大存儲(chǔ)模式,注意的是keilc51實(shí)時(shí)庫(kù)使用的基本指針可以工作在任何存儲(chǔ)模式)

4.當(dāng)應(yīng)用其他存儲(chǔ)模式的時(shí)候盡可能將變量存儲(chǔ)在data區(qū)域內(nèi)(將變量存儲(chǔ)在data空間里,這部分空間單片機(jī)可以直接訪問(wèn),據(jù)有最高的執(zhí)行效率,通常這個(gè)區(qū)域存儲(chǔ)的是最有效率的代碼)本地圖片,請(qǐng)重新上傳

5.要知道如何在你的設(shè)備上使用PDATA存儲(chǔ)模式(pdata提供的256字節(jié)的空間,使用MOVX @Ri指令訪問(wèn)8位地址,pdata存儲(chǔ)空間的使用不同于8051單片機(jī)內(nèi)部的設(shè)備,需要設(shè)置頁(yè)寄存器。Xdata 存儲(chǔ)類(lèi)型是通用的能達(dá)到的最大的存儲(chǔ)空間64kb)

6.盡可能使用內(nèi)存類(lèi)型的指針(默認(rèn)的,keil c51編譯器使用通用指針可以訪問(wèn)任何類(lèi)型的內(nèi)存空間,內(nèi)存型的指針只能訪問(wèn)固定的存儲(chǔ)空間,但是這種方式能夠產(chǎn)生更快更小的程序代碼)

7.減少使用重入函數(shù)(8051系列缺乏對(duì)堆棧變量的支持,重入函數(shù)的實(shí)現(xiàn)通過(guò)keilc51編譯器使用一個(gè)編譯時(shí)間的堆棧對(duì)內(nèi)存范圍內(nèi)的數(shù)據(jù)內(nèi)容的覆蓋實(shí)現(xiàn)的,重入函數(shù)在8051單片機(jī)上模擬出堆棧的結(jié)構(gòu)。由于在嵌入式應(yīng)用很少會(huì)用到重入函數(shù)代碼,但是你在設(shè)計(jì)的過(guò)程中應(yīng)盡可能的少用這種重入屬性)

8.使用LX51 Linker/Locate 和Linker code packing來(lái)減少程序的體積。(LX51 Linker/Locate分析并且優(yōu)化你的整個(gè)程序。代碼將會(huì)在內(nèi)存中重新排列,最大限度的使用2字節(jié)的AJMP和ACALL指令來(lái)代替3字節(jié)的LJMP和LCALL指令。Linker code packing利用通用代碼段生成子程序)

9.盡量保持短的中斷函數(shù)(結(jié)構(gòu)好的的中斷函數(shù)僅僅是執(zhí)行數(shù)據(jù)的獲取或者是計(jì)時(shí),數(shù)據(jù)的處理是在主函數(shù)或者實(shí)時(shí)系統(tǒng)的任務(wù)函數(shù)中完成,這樣可以有效的降低涉及保存/存儲(chǔ)的中斷函數(shù)的調(diào)用)

10.檢查對(duì)于時(shí)鐘周期的需求(代碼訪問(wèn)數(shù)據(jù)需要一定的周期,尤其是在實(shí)時(shí)系統(tǒng)中使用多個(gè)線程或者中斷服務(wù)程序中需要在主函數(shù)中)



評(píng)論


技術(shù)專(zhuān)區(qū)

關(guān)閉