申同強(qiáng) 宋國志 荊淑霞
摘 要:eBox是一個(gè)運(yùn)行在STM32平臺上的涵蓋了驅(qū)動(dòng)層、系統(tǒng)層、標(biāo)準(zhǔn)應(yīng)用軟件層、用戶軟件層和bootloader的軟硬件一體化的解決方案。豐富的標(biāo)準(zhǔn)驅(qū)動(dòng)和標(biāo)準(zhǔn)應(yīng)用,像用Arduino那樣方便,性能又遠(yuǎn)高于arduino。操作系統(tǒng)的支持讓eBox滿足多任務(wù)系統(tǒng)的需求;標(biāo)準(zhǔn)應(yīng)用提供多種控制算法、通信協(xié)議,滿足不同應(yīng)用場所的需求。
關(guān)鍵詞:STM32;應(yīng)用程序;創(chuàng)新;開發(fā)
1 STM32開發(fā)現(xiàn)狀
就目前的開發(fā)方式而言,國內(nèi)并沒有一套完整的生態(tài)系統(tǒng),來支持用戶的快速開發(fā),影響了企業(yè)開發(fā)的效率。主要原因有以下幾點(diǎn):
①官方固件庫是面向STM32本身設(shè)計(jì)的,接口不夠友好,使用比較困難,用戶必須十分了解STM32本身特性,才能應(yīng)用其固件庫。
②驅(qū)動(dòng)問題:由于設(shè)計(jì)電路板的差異性,會導(dǎo)致同樣的芯片驅(qū)動(dòng)程序無法在不同的電路板上運(yùn)行,需要一個(gè)移植過程,移植非常困難。這樣就導(dǎo)致用戶永遠(yuǎn)無法避免移植的問題。
③缺少標(biāo)準(zhǔn)應(yīng)用程序庫的積累:由于工程師沒有一個(gè)很好的架構(gòu)控制,不能保證其代碼的高重復(fù)利用率,就會導(dǎo)致工程師要不斷的自己去重復(fù)這個(gè)開發(fā)過程。
和Arduino相比雖然硬件資源更豐富,主頻更高,但是軟件發(fā)展卻遠(yuǎn)遠(yuǎn)不如Arduino發(fā)展的快。所以要重新整合STM32的軟硬件資源,將其系統(tǒng)化、結(jié)構(gòu)化。這樣在同一的架構(gòu)下才能保證慢慢的形成一個(gè)較為完備的生態(tài)系統(tǒng)。eBox就是一個(gè)完成這種系統(tǒng)化的軟件支持。
2 eBox軟件系統(tǒng)
2.1 eBox整體架構(gòu)
eBox開發(fā)平臺致力于開創(chuàng)新的開發(fā)模式,簡化用戶開發(fā),增強(qiáng)代碼復(fù)用率,實(shí)現(xiàn)多人協(xié)同聯(lián)合開發(fā)。提供一套完整的開發(fā)解決方案,能適應(yīng)于工業(yè)現(xiàn)場、運(yùn)動(dòng)控制、數(shù)據(jù)采集處理、消費(fèi)類電子產(chǎn)品、物聯(lián)網(wǎng)等不同應(yīng)用場合的開發(fā)。
良好的程序框架有利于多人同時(shí)開發(fā)的分工合作。統(tǒng)一的編程標(biāo)準(zhǔn)便于程序的移植和重復(fù)利用。一個(gè)龐大的工程如果沒有一個(gè)良好的程序結(jié)構(gòu)和統(tǒng)一的編程標(biāo)準(zhǔn),會導(dǎo)致程序耦合關(guān)系混亂、層次不明朗、代碼易讀性差、二次利用率低、難以維護(hù)等缺點(diǎn)。所以eBox軟件系統(tǒng)嚴(yán)格地規(guī)范了架構(gòu),來保證所有代碼能按照其特性進(jìn)行層次區(qū)分。
2.2 面向?qū)ο缶幊?/p>
eBox是基于c/c++編程實(shí)現(xiàn)的。采用c++的幾大優(yōu)勢:
①面向?qū)ο蟮乃悸房梢愿玫亟鉀Q問題。
②封裝性和隱蔽性:可以對一個(gè)對象進(jìn)行封裝處理,把它的一部分屬性和功能對外界屏蔽。這樣做的好處是大大降低了操作對象的復(fù)雜程度。
③抽象性:抽象的過程是將有關(guān)事物的共性歸納、集中的過程。抽象的作用是表示同一類事物的本質(zhì)。在eBox中,這種抽象應(yīng)用最多,最直觀的就是驅(qū)動(dòng)層。將一種外設(shè)芯片抽象出一個(gè)類。這個(gè)類包含了芯片的所有屬性和方法。
2.3 外設(shè)固件庫
外設(shè)固件庫是指STM32內(nèi)部的設(shè)備包括IO、UART、TIMER、SPI、IIC、RTC、FLASH、CAN、USB、WDG等設(shè)備。固件庫將所有外設(shè)以c++的方式重新封裝。為用戶提供人性化的用戶接口。以外設(shè)某種應(yīng)用特性作為初始化參數(shù)。
外設(shè)固件庫除了支持所有MCU外設(shè)功能外,還提供了很多系統(tǒng)功能,方便用戶的使用,比如millis()、micros()服務(wù)為用戶提供了基本的時(shí)間戳服務(wù),delay_ms(),delay_us()提供標(biāo)準(zhǔn)的延時(shí)功能、random()為用戶提供隨機(jī)數(shù)產(chǎn)生的功能,還有很多字符串處理函數(shù)方便了用戶的字符串查找、替換、數(shù)字轉(zhuǎn)換。eBox固件庫為用戶提供了很多標(biāo)準(zhǔn)的常用函數(shù),這樣可以簡化用戶的編程,提高工程師開發(fā)的效率。
2.3.1 串口
2.3.2 使用示例
從以上可以看出使用這種封裝方式可以大大簡化用戶的底層代碼復(fù)雜度。
2.3.3 驅(qū)動(dòng)層
eBox驅(qū)動(dòng)是指基于eBox固件庫針對某種芯片做的讀寫、控制程序它有標(biāo)準(zhǔn)的驅(qū)動(dòng)程序框架做限制,不能任意編寫,在eBox平臺上可以實(shí)現(xiàn)任意合理硬件的兼容性,可移植性。
eBox驅(qū)動(dòng)模式徹解決變傳統(tǒng)STM32編程驅(qū)動(dòng)的移植性差、功能不齊全等問題。讓應(yīng)用工程師和驅(qū)動(dòng)工程師合理分工,加快項(xiàng)目開發(fā)進(jìn)度。驅(qū)動(dòng)可以多次利用,提高代碼使用價(jià)值。開源驅(qū)動(dòng)分享平臺可以為大家提供大量驅(qū)動(dòng)代碼,盡可能的包含更多的芯片驅(qū)動(dòng),方便用戶使用。
2.3.4 驅(qū)動(dòng)層架構(gòu)
2.3.5 按鍵驅(qū)動(dòng)架構(gòu)
驅(qū)動(dòng)層很好地利用了c++類的特性。將非用戶信息進(jìn)行屏蔽,只留出擁護(hù)需要的方法。
2.3.6 驅(qū)動(dòng)使用示例
2.4 標(biāo)準(zhǔn)應(yīng)用層
2.4.1 網(wǎng)絡(luò)通信
eBox的網(wǎng)絡(luò)功能非常簡潔,功能也非常強(qiáng)大,給用戶提供了一套標(biāo)準(zhǔn)的socket接口,除此之外還有TCP、UDP、DNS等網(wǎng)絡(luò)支持,大大方便用戶對網(wǎng)絡(luò)的需求。
2.4.2 文件系統(tǒng)
文件系統(tǒng)是在嵌入式領(lǐng)域中經(jīng)常遇到的一個(gè)問題, eBox將此功能集成起來。留給用戶的只有fatfs的標(biāo)準(zhǔn)接口。如果用戶想在自己的board上使用eBox,只需修改sd的初始化的接口即可。
當(dāng)然標(biāo)準(zhǔn)庫不僅僅包含這兩項(xiàng),還有很多其他的內(nèi)容比如常用數(shù)學(xué)庫、控制算法庫、色彩轉(zhuǎn)換庫等隨著不斷的發(fā)展會有更多的應(yīng)用庫加載進(jìn)來,工程師可根據(jù)自己的需求來選擇不同的庫實(shí)現(xiàn)自己的算法。
3 總結(jié)
eBox是借鑒Arduino的思路來對STM32編程進(jìn)行系統(tǒng)的改造,徹底改變STM32編程的分散化現(xiàn)狀,打造一個(gè)完整的生態(tài)系統(tǒng)。目前eBox可以支持STM32F103全系列MCU。在今后的發(fā)展中會不斷地把eBox移植到其他MCU平臺。例如8051、NXP、飛思卡爾等。再構(gòu)建一個(gè)超級生態(tài)圈,讓應(yīng)用層幾乎不做任何修改就可以實(shí)現(xiàn)跨平臺移植。這是eBox最終發(fā)展的目的。
參考文獻(xiàn):
[1]田軍鋒,林滸,姚壯,李杰.數(shù)控系統(tǒng)S型曲線加減速快速規(guī)劃研究[J].小型微型計(jì)算機(jī)系統(tǒng),2013(01).
[2]于洋,劉平.S型速度曲線進(jìn)給率控制研究[J].制造技術(shù)與機(jī)床,2012(09).