3 軟件設(shè)計(jì)
系統(tǒng)軟件部分由μC/OS-II實(shí)時(shí)嵌入式操作系統(tǒng)及相關(guān)應(yīng)用軟件組成。μC/OS- II實(shí)時(shí)嵌入式操作系統(tǒng)僅僅提供了一個(gè)任務(wù)調(diào)度的實(shí)時(shí)內(nèi)核,因而需要自行開發(fā)一系列與系統(tǒng)運(yùn)行相關(guān)的設(shè)備驅(qū)動(dòng)程序、API函數(shù)及應(yīng)用程序,才能將 μC/OS-II擴(kuò)展為一個(gè)完整、實(shí)用的實(shí)時(shí)操作系統(tǒng)。
3.1 Boot Loader的設(shè)計(jì)
嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序,因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由Boot Loader來完成。Boot Loader是系統(tǒng)加電后運(yùn)行的第一段代碼,負(fù)責(zé)初始化系統(tǒng)并啟動(dòng)操縱系統(tǒng),相當(dāng)于PC機(jī)的程序。Boot Loader初始化硬件設(shè)備,建立內(nèi)存空間的映射圖,為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。
Boot Loader分為階段1和階段2兩個(gè)部分,與CPU核以及存儲(chǔ)設(shè)備密切相關(guān)的處理工作通常都放在階段1中,且可以用匯編語言來實(shí)現(xiàn);而階段2則通常用C語言來實(shí)現(xiàn)一般的流程以及對板級的一些驅(qū)動(dòng)支持。
階段1主要進(jìn)行定義入口、設(shè)置中斷向量、系統(tǒng)寄存器配置、初始化寄存器等操作。而階段2主要完成調(diào)用初始化函數(shù)、初始化閃存設(shè)備、初始化內(nèi)存分配函數(shù)等操作。Boot Loader是嵌入式系統(tǒng)軟件開發(fā)的第一個(gè)環(huán)節(jié),把實(shí)時(shí)操作系統(tǒng)和硬件平臺(tái)緊密地結(jié)合起來,對于嵌入式系統(tǒng)的軟件開發(fā)尤為重要。
3.2 μC/OS-II在S3132440的移植
嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-II是一個(gè)源代碼公開的多任務(wù)實(shí)時(shí)操作系統(tǒng)內(nèi)核,它簡化了應(yīng)用軟件的設(shè)計(jì),使控制系統(tǒng)的實(shí)時(shí)性得到保障。良好的多任務(wù)設(shè)計(jì),有助于提高控制系統(tǒng)的穩(wěn)定性和可靠性。所謂移植,就是通過修改操作系統(tǒng)內(nèi)核與處理器相關(guān)部分的源代碼,使一個(gè)實(shí)時(shí)內(nèi)核能在微處理器或微控制器上運(yùn)行。 μC/OS-II的文件系統(tǒng)結(jié)構(gòu)包括核心代碼部分,配置代碼部分,處理器相關(guān)代碼部分,如圖4所示。其中處理器相關(guān)代碼部分包括 OS_CPU.H,OS_CPU.A.ASM,OS_CPU.C.C 3個(gè)文件。將μC/OS-II移植到S3C2440只需要修改與處理器相關(guān)的代碼即可。
圖4 μC/OS-II的文件系統(tǒng)結(jié)構(gòu)
3.3 系統(tǒng)應(yīng)用程序設(shè)計(jì)
實(shí)時(shí)應(yīng)用程序的設(shè)計(jì)過程包括如何把問題分割為多個(gè)子任務(wù),每個(gè)子任務(wù)都是整個(gè)系統(tǒng)的一部分,都被賦予一定的優(yōu)先級,有自己的一套CPU寄存器和堆??臻g。一個(gè)任務(wù),也叫一個(gè)線程,是一個(gè)簡單的程序,該程序可以認(rèn)為CPU完全只屬于自己。在本設(shè)計(jì)中將任務(wù)劃分為人機(jī)界面的設(shè)計(jì)、數(shù)控指令編譯解釋、伺服單元采集任務(wù)、狀態(tài)監(jiān)視等。μC/OS-II可以按照優(yōu)先級啟動(dòng)各個(gè)任務(wù),并通過內(nèi)核來完成任務(wù)之間的調(diào)度。系統(tǒng)的基本流程如圖5所示。
圖5 用戶程序流程
S3C2440根據(jù)系統(tǒng)的應(yīng)用程序?qū)χ噶钸M(jìn)行解釋,調(diào)用運(yùn)動(dòng)控制函數(shù),繼而PCL6045BL發(fā)出脈沖控制伺服電機(jī)去控制執(zhí)行機(jī)構(gòu)動(dòng)作,實(shí)現(xiàn)運(yùn)動(dòng)控制的結(jié)果。
3.4 NC代碼解釋
運(yùn)動(dòng)控制器接受來自上位機(jī)發(fā)送過來的加工文件,但加工文件指令在程序中不能直接被識(shí)別,在執(zhí)行指令之前必須先對其進(jìn)行解析譯碼。解釋器的主要功能就是將用戶程序以程序段為處理單位,將程序中的輪廓信息、運(yùn)行速度和輔助功能信息,轉(zhuǎn)換成嵌入式運(yùn)動(dòng)控制器能夠執(zhí)行的格式。解釋過程主要包括數(shù)控文件的讀入、詞法分析、語法分析以及加工信息存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)等過程,如圖6所示。
圖6 程序處理流程
4 實(shí)例分析
上位機(jī)通過RS485總線與S3C2440連接,把NC指令文件輸入到ARM 中,經(jīng)過NC代碼解釋器,變成PCL6045BL能夠識(shí)別的代碼,從而完成規(guī)定的運(yùn)動(dòng)控制功能。用NC代碼編寫如下加工程序:
N001 COO X15 Y25//起始點(diǎn)選定
N002 G18//XY平面選擇
N003 G90 G01 X15 Y5//準(zhǔn)備直線插補(bǔ)
N004 X30 Y5//(15,5)到(30,5)
N005 X30 Y15//前行至點(diǎn)(30,15)
N006 X45 Y15//前行至點(diǎn)(45,15)
N007 X45 Y5//前行至點(diǎn)(45,5)
N008 X60 Y5//前行至點(diǎn)(60,5)
N009 X60 Y25//前行至點(diǎn)(60,25)
N010 X15 Y25//回到始點(diǎn)(15,25)
根據(jù)上面所給的代碼可以完成如圖7所示的多點(diǎn)之間直線插補(bǔ)的功能。
圖7 多線段直線插補(bǔ)運(yùn)動(dòng)軌跡
5 結(jié)語
該運(yùn)動(dòng)控制器的硬件結(jié)構(gòu)是基于微處理器S3C2440和PCL6045BL運(yùn)動(dòng)控制芯片設(shè)計(jì)的,它較好地發(fā)揮了ARM處理器的高性能、低成本和運(yùn)動(dòng)控制芯片的高可靠性、開發(fā)周期短的優(yōu)點(diǎn);在控制器硬件平臺(tái)上移植μC/OS-II實(shí)時(shí)操作系統(tǒng)既能使整個(gè)軟件系統(tǒng)結(jié)構(gòu)簡結(jié)、層次清晰,又能很好地達(dá)到運(yùn)動(dòng)控制實(shí)時(shí)性的要求。
評論