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

正文內(nèi)容

單井筒煤炭產(chǎn)量監(jiān)控系統(tǒng)的總體-浙江大學(xué)畢業(yè)論文(已改無錯(cuò)字)

2022-07-25 13:03:31 本頁面
  

【正文】 //等待轉(zhuǎn)換完成{if(ADDRamp。0x80000000)//判斷轉(zhuǎn)換完成 {for(i=4。i0。i)DataU[i]=Data[0][i1]。 //存5次樣值 DataU[0]=ADDR。 //取數(shù)據(jù) DataU[0]=(DataU[0]。6)amp。Ox3FF。 //取轉(zhuǎn)換后有效值 DataU[0]=DataU[0]*3300/1024。 sum[0]+=DataU[0] *DataU[0]。 break。 //結(jié)束本通道采樣 }}另一路的數(shù)據(jù)采集程序和上面程序一樣,只需改變通道選擇,選擇通道1即可。 控制器的軟件設(shè)計(jì)為使μC/OS II可以正常工作,微處理器必須滿足下面的條件。 ● 處理器的C編譯器能產(chǎn)生可重入代碼。 ● 在程序中可以打開或關(guān)閉中斷。 ● 處理器支持中斷,并能產(chǎn)生定時(shí)中斷(通常在為101000HZ)。● 處理器支持能夠容納一定量數(shù)據(jù)的硬件堆棧?!? 處理器有將堆棧指針和其他CPU寄存器讀寫到堆棧(或者內(nèi)存)的指令。圖44 μC/OSII硬件和軟件體系結(jié)構(gòu)為了方便移植,大部分的,μC/OS II代碼是用C語言寫的,但仍需要用C和匯編語言寫一些與處理器相關(guān)的代碼,如圖44,這是因?yàn)棣藽/OS II在讀寫處理器寄存器的時(shí)候只能通過匯編語言來實(shí)現(xiàn)。μC/OS II的移植主要集中在3個(gè)文件:OS_CPU. H, OS_CPU_A. ASM, OS_CPU_C. C 。 下面具體介紹移植的注意事項(xiàng)及具體實(shí)現(xiàn)過程。 目前,適用于ARM處理器核的C編譯器有很多種,比較常用的有SDT, ADS和GCC(用linux開發(fā)比較簡單,但只有ARM9才能運(yùn)行l(wèi)inux, ARM7可以運(yùn)行uclinux)。SDT和ADS是ARM公司自己開發(fā)的,其中ADS是SDT的升級版,而且以后ARM公司不再支持SDT,所以最好采用ADS編譯器。 2. CPU. H的編寫OS_CPU. H主要包括了用define定義的與處理器相關(guān)的常量、宏和類型定義。 (1)與編譯器相關(guān)的數(shù)據(jù)類型 μC/OS II不使用C語言中的short, int, long等與處理器類型有關(guān)的數(shù)據(jù)類型而代之以移植性強(qiáng)的整數(shù)數(shù)據(jù)類型,這樣既直觀又便于移植,不過這樣就成了必須移植的代碼。根ADS編譯器的特性,在文件OS_CPU. H中這些數(shù)據(jù)類型的定義如下:Typedef unsigned char BOOLEAN /*布爾變量*/Typedef unsigned char INT8U /*無符號(hào)8位整型變量*/Typedef signed char INT8S /*有符號(hào)8位整型變量*/Typedef unsigned short INT16U /*無符號(hào)16位整型變量*/Typedef signed short INT16S /*有符號(hào)16位整型變量*/Typedef unsigned int INT32U /*無符號(hào)32位整型變量*/Typedef signed int INT32S /*有符號(hào)32位整型變量*/Typedef float FP32 /*單精度浮點(diǎn)數(shù)(32位長度)*/Typedef double FP64 /*雙精度浮點(diǎn)數(shù)(64位長度)*/Typedef INT32U OS_ STK /*堆棧是32位寬度*/ (2)利用軟件中斷實(shí)現(xiàn)底層接口 由于ARM7處理器核允許用戶任務(wù)使用兩種不同的處理器模式:用戶模式和系統(tǒng)模式,而且在不同的模式下應(yīng)用程序使用系統(tǒng)資源時(shí)是具有不同的訪問控制權(quán)限的。 怎樣在不同的ARM工作模式下調(diào)用μC/OS II底層接口函數(shù)而不受訪問權(quán)限的限制,就是在移植時(shí)必須考慮的一個(gè)問題。解決這個(gè)問題的方法之一就是使用ARM7的軟中斷SWIoP C/OS II中須用軟中斷實(shí)現(xiàn)的函數(shù)及其軟中斷功能號(hào)如下:__swi(Ox00) void OSwe TASK_SW(void)。 /*任務(wù)級任務(wù)切換函數(shù)*/__swi(Ox01) void OSStartHighRdy(void)。 /*運(yùn)行優(yōu)先級最高的任務(wù)*/__swi(Ox02) void OS_ENTER_CRITICAL(void)。 /*關(guān)中斷*/__swi(Ox03) void OS EXI_ CRITICAL(void)。 /*開中斷*/__swi(Ox80) void ChangeToSYSMode(void)。 /*任務(wù)切換到系統(tǒng)模式*/__swi(Ox81) void ChangeToUSRMode(void)。 /*任務(wù)切換到用戶模式*/__swi(Ox82) void TaskIsARM(INTSUprio)。 /*任務(wù)代碼是ARM代碼*/__swi(Ox83) void TaskIsTHUMB(INTSUprio)。 /*任務(wù)代碼是THUMB代碼*/ (3)堆棧的生長方式(05_TASK_GRowTH) 雖然ARM處理器對堆棧向上及向下的兩種增長方式都給予了支持,但于由于編譯器ADS僅支持堆棧從上往下長,并且必須是滿遞減堆棧,所以在文件中用來定義堆棧增長方式的常量O5_ TASK_GROWTH的值應(yīng)該為1。即 defme OS_STK_GROWTH 1 /*堆棧是從上往下長的*/ 3. OS_CPU_C. C的編寫 μC/OS II給每個(gè)任務(wù)都分配一個(gè)單獨(dú)的任務(wù)堆棧,用來記錄當(dāng)前任務(wù)信息、被中斷時(shí)的狀態(tài)和臨時(shí)變量等等。OS_CPU_C. C包括任務(wù)堆棧初始化函數(shù)OSTaskStkInit()、軟中斷異常處理程序SWI Exception()及最高優(yōu)先級就緒任務(wù)函數(shù)OS StartHighRdy() 。圖45 任務(wù)堆棧結(jié)構(gòu) (1)任務(wù)堆棧初始化函數(shù)OSTaskStkInit()OSTaskStkInit()是用戶建立任務(wù)時(shí)系統(tǒng)內(nèi)部自己調(diào)用的,作用是對用戶任務(wù)堆棧進(jìn)行初始化。在ARM7TDMI體系結(jié)構(gòu)下,任務(wù)堆棧空間由高至低依次保存著PC, LR, RI2, Rll,……、RI, RO, CPSR, SPSR,如圖45所示。一旦用戶初始化了堆棧,OSTaskStkInit()就返回堆棧指針?biāo)傅牡刂?。OSTaskCreate()和OSTaskCreateExt()獲得該地址并將它保存到任務(wù)控制塊((OS_TCB)中。(2)軟件中斷服務(wù)程序的C語言部分這部分程序采用了一個(gè)switch語句把軟件功能號(hào)為0x02, 0x03, 0x80, Ox81, 0x82,0x83的六個(gè)功能塊OS_ENTER_CRITICAL(),OS_EXIT_CRITICALQ,ChangeToSYSMode()、ChangeToUSRMode()、TaskIsARM()、TaskIsTHUMB()組織到一個(gè)和總段服務(wù)程序SWI_Exception()中去。上面所說的六個(gè)功能采用了在C程序中內(nèi)嵌匯編指令的方法來實(shí)現(xiàn)。在ADS的C語言程序中使用內(nèi)嵌的匯編指令很簡單,只要使用關(guān)鍵字__asm(雙下劃線)來標(biāo)識(shí)一段匯編程序即可。例如:關(guān)中斷的代碼OS_ENTER_CRITICAL()的實(shí)現(xiàn)代碼為: __asm{MRS RO, SPSRORR RO , RO, NoIntMSR SPSR c, RO } (3)啟動(dòng)最高優(yōu)先級就緒任務(wù)函數(shù)OSStartHighRdy() OSStartHighRdy()是通過調(diào)用__OSStartHighRdy來啟動(dòng)最高優(yōu)先級就緒任務(wù)的,而__OSStartHighRdy是用匯編語言來寫的,其代碼在OS_CPU 。 4. ,所以圖45中的OS_CPU 。 因?yàn)檫@部分代碼是對處理器的寄存器進(jìn)行操作,所以必須用匯編語言來編寫。主要包括以下幾個(gè)函數(shù): (1)軟件中斷服務(wù)程序的匯編語言部分 ARM處理器要求中斷的功能號(hào)必須包括在SWI指令中,這樣應(yīng)用程序就可以在執(zhí)行SWI指令時(shí),通過讀取該調(diào)指令的相應(yīng)位段來獲得功能號(hào)。由于ARM處理器核兩個(gè)指令集的指令長度不同,在不同的指令集中SWI指令的功能號(hào)所處的位段也不同,因此在這部分軟件中斷服務(wù)程序的匯編語言代碼中先判斷處理器所處的指令集狀態(tài),在不同的指令集狀態(tài)下由不同的指令獲得軟中斷功能號(hào),然后判斷所獲軟中斷功能號(hào)為0還是1。若為0則執(zhí)行任務(wù)切換函數(shù)OS_TASK_SWQ。若為1則執(zhí)行啟動(dòng)最高優(yōu)先級任務(wù)函數(shù)__SStartHighRdy。其他功能就由軟件中斷的C語言處理函數(shù)處理。(2)任務(wù)級切換函數(shù)OS_TASK_SWO 此函數(shù)是任務(wù)級的任務(wù)切換函數(shù),它是當(dāng)任務(wù)因?yàn)楸蛔枞鲃?dòng)請求CPU調(diào)度時(shí)被執(zhí)行,由于此時(shí)的任務(wù)切換都是在非異常模式下進(jìn)行的,因此區(qū)別于中斷級別的任務(wù)切換。它先將當(dāng)前任務(wù)的CPU現(xiàn)場保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復(fù)此任務(wù)的CPU現(xiàn)場,使之繼續(xù)執(zhí)行,從而完成了一次任務(wù)切換。 (3)中斷級任務(wù)切換函數(shù)OSIntCtxSw()在時(shí)鐘中斷服務(wù)程序中有更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài)時(shí),為了讓更高優(yōu)先級的任務(wù)盡快得到執(zhí)行,在中斷服務(wù)子程序最后,OSIntExit()函數(shù)會(huì)調(diào)用此函數(shù)實(shí)現(xiàn)任務(wù)切換。它的原理與任務(wù)級的切換很相似,不同的是,由于在調(diào)用此函數(shù)之前已經(jīng)進(jìn)入了中斷,被中斷任務(wù)的CPU現(xiàn)場己經(jīng)保存過了,因此在此函數(shù)中不再進(jìn)行現(xiàn)場保護(hù),只需要對堆棧指針做相應(yīng)的調(diào)整。 (4)啟動(dòng)最高優(yōu)先級任務(wù)函數(shù)__OS StartHighRdy此函數(shù)是由函數(shù)OSStart()調(diào)用的,其功能是讓進(jìn)入就緒態(tài)的優(yōu)先級最高的任務(wù)運(yùn)行。多任務(wù)啟動(dòng)時(shí),此函數(shù)僅僅被執(zhí)行一次,用來啟動(dòng)優(yōu)先級最高的任務(wù),之后多任務(wù)的調(diào)度和切換由OS_TASK_SW()函數(shù)來實(shí)現(xiàn)。 GPRS模塊下位機(jī)在現(xiàn)場采集到出礦重量信息,通過MC35將最新數(shù)據(jù)傳遞至移動(dòng)通信網(wǎng)絡(luò),再由移動(dòng)通信運(yùn)營商傳送至計(jì)算機(jī)中心。最后計(jì)算機(jī)中心對重量信息進(jìn)行分析、顯示、比較和運(yùn)算處理,下達(dá)控制命令。可以利用向終端發(fā)送短信信及時(shí)配置終端GPRS上網(wǎng)參數(shù)、激活終端發(fā)起連接。MC35關(guān)于短信收發(fā)的AT指令如表41中所示。表 41 MC35關(guān)于短信收發(fā)的指令A(yù)T指令功 能AT+CNMI新信息確認(rèn)應(yīng)答AT+CPMS有限信息存儲(chǔ)AT+CMGF短信格式。1為TEXT方式,0為PDU方式AT+CMGS發(fā)出信息(設(shè)置PDU編碼的字符長度)AT+CMGD刪除短信息AT+CSCA短信服務(wù)中心地址AT+CMGR讀短信,信息從+CPMS命令設(shè)定的存儲(chǔ)器讀取本系統(tǒng)的短信息傳遞方式主要采取點(diǎn)對點(diǎn)短消息業(yè)務(wù),選用TEXT方式。為了發(fā)送大于一條短消息所能容納的數(shù)據(jù)表格,采取了將數(shù)據(jù)自動(dòng)切分為幾條短消息依次發(fā)送的策略。這樣就必然要求在每一條短消息中都有一個(gè)消息頭,指出該條消息在一系列的消息隊(duì)列中的位置,以便建立重新組合及檢錯(cuò)、重發(fā)的機(jī)制。 圖46短消息發(fā)送程序流程圖 圖47短消息讀取程序流程圖短消息的具體格式如下所示:發(fā)送標(biāo)志4__消息總數(shù)1__本條消息位置1__傳送的數(shù)據(jù)150在接受端收到短消息時(shí),根據(jù)每條短消息頭來確定是否有消息遺失或者發(fā)錯(cuò)的現(xiàn)象,若存在發(fā)錯(cuò)現(xiàn)象,自動(dòng)過濾掉該條無效信息。若出現(xiàn)延遲或者遺失則要求發(fā)送端重發(fā),直到信息完全收到為止。終端發(fā)送和讀取短消息的流程分別如圖4圖47所示。當(dāng)系統(tǒng)進(jìn)入GPRS網(wǎng)絡(luò)模式發(fā)送重量值時(shí),GPRS數(shù)據(jù)分組是從基站發(fā)送到SGSN節(jié)點(diǎn),而不是通過移動(dòng)交換中心MSC連接到語音網(wǎng)絡(luò)上。SGSN與網(wǎng)關(guān)支持節(jié)點(diǎn)GGSN進(jìn)行通信。GGSN對分組數(shù)據(jù)進(jìn)行相應(yīng)的處理,再發(fā)送到目的網(wǎng)絡(luò),如圖48所示。來自Internet、標(biāo)識(shí)有移動(dòng)臺(tái)地址的III包,由GGSN接收,再轉(zhuǎn)發(fā)到SGSN,繼而傳送到移動(dòng)臺(tái)上。圖48 GPRS數(shù)據(jù)包收發(fā)示意終端向計(jì)算機(jī)中心發(fā)送出礦重量時(shí),數(shù)據(jù)由IP模塊進(jìn)行TCP/IP協(xié)議轉(zhuǎn)換,轉(zhuǎn)換為IP數(shù)據(jù)包再由MC35模塊以GPRS數(shù)據(jù)包的形式發(fā)送到SGSN. GPRS網(wǎng)絡(luò)工作方式以IP地址尋址為基礎(chǔ),目標(biāo)服務(wù)器端并非接入控制器與終端設(shè)備進(jìn)行連接,只需要簡單接入Internet,并具備公網(wǎng)分配的IP地址即可。此外,系統(tǒng)在進(jìn)入GPRS網(wǎng)絡(luò)模式之前,必須先激活GPRS網(wǎng)的PDP連接。ARM通過正確的AT指令和GPRS命令集對MC35模塊進(jìn)行初始化。數(shù)據(jù)的接收發(fā)送具體工作流程如圖49所示。圖49GPRS數(shù)據(jù)收發(fā)流程 5 數(shù)據(jù)庫及客戶端應(yīng)用程序設(shè)計(jì)本章主要介紹了數(shù)據(jù)庫及數(shù)據(jù)訪問客戶端的設(shè)計(jì)方案。首先介紹了流行的上位機(jī)數(shù)據(jù)庫管理系統(tǒng)。然后介紹煤炭產(chǎn)量監(jiān)測系統(tǒng)主要界面的設(shè)計(jì),系統(tǒng)功能實(shí)現(xiàn)的程序,內(nèi)容的查詢方式。 數(shù)據(jù)庫的設(shè)計(jì) 數(shù)據(jù)庫的選型目前流行的windows NT和UNIX的關(guān)系數(shù)據(jù)庫管理系統(tǒng)主要有IBM DB2, ORACLE, Informix和Microsoft SQL Server 2000。從技術(shù)上講,IBM DB2,Oracle, Informix和Microsoft SQL Server 2000都能夠滿足上位機(jī)系統(tǒng)的需要,但從系統(tǒng)的安全性、健壯性、穩(wěn)定性上綜合考慮最后決定選擇Microsoft SQL Server 2000。其優(yōu)勢是: 1,Microsoft SQL Server 2000是關(guān)系數(shù)據(jù)庫管理系統(tǒng)。 它是關(guān)系數(shù)據(jù)庫管理使用的最先進(jìn)的體系結(jié)構(gòu)之一,真正實(shí)現(xiàn)了分布式數(shù)據(jù)管理的數(shù)據(jù)庫系統(tǒng)之一。在體系結(jié)構(gòu)上具有多線程單進(jìn)程服務(wù)器、支持異步FO以及多處
點(diǎn)擊復(fù)制文檔內(nèi)容
范文總結(jié)相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1