在通用程序設(shè)計(jì)方法中 從面向過(guò)程程序設(shè)計(jì)方法 到面向?qū)ο蟪绦蛟O(shè)計(jì)方法 再到現(xiàn)在的 COM 程序設(shè)計(jì)方法 軟件工程的發(fā)展經(jīng)歷了一個(gè)長(zhǎng)期的過(guò)程 在這個(gè)過(guò)程中 人們追求的一個(gè)重要目標(biāo) 就是希望軟件開(kāi)發(fā)能象汽車(chē)制造那樣 先按照標(biāo)準(zhǔn)制造零件和部件 最后再用這些零件和部件組裝成成品[1]
嵌入式系統(tǒng)是面向應(yīng)用的系統(tǒng) 其硬件環(huán)境具有個(gè)性和多樣性的特點(diǎn) 這要求相應(yīng)的軟件也具有個(gè)性和多樣性的特點(diǎn)[2-3]然而 在不同的硬件環(huán)境中 有許多功能又是共性的 這些共性功能模塊的代碼 只需要經(jīng)過(guò)簡(jiǎn)單修改 便可重用在新系統(tǒng)中 如何利用已開(kāi)發(fā)的共性功能代碼 加速軟件的開(kāi)發(fā) 這正是源碼組裝技術(shù)解決的問(wèn)題
1 源碼組裝思想
在嵌入式應(yīng)用中 使用 c 語(yǔ)言庫(kù) 或者微軟的 MFC 類(lèi)庫(kù) 有時(shí)會(huì)感覺(jué)它產(chǎn)生的目標(biāo)代碼太大 這是因?yàn)闊o(wú)論你用到某個(gè)庫(kù)中的一個(gè)函數(shù) 該庫(kù)的整個(gè)代碼就被全部連接進(jìn)入目標(biāo)程序 造成應(yīng)用程序的冗余代碼較多
顯然 利用包含函數(shù)庫(kù)的方式并不完全能適合嵌入式開(kāi)發(fā)的要求 基于這種情況 作者提出一種既能減輕程序員的負(fù)擔(dān) 又能滿足代碼盡可能少的一種開(kāi)發(fā)方式 即源代碼級(jí)裝配方式
在源代碼級(jí)進(jìn)行裝配 其基本思想是
1 建立一個(gè)由開(kāi)發(fā)工具管理的源代碼庫(kù)函數(shù)使用情況登記表 S_CODE_USED_TAB
2 除 c 語(yǔ)言的基本函數(shù)庫(kù)外 與應(yīng)用程序 或者操作系統(tǒng)相關(guān)的一些功能函數(shù)以匯編語(yǔ)言 或者 c 語(yǔ)言的源代碼的形式存放在源代碼資源庫(kù)中 通過(guò)數(shù)據(jù)庫(kù)方式進(jìn)行管理
3 通過(guò)裝配方式移植并產(chǎn)生該嵌入式操作系統(tǒng)的源代碼 在開(kāi)發(fā)應(yīng)用程序開(kāi)發(fā)過(guò)程中 當(dāng)用到某個(gè)函數(shù)時(shí) 源代碼資源函數(shù)開(kāi)發(fā)工具軟件檢索 S_CODE_USED_TAB 表 看是否已包含該函數(shù)代碼 如果有 則設(shè)置好調(diào)用參數(shù)直接調(diào)用該函數(shù) 否則除了產(chǎn)生調(diào)用代碼外 還需將該源代碼添加到要求生成的應(yīng)用程序源代碼中 并在 S_CODE_USED_TAB 表中添加記錄項(xiàng)
4 本文只是解決生成可重組的源代碼問(wèn)題 重組工具另做研究
2 源碼組件
源碼組裝技術(shù)的第一步就是獲得可用于組裝的源代碼組件 想要獲得功能完整 獨(dú)立 冗余度小的高質(zhì)量源代碼組件[4-5]首先要將整個(gè)軟件系統(tǒng)合理的劃分層次 解耦軟件部件
2.1 嵌入式軟件系統(tǒng)層次劃分
根據(jù)嵌入式軟件的特點(diǎn) 如圖 1 所示 將嵌入式軟件系統(tǒng)自下而上共分為四層 硬件層 基本實(shí)時(shí)內(nèi)核層 操作系統(tǒng)服務(wù)層和用戶(hù)應(yīng)用層 各層之間通過(guò)各層的頭文件進(jìn)行聲明和調(diào)用
硬件層在系統(tǒng)的最下層 用于描述嵌入式系統(tǒng)的硬件資源情況 該層包括兩部分內(nèi)容 處理器資源及板級(jí)資源描述部分和操作系統(tǒng)基本內(nèi)核與硬件相關(guān)部分
處理器資源 如 c8051f020.H 描述了處理器全部特殊寄存器 SFR 的定義 及部分 SFR 的各控制位 如 ES,TRO 等 的定義 板級(jí)資源 hard_layer.H 描述了電路板上的各種信息 如 晶振頻率 各存儲(chǔ)器容量和起止地址 各 I/O 口的類(lèi)型 地址等 這部分信息是在建立項(xiàng)目之初 由開(kāi)發(fā)工具軟件做向?qū)?/span> 由用戶(hù)填寫(xiě) 再將它們定義為符號(hào)常量 供上層使用
操作系統(tǒng)基本內(nèi)核與硬件相關(guān)部分是操作系統(tǒng)與硬件的接口 也就是移植操作系統(tǒng)需要改動(dòng)的部分 以 uc/osII 為例 它包含了 OS_CPU.HOS_CPU_A.ASM 和 OS_CPU_C.C 三個(gè)文件[6]

基本實(shí)時(shí)內(nèi)核層存放操作系統(tǒng)的最基本的四個(gè)功能模塊 內(nèi)核初始化模塊 中斷管理模塊 調(diào)度模塊和任務(wù)管理模塊
操作系統(tǒng)服務(wù)層向用戶(hù)提供各種系統(tǒng)服務(wù) 包括 進(jìn)程通信 內(nèi)存管理 文件系統(tǒng) 網(wǎng)絡(luò)系統(tǒng) 設(shè)備驅(qū)動(dòng)等功能 該層的源碼組件是根據(jù)應(yīng)用需要由用戶(hù)添加的 并且可以在開(kāi)發(fā)中不斷增加 構(gòu)成具有用戶(hù)特色的組件庫(kù)
用戶(hù)應(yīng)用層是由用戶(hù)編寫(xiě)的應(yīng)用軟件 它可以調(diào)用服務(wù)層的 API 完成自身的功能 然后以任務(wù)的形式 掛接到操作系統(tǒng)上 由操作系統(tǒng)調(diào)度運(yùn)行
源碼組件的結(jié)構(gòu)
系統(tǒng)按功能劃分后 為了實(shí)現(xiàn)組裝 源碼組件需要具有一定的結(jié)構(gòu)和接口 從代碼實(shí)現(xiàn)的角度看 源碼組件的基本結(jié)構(gòu)包括 代碼體 數(shù)據(jù)體和聲明體
代碼體是源碼組件的實(shí)現(xiàn)部分 程序中體現(xiàn)為 FUNx.C 文件 其中包含了功能模塊的初始化函數(shù)和各種使用函數(shù) 數(shù)據(jù)體特指組件與組件調(diào)用者共同使用的變量 程序中體現(xiàn)為 FUNx_DEF.C 文件 聲明體是源碼組件對(duì)外部的使用聲明 具體為組件中的數(shù)據(jù)體 各函數(shù)的聲明以及自定義的數(shù)據(jù)結(jié)構(gòu) 程序中體現(xiàn)為 FUNx.H 文件 通過(guò)這些變量 系統(tǒng)和用戶(hù)可對(duì)組件進(jìn)行信息查詢(xún)和通信聲明體和代碼體是源碼組件的必備組成 數(shù)據(jù)體根據(jù)情況不同可能沒(méi)有
源碼組件的組裝
在源代碼塊組裝時(shí) 按照系統(tǒng)軟件層次 從硬件層到應(yīng)用層 分層次組織所有源代碼功能組件 將同一層內(nèi)所有組件的聲明體組合成本層的頭文件 Layern.H 代碼體組合成本層的代碼文件 Layern.C 數(shù)據(jù)體組合成本層的數(shù)據(jù)文件 Layern_Def.C 這樣的組合使得軟件代碼結(jié)構(gòu)清晰 便于閱讀 調(diào)試 修改
基于源碼組裝技術(shù)的嵌入式數(shù)控系統(tǒng)的實(shí)現(xiàn)
嵌入式數(shù)控系統(tǒng)的介紹
本文所用的數(shù)控系統(tǒng)是電火花加工的三軸兩聯(lián)動(dòng)數(shù)控系統(tǒng) 該系統(tǒng)不僅要求具有普通數(shù)控系統(tǒng)的輪廓控制功能 還需要實(shí)時(shí)檢測(cè)工件與刀具間的間隙電壓 并以此控制插補(bǔ)過(guò)程 同時(shí) 還要通過(guò)串行口與上位機(jī)進(jìn)行實(shí)時(shí)通信
系統(tǒng)代碼組織
按照?qǐng)D 1 嵌入式軟件系統(tǒng)的層次劃分 將整個(gè)系統(tǒng)的代碼分四個(gè)層次 用五個(gè)文件夾組裝 下面圖 2 具體給出系統(tǒng)代碼的組裝后的結(jié)構(gòu)
1 Header Files 文件夾 它包含了系統(tǒng)中的所有的頭文件 其中 c8051F020.h是處理器 SFR 的定義 OS_CPU.H 是與操作系統(tǒng)相關(guān)的文件 hard_layer.H 是板級(jí)資源的符號(hào)常量定義 os_core_layer.h os_service_layer.h 和 user_layer.h 是各層所有組件的聲明體的集合 INCLUDES.H 是將其它五個(gè)頭文件匯總的一個(gè)總頭文件 這樣使得在其它 C 語(yǔ)言文件中只需要簡(jiǎn)單的引用一個(gè) INCLUDES.H 文件就可以了
2 OS_ASM Files 文件夾 它包含了 OS_CPU_A.ASM 和 OS_CPU_C.C 與操作系統(tǒng)相關(guān)的兩個(gè)文件 以及 STARTUP.A51 和 INIT.A51 兩個(gè)文件 這兩個(gè)文件在 main 函數(shù)之前調(diào)用的 完成初始化工作
3 OS_CORE Files 文件夾 它包含了五個(gè)文件 OS_CORE_DEF.C 是本層所有組件數(shù)據(jù)體的集合 OS_SCHEDULE.C 用于任務(wù)調(diào)度 OS_TASK.C 用于任務(wù)管理 OS_INIT.C 用于系統(tǒng)初始化 包括操作系統(tǒng)內(nèi)核初始化和 2.2 中提到的功能模塊的初始化 OS_INTERRUPUT.C 用于中斷管理 主要是中斷處理函數(shù)
4 OS_SERVICE Files 文件夾 它包含了使用到的系統(tǒng)服務(wù)的模塊 共五個(gè)文件 OS_SERVICE_DEF.C 是本層所有組件數(shù)據(jù)體的
集合 Device.C 內(nèi)含 A/D 定時(shí)器等設(shè)備的使用函數(shù) Interpolation.C 內(nèi)含插補(bǔ)控制的實(shí)現(xiàn)函數(shù) Serial.C 內(nèi)含串口控制和 SEM.C 內(nèi)含
信號(hào)量處理
5 USER_C FILES 文件夾 它包含了由用戶(hù)編寫(xiě)的用戶(hù)應(yīng)用層的文件 mymain.c 內(nèi)含 main 函數(shù) BandInit.c 內(nèi)含系統(tǒng)上電后的對(duì)硬件自檢程序 該程序在操作系統(tǒng)工作之前運(yùn)行 剩下的是各任務(wù)的任務(wù)函數(shù)
測(cè)試
本軟件按上述結(jié)構(gòu) 在 uVision2 IDE 中組裝 編譯 連接 并下載到自行設(shè)計(jì)的硬件系統(tǒng)中運(yùn)行 經(jīng)測(cè)試 系統(tǒng)運(yùn)行正確 說(shuō)明系統(tǒng)構(gòu)件使用的成功 此體系結(jié)構(gòu)和源碼組件結(jié)構(gòu)具有可行性

結(jié)論
本文將源碼組裝的思想引入到嵌入式軟件的開(kāi)發(fā) 以此為目標(biāo)對(duì)嵌入式軟件進(jìn)行分解 提出了嵌入式軟件四層體系結(jié)構(gòu)硬件層 基本實(shí)時(shí)內(nèi)核層 操作系統(tǒng)服務(wù)層和用戶(hù)應(yīng)用層 并以功能完整 獨(dú)立 冗余度小為原則 將軟件系統(tǒng)分解成多個(gè)源碼組件不同應(yīng)用可以根據(jù)自身需求 對(duì)軟件系統(tǒng)的功能模塊進(jìn)行選擇 減少重復(fù)性的工作 使開(kāi)發(fā)工作簡(jiǎn)單 快速
本文由 伯特利數(shù)控文章 整理發(fā)表,文章來(lái)自網(wǎng)絡(luò)僅參考學(xué)習(xí),本站不承擔(dān)任何法律責(zé)任。
2018-11
0 引言能源是我國(guó)機(jī)械制造業(yè)發(fā)展的必要條件,但數(shù)控加工中心在運(yùn)行的過(guò)程中資源浪費(fèi)情況較為嚴(yán)重,進(jìn)而在這一過(guò)程中,為了能夠降低資源的消耗量,需要對(duì)數(shù)控加工中心進(jìn)行合理優(yōu)化,使工作人員在對(duì)對(duì)數(shù)控加工中心進(jìn)行加工的過(guò)程中,提高工作效率,減少勞動(dòng)量,另外,為了提高數(shù)控加工中心的工作效率,… [了解更多]
2018-10
隨著 數(shù)控 技術(shù)的出現(xiàn),不同形式的數(shù)控加工設(shè)備相繼使用在各個(gè)生產(chǎn)行業(yè),例如,數(shù)控 車(chē)床、加工中心以及數(shù)控 加工中心等,而且目前 數(shù)控 技術(shù)已經(jīng)向智能化方向發(fā)展[1-2]。在這樣的形勢(shì)下,數(shù)控 機(jī)床的設(shè)計(jì)與組裝已經(jīng)成為本科機(jī)電專(zhuān)業(yè)學(xué)生的重要實(shí)踐課程。通過(guò)設(shè)計(jì)與組裝,學(xué)生不僅可以掌握… [了解更多]
2018-10
隨著制造業(yè)的不斷發(fā)展,數(shù)控加工中心在制造領(lǐng)域中發(fā)揮著重要 的作用。夾具在數(shù)控加工中心加工過(guò)程中,一方面是對(duì)待加工零件進(jìn) 行夾緊,防止其在加工過(guò)程中移位;另一方面是對(duì)零件起到定位 作用。尤其是在加工特殊零件時(shí),合適的夾具可以更好的保證加 工精度,使加工過(guò)程更為流暢、高效,也能夠有效… [了解更多]
2018-10
1 以銑代鉆加工孔的重要意義在傳統(tǒng)的孔加工中,一般的孔加工方法是鉆中心孔—鉆孔—擴(kuò)孔(鉸孔)—鏜孔等方式才可滿足孔的加工要求,對(duì)于在數(shù)控加工中心上的多孔加工,這種孔的加工方式勢(shì)必會(huì)降低加工效率,加大勞動(dòng)強(qiáng)度,提高加工成本,除此之外,由于鉆頭剛性差,扭矩和軸向力等方面的問(wèn)題, 在加… [了解更多]