freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm的嵌入式數(shù)控車床控制系統(tǒng)的開發(fā)(參考版)

2025-07-01 00:04本頁面
  

【正文】 調(diào)用系統(tǒng)實(shí)現(xiàn)的OSTimeTick函數(shù),如果有等待時鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調(diào)度其執(zhí)行。 OSTickISR()函數(shù)的編寫OSTickISR()是系統(tǒng)時鐘節(jié)拍中斷服務(wù)函數(shù)。在時鐘中斷ISR(中斷服務(wù)例程)中發(fā)現(xiàn)有高優(yōu)先級任務(wù)等待的時鐘信號到來,則在中斷退出后并不返回被中斷任務(wù),而是直接調(diào)度就緒的高優(yōu)先級任務(wù)執(zhí)行,從而能夠盡快地讓高優(yōu)先級的任務(wù)得到響應(yīng),保證系統(tǒng)的實(shí)時性能。這樣就完成了一次任務(wù)切換。 OSCtxSw函數(shù)的編寫OSCtxSw是任務(wù)級的任務(wù)切換函數(shù),當(dāng)任務(wù)因?yàn)楸蛔枞鲃诱埱驝PU調(diào)度時被執(zhí)行,由于此時的任務(wù)切換在非異常模式下進(jìn)行,因此區(qū)別于中斷級別的任務(wù)切換。OSStartHighRdy函數(shù)具體實(shí)現(xiàn)代碼如下:OSStartHighRdy BL OSTaskSwHooK //調(diào)用用戶定義的OSTaskSWHook LDR  R0, =OSRunning //通知μC/OS已經(jīng)啟動多任務(wù) MOV R1,1 STRB R1,[R0] LDR R1,=OSTCBHighRdy //得到將要運(yùn)行任務(wù)的堆棧指針 //SP=OSTCBHighRdyOSTCBStkPTR LDR R1, [R1] B OSCtxSw_10需要說明的是,μC /OSⅡ?yàn)榱藞?zhí)行簡單,堆棧指針總是存儲在任務(wù)控制塊OS_TCB的開頭。在OSStart()多任務(wù)啟動后,OSStartHighRdy函數(shù)負(fù)責(zé)從最高優(yōu)先級任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針SP,,通過SP依次將CPU現(xiàn)場恢復(fù),這時系統(tǒng)就將控制權(quán)交給用戶創(chuàng)建的該任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級的任務(wù)搶占CPU。這幾個函數(shù)也可以用嵌入式C語言來完成。 //關(guān)中斷計(jì)數(shù)器OsEnterSum Return(stk)?!?/r0,第一個參數(shù)是用r0傳遞 *stk=(USER_USING_MODE|0x00)?!?/r2 *stk=0。 //r4 *stk=0?!?/r6 *stk=0?!?/r8 *stk=0?!?/r10 *stk=0?!?/r12 *stk=0?!?/pc *stk=(OS_STK)task?!?/避免編譯警告 stk=ptos。OSTaskStkInit()具體實(shí)現(xiàn)代碼如下:Os_STK *OSTaskStkInit(viod(*task)(void *pd),void*pdata,OS_STK *ptos,INT16U opt){ OS_STK *stk。 任務(wù)堆棧結(jié)構(gòu)其中OsEnterSum不是CPU的寄存器,而是為了保存關(guān)中斷的次數(shù)而設(shè)的全局變量。OSTaskStkInit():在編寫該函數(shù)之前,必須先確定任務(wù)的堆棧結(jié)構(gòu)。 μC/OSⅡ的移植要求用戶編寫10個簡單的C函數(shù):OSTaskStkInit(),OSInitHookBegin(),OSInitHookEnd(),OSTaskCreateHook(),OSTaskDelHook(),OSTaskSwHook(),OSTaskStatHook(),OSTCBIinitHook(),OSTimeATickHook(),OSTaskIdleHook()。OS_TASK_SW()只會簡單的調(diào)用OSCtxSw()而不是將向量指向OSCtxSw()。OS_TASK_SW()的實(shí)現(xiàn)可以通過兩種途徑:其一,用OS_TASK_SW()模擬中斷,并且中斷向量地址必須指向匯編語言函數(shù)OSCtxSw(),當(dāng)任務(wù)切換時,通過執(zhí)行OS_TASK_SW()來產(chǎn)生中斷,終端服務(wù)子程序OSCtxSw()實(shí)現(xiàn)任務(wù)的切換;其二,用于特定的不提供軟件中斷機(jī)制的處理器。define OS_STK_GROWTH 1 OS_TASK_SW()函數(shù)的編寫OS_TASK_SW()是一個宏,它是μC /OSⅡ從低優(yōu)先級任務(wù)切換到高優(yōu)先級時被調(diào)用的,OS_TASK_SW()總是在任務(wù)級代碼中被調(diào)用。具體實(shí)現(xiàn)代碼如下:OS_ENTER_CRITACAL(關(guān)中斷) STMFD SP!, {R0,LR} MRS R0, CPSR ORR R0, R0,(17) MSR CPSR_c, R0 LDR R0, =OsEnterSum LDR R1, [R0] ADD R1, R1,1 STR R1, [R0] LDMFD SP!, {R0,PC}OS_EXIT_CRITICAL(開中斷)  LDR R0, =OsEnterSum LDR R1, [R0] SUBS R1, R1,1 STR R1, [R0] MRS R0, CPSR BICEQ R0, R0,(17) MSREQ CPSR_c, R0 LDMFD SP!, {R0R1,PC} OS_STK_GROWTH的編寫OS_STK_GROWTH用來定義堆棧的生長方式,置OS_STK_GROWTH為0表示堆棧從下向上生長,為1表示堆棧從上向下生長。μC /OSⅡ定義了兩個宏來禁止和允許中斷。 OS_ENTER_CRITICAL()和OS_EXIT_CREITICAL()的編寫與所有的實(shí)時內(nèi)核一樣,μC /OSⅡ需要先禁止中斷在訪問代碼的臨界段,并且在訪問完畢后重新允許中斷。typedef double FP64。typedef signed int INT32S。typedef signed short INT16S。typedef singed char INT8S。而且不同的編譯器會使用不同的字節(jié)長度表示同一數(shù)據(jù)類型,相關(guān)的數(shù)據(jù)類型的定義如下:typedef unsigned char BOOLEAN。 define語句定義的、與處理器相關(guān)的常數(shù)、宏以及類型。Ⅱ軟、硬件體系結(jié)構(gòu)圖,ARM7系列的LPC2220微處理器完全滿足上述移植條件[32]。(4)處理器支持能夠容納一定量數(shù)據(jù)(可能是幾千字節(jié))的硬件堆棧。(2)用C語言就可以打開和關(guān)閉中斷。 中斷服務(wù)子程序流程圖 μC/OSⅡ在LPC2220上的移植μC/OSⅡ是個代碼完全公開的實(shí)時嵌入式操作系統(tǒng),源代碼絕大部分用ANSIC語言編寫,只有少數(shù)與CPU相關(guān)的部分代碼才使用匯編語言編寫,這是因?yàn)棣藽/OSⅡ在讀寫處理器寄存器時只能通過匯編語言來實(shí)現(xiàn)。μC/OSⅡ系統(tǒng)允許中斷嵌套,即高優(yōu)先級別的中斷源的中斷請求可以中斷低優(yōu)先級別的中斷服務(wù)程序的運(yùn)行。μC/OSⅡ通過兩條特殊指令:關(guān)中斷(OS_ENTER_CRITICAL)和開中斷 (OS_EXIT_CRITICAL),可以讓微處理器不響應(yīng)或能夠響應(yīng)中斷。中斷一旦被識別,CPU保存部分或全部現(xiàn)場,即部分或全部寄存器的值,然后跳轉(zhuǎn)到專門的子程序,稱為中斷服務(wù)子程序。 μC/OSⅡ的中斷機(jī)制為了保證操作系統(tǒng)的實(shí)時性,對異步事件(如異常情況及運(yùn)行結(jié)果)要立刻處理,就需要引入中斷機(jī)制。消息郵箱也可以當(dāng)作只取兩個值的信號量來用。如果郵箱內(nèi)有消息,就接受這則消息。(2)將消息放入郵箱(POST)。消息放入郵箱后,或者是把消息傳給等待消息的任務(wù)表中優(yōu)先級最高的那個任務(wù)(基于優(yōu)先級),或者是將消息傳給最先開始等待消息的任務(wù)(基于先進(jìn)先出)。每個郵箱有相應(yīng)的正在等待消息的任務(wù)列表,要得到消息的任務(wù)會因?yàn)猷]箱是空的而被掛起,且被記錄到等待消息的任務(wù)表中,直到收到消息。同樣,一個或多個任務(wù)可以通過內(nèi)核服務(wù)接收這則消息。μC/OSⅡ提供了7個對郵箱操作的函數(shù)OSMboxCreate(),OSMboxDel(),OSMboxPend(),OSMboxPost(),OSMboxAccept(),OSMboxQuery(),OSMboxPostOpt()。OSSemQuery():查詢一個信號量的當(dāng)前狀態(tài),得到當(dāng)前該信號量的等待任務(wù)列表和信號量當(dāng)前計(jì)數(shù)值。OSSemAccept():無等待地請求一個信號量。OSSemPost():發(fā)出一個信號量。OSSemPend()允許用戶定義一個最長等待時間作為它的參數(shù)(超時時限),這樣可以避免該任務(wù)無期限地等待信號量。OSSemPend():等待一個信號量。該函數(shù)代碼才被編譯。使用信號量之前先要建立該信號量,通過用該函數(shù)來建立信號量,并賦初值。μC/OSⅡ提供了6個對信號量進(jìn)行操作的函數(shù)OSSemCreate(),OSSemDEL(),OSSemPend(),OSSemPost(),OSsemAccept(),OSSemQuery()。 信號量μC/OSⅡ中信號量有兩部分組成:一部分是16位無符號整型(0~65535)信號量的計(jì)數(shù)值;另一部分是由等待該信號量的任務(wù)組成的等待任務(wù)表。 μC/OSⅡ的任務(wù)間通訊和同步為實(shí)現(xiàn)各個任務(wù)之間的通信以及數(shù)據(jù)共享,μC/OSⅡ提供了三種方法:信號量、郵箱和消息隊(duì)列。(4)恢復(fù)任務(wù)堆棧中的值到寄存器中。(2)寄存器值壓入當(dāng)前任務(wù)堆棧。μC/OSⅡ任務(wù)調(diào)度所花的時間是常數(shù),與應(yīng)用程序中建立的任務(wù)數(shù)無關(guān)。調(diào)度工作的內(nèi)容可以分為兩部分:最高優(yōu)任務(wù)的尋找和任務(wù)切換。任務(wù)調(diào)度包括任務(wù)級的任務(wù)調(diào)度和中斷級的任務(wù)調(diào)度,所采用的調(diào)度算法是相同的。任務(wù)調(diào)度是實(shí)時內(nèi)核最重要的工作之一。等待狀態(tài):正在運(yùn)行的任務(wù)需要等待一段時間或需要等待一個事件發(fā)生再運(yùn)行時,該任務(wù)就會把CPU的使用權(quán)讓給其他任務(wù)而進(jìn)入等持狀態(tài)。就緒狀態(tài):系統(tǒng)為任務(wù)分配了任務(wù)控制塊且在任務(wù)就緒表中進(jìn)行了就緒登記,任務(wù)具備了運(yùn)行的充分條件。[31]。每個任務(wù)必須有不同的任務(wù)優(yōu)先級。但可以自我刪除,也可以被更高優(yōu)先級的任務(wù)所占先。每個任務(wù)就是整個應(yīng)用的某一部分,整個任務(wù)被賦予一定的優(yōu)先級,有它自己的一套CPU寄存器和??臻g。 μC/OSⅡ的工作原理μC/OSⅡ是一個典型的微內(nèi)核實(shí)時操作系統(tǒng),為嵌入式系統(tǒng)提供任務(wù)調(diào)度、任務(wù)管理、時間管理和任務(wù)間的通信等??梢钥闯靓藽/OSⅡ的這些特點(diǎn)都是與實(shí)時性密切相關(guān)的,我們進(jìn)行數(shù)控系統(tǒng)設(shè)計(jì)最核心的原則就是最大限度的保證實(shí)時響應(yīng)的時間,并且對軟件結(jié)構(gòu)和驅(qū)動結(jié)構(gòu)上進(jìn)行優(yōu)化,以實(shí)現(xiàn)最優(yōu)的控制,最大限度的提高機(jī)床加工精度。(5)可裁剪的微內(nèi)核結(jié)構(gòu),高效的多任務(wù)優(yōu)先級管理,us級的中斷處理,更加有利于工業(yè)控制效率的提高。(4)μC/OSⅡ和我們所知道的Window等分時操作系統(tǒng)不同,目前它不支持時間片輪法,它是一個基于優(yōu)先級的實(shí)時操作系統(tǒng)。(3) μC/OSⅡ是一個可剝奪型的內(nèi)核,即己經(jīng)準(zhǔn)備就緒的高優(yōu)先級任務(wù)可以剝奪在運(yùn)行的低優(yōu)先級任務(wù)的CPU使用權(quán)。與微處理器硬件相關(guān)的那部分是用匯編寫的,已經(jīng)壓縮到最低限度,使得μC/OSⅡ便于移植到其他微處理器上。這樣使系統(tǒng)變得透明,容易使用和擴(kuò)展。在嵌入式系統(tǒng)領(lǐng)域,有很多著名的實(shí)時操作系統(tǒng),如RTLinux、WindowsCE和VxWorks等,其中μC/OSⅡ是源代碼公開的嵌入式實(shí)時操作系統(tǒng),源代碼大部分用ANSIC語言編寫,由于內(nèi)核代碼非常小、可移植性、可固化、可裁減、搶占式、以及穩(wěn)定性與可靠性等特點(diǎn),特別適用于車床數(shù)控系統(tǒng)的開發(fā)。容易移植和良好的開發(fā)手段支持。任務(wù)的切換時間應(yīng)與系統(tǒng)中的任務(wù)數(shù)無關(guān)。一般情況下,實(shí)時操作系統(tǒng)應(yīng)包含以下功能:異步事件的響應(yīng)、切換時間和中斷延遲時間的確定、優(yōu)先級中斷和調(diào)度、搶占式調(diào)度、和提供同步與協(xié)調(diào)共享數(shù)據(jù)使用時間執(zhí)行的手段。但是在20世紀(jì)80年代后期,隨著微內(nèi)核(Microkernel)思想的提出,即將傳統(tǒng)操作系統(tǒng)中的許多共性的東西抽象出來,構(gòu)成操作系統(tǒng)的公共基礎(chǔ),即微內(nèi)核。實(shí)時系統(tǒng)的及時性是以被控對象所要求的開始、截止時間或完成時間來確定的,一般為微秒級。目前,嵌入式系統(tǒng)的應(yīng)用可謂無處不在,從工控生產(chǎn)現(xiàn)場、智能建筑、飛機(jī)、船舶、機(jī)器人、汽車,到保健設(shè)備、醫(yī)療設(shè)備、移動電話、家用電器、視聽設(shè)備等方面,都有嵌入式系統(tǒng)的應(yīng)用。嵌入式系統(tǒng)(Embedded system)是一個軟硬件可剪裁,適應(yīng)對功能、可靠性、功耗、體積、成本要求嚴(yán)格的計(jì)算機(jī)系統(tǒng)。并且,由于系統(tǒng)前臺高度耦合,導(dǎo)致系統(tǒng)在修改、維護(hù)和升級都比較困難,系統(tǒng)的可擴(kuò)充性差。傳統(tǒng)的數(shù)控系統(tǒng)通常采用前后臺的體系結(jié)構(gòu),前臺是通過無限循環(huán)不斷查詢?nèi)蝿?wù)標(biāo)志量,通過中斷來激活后臺任務(wù)。如何選擇一個合適的軟件開發(fā)平臺對開發(fā)人員來說是一個非常關(guān)鍵的問題,可能直接影響到嵌入式數(shù)控系統(tǒng)軟件開發(fā)的效率、健壯性和可維護(hù)性等。首先簡介了ARM系列的LPC2220處理器及其功能接口;然后對ARM的外圍電路進(jìn)行了設(shè)計(jì),主要涉及到電源、時鐘、復(fù)位電路設(shè)計(jì);針對本系統(tǒng)的需求,擴(kuò)展了外部儲存器,與CPLD接口,人機(jī)界面和串口通信等功能模塊。SP3232E是MAX232的改進(jìn)型,更低功耗,[27]。因此在設(shè)計(jì)電路將5V邏輯與一個RS232端口連接時需要電平轉(zhuǎn)換。RS232采用負(fù)邏輯,在帶3~7負(fù)載時驅(qū)動器的輸出電平為,邏輯“1”:15V~3V;邏輯“O”:+3V~+15V。(2)RD將數(shù)據(jù)從DCE傳輸?shù)紻TE,也稱作RX,RXD。本系統(tǒng)串行通信接口選用了最常用的9針RS232接口[26]。那些附加的信號線是用于與同步調(diào)制解調(diào)器一起使用,第二傳輸通道和在雙重速率調(diào)制解調(diào)器上選擇傳輸速度時使用。RS232標(biāo)準(zhǔn)在接口中制定了25條線,而在實(shí)際應(yīng)用中很多設(shè)備一般只用到了其中9條線。將“串行發(fā)送”和“串行接收”交叉連接,地線直接相連,通信的“握手”、空閑檢測等功能用軟件來實(shí)現(xiàn)。 RS232串行通信電路本系統(tǒng)采用RS232串口通信,來實(shí)現(xiàn)上位機(jī)和數(shù)控系統(tǒng)的數(shù)控NC文件的傳輸。液晶模塊的片選信號由LPC2220的CSA2A22和A21進(jìn)行地址譯碼得到。在系統(tǒng)中,CA320240B液晶模塊與LPC2220的連接采用總線方式,該模塊沒有地址總線,顯示地址和顯示數(shù)據(jù)均通過DB0DB7接口實(shí)現(xiàn)。SED13305可管理64KRAM作為顯示緩沖區(qū)并可允許微處理器(MPU)隨時訪問顯示緩沖區(qū)。它能與多種微處理器直接接口,可以圖形方式、字符方式及圖形和字符合成方式進(jìn)行顯示,還可以實(shí)現(xiàn)字符方式下的特征顯示,可執(zhí)行CAD那樣
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1