如何使用HAL(硬件抽象庫(kù))輕松制作8051項(xiàng)目
用現(xiàn)代HAL簡(jiǎn)化8051固件開(kāi)發(fā)
在探索8051固件開(kāi)發(fā)教程時(shí),我注意到它們中的大多數(shù)都采用了老派的方法。這些資源通常假定在低級(jí)嵌入式系統(tǒng)和硬件特定知識(shí)方面有很強(qiáng)的背景,這使得初學(xué)者或來(lái)自高級(jí)環(huán)境的開(kāi)發(fā)人員很難理解。
為了解決這個(gè)問(wèn)題,我為8051微控制器家族創(chuàng)建了一個(gè)現(xiàn)代和簡(jiǎn)化的固件開(kāi)發(fā)環(huán)境。我的目標(biāo)是在不犧牲性能或靈活性的情況下,使8051固件開(kāi)發(fā)盡可能簡(jiǎn)單和易于訪問(wèn)。這個(gè)環(huán)境包括一個(gè)定制的硬件抽象層(HAL),它簡(jiǎn)化了編碼,并將現(xiàn)代嵌入式開(kāi)發(fā)實(shí)踐帶入了經(jīng)典的8051體系結(jié)構(gòu)。
8051 HAL的主要特性
?易用性:用干凈、可讀的api抽象出特定于硬件的寄存器配置。
?模塊化設(shè)計(jì):允許開(kāi)發(fā)人員只使用他們需要的組件- gpio,定時(shí)器,UART等-用于較小的固件足跡。
?多任務(wù)支持:使用HAL內(nèi)置的簡(jiǎn)單協(xié)作調(diào)度器并行運(yùn)行多個(gè)任務(wù)。這為傳統(tǒng)的單線(xiàn)程微控制器增加了并發(fā)能力。
?跨平臺(tái)工具鏈兼容性:設(shè)計(jì)用于與開(kāi)源的SDCC(小型設(shè)備C編譯器)一起工作,使得使用現(xiàn)代編輯器(如VS Code)構(gòu)建和flash固件變得容易。
?輕便便攜:在設(shè)計(jì)時(shí)考慮到最小的資源使用,適用于受限的8051設(shè)備,如AT89C51, AT89S52及其變體。
如何開(kāi)始?
?安裝sdcc、avrdude和make:供Fedora用戶(hù)使用
?克隆存儲(chǔ)庫(kù):下載本文附帶的存儲(chǔ)庫(kù),或者使用。
?打開(kāi)8051_HAL文件夾:您將發(fā)現(xiàn)如下的目錄結(jié)構(gòu)。
?運(yùn)行。/Create_Prj.sh:在8051_HAL中打開(kāi)Terminal并運(yùn)行
?鍵入項(xiàng)目名稱(chēng):鍵入LED
?在vscode中打開(kāi)項(xiàng)目文件夾,它應(yīng)該是這樣的:
?現(xiàn)在編譯項(xiàng)目:
?要Flash代碼運(yùn)行:(確保USBasp連接到8051和您的計(jì)算機(jī))。
讓LED閃爍
如果你已經(jīng)開(kāi)始了解如何使用像ex GPIO這樣的HAL組件,請(qǐng)進(jìn)入Blinky文件夾并在vscode中打開(kāi)其自述文件。
?README將幫助您理解如何使用組件。
一些例子:
為什么這很重要
盡管8051年代久遠(yuǎn),但它仍然廣泛用于遺留系統(tǒng)、成本敏感型應(yīng)用程序和教育項(xiàng)目。然而,開(kāi)發(fā)工作流程和工具經(jīng)常落后。在這種環(huán)境下:
?初學(xué)者可以編寫(xiě)干凈、結(jié)構(gòu)化的C代碼,而不需要深入的硬件知識(shí)。
?高級(jí)開(kāi)發(fā)人員可以快速創(chuàng)建原型并測(cè)試固件邏輯。
?團(tuán)隊(duì)可以為基于8051的項(xiàng)目標(biāo)準(zhǔn)化他們的開(kāi)發(fā)實(shí)踐。
本文編譯自hackster.io