<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > μC/OS-II在數(shù)字微波監(jiān)控系統(tǒng)中的應(yīng)用

          μC/OS-II在數(shù)字微波監(jiān)控系統(tǒng)中的應(yīng)用

          作者: 時(shí)間:2011-08-03 來源:網(wǎng)絡(luò) 收藏


          (4) Task_SPI_OP:通過SPI接口完成遠(yuǎn)端信息交換處理以及數(shù)據(jù)鏈路各接口環(huán)回等設(shè)置。

          (5) Task_DATA_OP:主要完成網(wǎng)絡(luò)數(shù)據(jù)管理、AD轉(zhuǎn)換、公務(wù)的控制,控制微波接口、時(shí)鐘芯片的設(shè)置和讀取,完成誤碼率的計(jì)算以及對串行E2PEOM存儲(chǔ)芯片數(shù)據(jù)的存取。

          (6) Task_COMM1:主要是完成出串口與其它設(shè)備間通信數(shù)據(jù)的收發(fā)。

          (7) Task_ODUCOMM0:主要是IDU和ODU設(shè)備的通信。

          2.2 任務(wù)的創(chuàng)建

          經(jīng)過分析和設(shè)計(jì)之后,就可以使用μC/OS- II所提供的函數(shù)創(chuàng)建任務(wù),這里給出了如何創(chuàng)建液晶顯示任務(wù)的實(shí)例,其它任務(wù)的創(chuàng)建與之類似,其過程如下:

          OSTaskCreate (Task_LCD_OP,(void *)0, LCDopreate[TaskStkLengh - 1],8);

          Task_LCD_OP是要?jiǎng)?chuàng)建的任務(wù);(void *)0是傳遞給任務(wù)的參數(shù),因?yàn)檫@里所創(chuàng)建的任務(wù)沒有參數(shù),所以其值為0;LCDopreate[TaskStkLengh - 1]是分配給任務(wù)的堆棧,這在程序中是事先定義好的,最后一個(gè)數(shù)字8是分配給該任務(wù)的優(yōu)先級(jí)。

          2.4 任務(wù)優(yōu)先級(jí)的劃分

          為了使整個(gè)系統(tǒng)的實(shí)時(shí)性能夠得到滿足,所以要以任務(wù)的緊迫性、關(guān)鍵性、頻繁性和中斷的重要性等為依據(jù),對不同的任務(wù)安排不同優(yōu)先級(jí)別。在系統(tǒng)優(yōu)先級(jí)的分配上,μC/系統(tǒng)級(jí)保留了0和1,用戶程序任務(wù)優(yōu)先級(jí)從2開始,最低優(yōu)先級(jí)定義為12。

          在該中,任務(wù)不同,對實(shí)時(shí)性要求也不同,通過定時(shí)任務(wù)來控制。定時(shí)任務(wù)劃分為20ms到5s多個(gè)時(shí)間級(jí)別,在同一個(gè)任務(wù)中可以再定時(shí)地處理一些事務(wù)。其中,單獨(dú)設(shè)置了一個(gè)任務(wù)Task_TIME_FLG來處理這些時(shí)間等級(jí)的劃分和管理,由于它的運(yùn)行涉及到其它任務(wù)的時(shí)間標(biāo)志,是一個(gè)關(guān)鍵任務(wù),所以必須將其運(yùn)行優(yōu)先級(jí)設(shè)置為用戶程序的最高級(jí)別。系統(tǒng)中除了對設(shè)備進(jìn)行設(shè)置外,其余時(shí)間主要通過串行接口進(jìn)行信息交互,也是較為重要和緊迫的,這一工作由串口1來承擔(dān),所以在設(shè)置Task_COMM1的優(yōu)先級(jí)次之;其次是Task_ODUCOMM0;Task_DATA_OP數(shù)據(jù)操作任務(wù)對實(shí)時(shí)性要求不高,級(jí)別隨之降低;Task_SPI_OP任務(wù)因其數(shù)據(jù)量小,故不是緊迫任務(wù);Task_KEY按鍵任務(wù)、Task_LCD_OP液晶顯示是實(shí)現(xiàn)人機(jī)交互的,所以實(shí)時(shí)性要求也比較低。

          從以上分析可以把任務(wù)的優(yōu)先級(jí)進(jìn)行如下分配:Task_TIME_FLG為2,Task_COMM1為3,Task_ODUCOMM0為4,Task_DATA_OP為5,Task_SPI_OP為6,Task_KEY為7,Task_LCD_OP為8。

          2.5 任務(wù)的調(diào)度

          μC/調(diào)度的依據(jù)是任務(wù)就緒隊(duì)列表,系統(tǒng)從處于就緒隊(duì)列的任務(wù)中選擇一個(gè)優(yōu)先級(jí)最高的來運(yùn)行,它可以管理多達(dá)64個(gè)任務(wù)。對于多任務(wù)的管理,μC/OS- II 是通過調(diào)度器完成。其中任務(wù)級(jí)的調(diào)度是由函數(shù)OSSched()完成, 而中斷級(jí)的調(diào)度是由函數(shù)OSIntExiT()完成。

          本系統(tǒng)的任務(wù)中,Task_TIME_FLG時(shí)間標(biāo)志處理任務(wù)優(yōu)先級(jí)最高,運(yùn)行也最頻繁,它和其它任務(wù)切換是屬于普通的任務(wù)切換,而Task_COMM1和Task_ODUCOMM0的任務(wù)切換是屬于中斷級(jí)的切換,只有在發(fā)生中斷時(shí)才切換,正常運(yùn)行時(shí)和普通任務(wù)的切換方式一樣。其余任務(wù)的切換都作為普通切換方式處理。在任務(wù)切換過程中如果當(dāng)前任務(wù)需要延時(shí)判斷,為保證其它任務(wù)的正常運(yùn)行,可通過調(diào)用函數(shù)OSTimeDly(2)掛起當(dāng)前任務(wù),其中鍵顯部分有三級(jí)菜單,每一級(jí)菜單又有許多選項(xiàng),為了提高按鍵掃描的實(shí)時(shí)性,在進(jìn)入每一級(jí)菜單后必須調(diào)用該函數(shù)掛起當(dāng)前任務(wù),并掃描有無按鍵,如有則執(zhí)行對應(yīng)處理程序,沒有按鍵則把自己掛起,直到有按鍵方可退出。μC/如此處理,程序不會(huì)死等,按鍵和菜單顯示配合很協(xié)調(diào),只要有按鍵就能得到及時(shí)處理。

          2.6 中斷的設(shè)置與使用

          在ARM7體系的CPU中,最多可以有32個(gè)中斷源。對每個(gè)具體的中斷源,可以將其定義為快速FIQ中斷,使其具有最高的優(yōu)先級(jí);也可以定義為向量IRQ中斷,使其具有中等優(yōu)先級(jí),但向量IRQ的總數(shù)不能超過16個(gè)。μC/OS-II本身使用一個(gè)定時(shí)中斷源作為系統(tǒng)節(jié)拍中斷。

          μC/OS-II響應(yīng)中斷的過程:當(dāng)系統(tǒng)接收到中斷請求后,并且CPU處于中斷開放狀態(tài),系統(tǒng)就會(huì)終止當(dāng)前運(yùn)行的任務(wù),按照中斷向量的指向運(yùn)行中斷服務(wù)子程序;當(dāng)中斷運(yùn)行結(jié)束后,系統(tǒng)就會(huì)返回到被中止的任務(wù)繼續(xù)運(yùn)行,或者轉(zhuǎn)向運(yùn)行另一個(gè)更高優(yōu)先級(jí)的就緒任務(wù)。

          本系統(tǒng)中使用了兩個(gè)定時(shí)中斷源、兩個(gè)串口中斷源、一個(gè)I2C中斷源。μC/OS-II中斷的設(shè)置和初始化由target.c中的TargetInit函數(shù)完成,通過該函數(shù)實(shí)現(xiàn)了串口、I2C和定時(shí)中斷的初始化設(shè)置。其中VICInit實(shí)現(xiàn)過程如下,將中斷服務(wù)子程序的地址寫到相應(yīng)的中斷向量寄存器(VICVectAddrx),并從相應(yīng)的中斷向量控制寄存器(VICVectCntlx)選中相應(yīng)的中斷,將其啟用。當(dāng)CPU接收到中斷請求就能找到對應(yīng)中斷服務(wù)程序的地址,并轉(zhuǎn)到中斷服務(wù)程序去運(yùn)行。

          2.7 堆棧的設(shè)置與使用

          堆棧是依據(jù)“后進(jìn)先出(LIFO)”原則組織的連續(xù)存儲(chǔ)空間。為滿足任務(wù)切換、響應(yīng)中斷以及存儲(chǔ)任務(wù)私有數(shù)據(jù)的需要,每個(gè)任務(wù)都配有自己的堆棧。

          由于LPC2214的片內(nèi)Flash是256KB,片內(nèi)RAM是16KB,根據(jù)需要CPU沒有擴(kuò)展外部閃存,故要求代碼精練,RAM分配一定要合理。尤其是在液晶顯示任務(wù)中,由于顯示的菜單項(xiàng)目較多,因此任務(wù)之間切換增加了RAM的需求。如果每個(gè)任務(wù)堆棧開辟過小,任務(wù)切換時(shí)就會(huì)出現(xiàn)私有數(shù)據(jù)丟失,堆棧溢出直至程序運(yùn)行出錯(cuò);反之堆棧設(shè)置過大,就會(huì)使內(nèi)存RAM空間緊張,因此設(shè)置堆??臻g必須適中。本系統(tǒng)中開始設(shè)置顯示任務(wù)堆棧大小為64個(gè)字,調(diào)試運(yùn)行中發(fā)現(xiàn)進(jìn)入多級(jí)菜單時(shí)會(huì)出現(xiàn)程序死鎖的現(xiàn)象,擴(kuò)大對應(yīng)任務(wù)堆??臻g問題就得到解決。

          3 軟件的調(diào)試環(huán)境與下載

          該系統(tǒng)需要建立ADS1.2集成仿真環(huán)境,使用了廣州周立功單片機(jī)發(fā)展有限公司提供的專用工程模板。如果硬件沒有擴(kuò)展外部存儲(chǔ)器,就使用LPC2100的工程模板;否則使用LPC2200的工程模板。在調(diào)試過程中選用DebugInFLASH模式燒寫調(diào)試;軟硬件調(diào)試完成,可選用RelInFlash模式燒寫,后一種燒寫方式會(huì)加密芯片,使之無法二次燒寫;如果加密之后需要重新燒寫芯片,就必須使用ISP進(jìn)行解密之后方可燒寫,調(diào)試程序時(shí)一定要注意這點(diǎn)。

          4 結(jié)束語

          μC/OS-II應(yīng)用于軟件開發(fā)之后,系統(tǒng)的軟件結(jié)構(gòu)更加簡潔實(shí)用,系統(tǒng)的實(shí)時(shí)性和穩(wěn)定性得到提高,設(shè)備在實(shí)際應(yīng)用中表現(xiàn)穩(wěn)定可靠,并取得一定的經(jīng)濟(jì)效益,μC/OS-II在嵌入式系統(tǒng)中具有廣泛的應(yīng)用推廣價(jià)值。

          本文引用地址:http://www.ex-cimer.com/article/187412.htm
          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();