• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      MCF52223的多用戶在線編程應(yīng)用設(shè)計(jì)

      2010-08-14 08:03:44錢海亮錢仇圣
      關(guān)鍵詞:用戶程序服務(wù)程序多用戶

      錢海亮,錢仇圣

      (1.大連理工大學(xué),大連116620; 2.蘇州大學(xué))

      錢海亮(本科生)、錢仇圣(碩士研究生),研究方向?yàn)榍度胧较到y(tǒng)應(yīng)用。

      引 言

      目前,大多數(shù)嵌入式系統(tǒng)編程是針對單用戶程序,即芯片中只有一個程序。有些情況下,用戶希望在芯片中駐留多個用戶程序,并能方便更新和選擇運(yùn)行,這就提出了多用戶在線編程的需求。隨著制造工藝的進(jìn)步,芯片由8位發(fā)展到16位、32位,集成的Flash和 RAM也越來越大。這給多用戶在線編程提供了基礎(chǔ),而集成的Flash模塊給在線編程提供了可能[1]。芯片的發(fā)展及資源變化如表1所列。

      表1 芯片發(fā)展及資源變化

      嵌入式系統(tǒng)中的多用戶在線編程是指,在芯片中駐留一個監(jiān)控程序,負(fù)責(zé)下載PC機(jī)編譯后的用戶程序到指定的Flash區(qū)域,以及根據(jù)用戶的選擇來運(yùn)行指定的用戶程序。多用戶在線編程與單用戶在線編程的區(qū)別是,多用戶程序共享系統(tǒng)資源,極大地提高了資源的利用率,但某一時刻只有監(jiān)控程序或一個用戶程序運(yùn)行。

      本文以飛思卡爾公司推出的內(nèi)部集成USB2.0模塊的32位微控制器MCF52223為例,在分析監(jiān)控程序、中斷向量重定位、全局變量訪問等關(guān)鍵技術(shù)的基礎(chǔ)上,設(shè)計(jì)并實(shí)現(xiàn)了用于機(jī)器人開發(fā)平臺的多用戶在線編程系統(tǒng)。

      1 監(jiān)控程序設(shè)計(jì)

      監(jiān)控程序類似于操作系統(tǒng)的內(nèi)核,是多用戶在線編程的核心技術(shù)。復(fù)位后首先啟動監(jiān)控程序,主要負(fù)責(zé)通過USB接口下載PC機(jī)的多用戶程序。監(jiān)控程序涉及的主要模塊包括:USB通信模塊、Flash擦除與寫入模塊、用戶程序選擇運(yùn)行模塊、中斷模塊。通過 USB模塊和Flash擦除與寫入模塊下載多個用戶程序,由用戶程序選擇運(yùn)行模塊選擇某個用戶程序運(yùn)行,從而實(shí)現(xiàn)多用戶在線編程。

      1.1 USB通信模塊

      MCF52223集成了USB 2.0模塊[3],可方便、高效地與PC機(jī)通信,下載多用戶程序。檢驗(yàn)正確后,將接收到的用戶程序交給Flash擦除與寫入模塊處理。數(shù)據(jù)包協(xié)議格式如下(數(shù)據(jù)長度小于512字節(jié)):

      1.2 Flash擦除與寫入模塊

      Flash擦除與寫入模塊負(fù)責(zé)將用戶程序?qū)懭胗脩魠^(qū)所在的Flash中,從而實(shí)現(xiàn)多用戶程序的下載。MCF52223擁有256 KB的 Flash,分為32個扇區(qū),每個扇區(qū)分為4頁,每頁為2 048字節(jié)[4]。擦除的最小單位為一頁,因此在設(shè)計(jì)多用戶在線編程系統(tǒng)時,給每個用戶分配的空間以頁為單位[3]。系統(tǒng)預(yù)留6個大小為32 KB的用戶區(qū),即最多6個用戶在線編程。

      1.3 監(jiān)控程序執(zhí)行流程

      監(jiān)控程序是多用戶在線編程的核心,是芯片首先執(zhí)行的代碼。其主要功能是初始化USB通信模塊和Flash擦除與寫入模塊,并通過USB下載用戶程序,如圖1所示。

      在全局變量初始化中聲明unsigned char UserFlag=0,聲明指針unsigned short*Time=(unsigned short*)0x20000400。UserFlag用于保存選擇的用戶程序。指針Time所指向的區(qū)域用于保存定時器中斷次數(shù),使得用戶區(qū)和監(jiān)控程序能共享全局變量。

      圖1 監(jiān)控程序執(zhí)行流程

      2 中斷向量重定位技術(shù)

      單用戶在線編程系統(tǒng)中每個中斷只有一個中斷服務(wù)程序,中斷產(chǎn)生后直接跳轉(zhuǎn)到該中斷服務(wù)程序中運(yùn)行,實(shí)現(xiàn)起來比較簡單[2]。而對于多用戶在線編程系統(tǒng),每個用戶程序都可以添加自己的中斷服務(wù)程序,即對于一個中斷號會有多個不同用戶的中斷服務(wù)程序,由原來一對一的關(guān)系轉(zhuǎn)變?yōu)橐粚Χ嗟年P(guān)系。中斷向量重定位技術(shù)就是用來解決這個難題的。

      當(dāng)選擇某個用戶程序運(yùn)行時,全局變量UserFlag記錄了用戶號,產(chǎn)生中斷后會從監(jiān)控程序的中斷向量表中查找中斷服務(wù)程序的入口地址。但由于是多用戶編程,還需根據(jù)當(dāng)前用戶程序標(biāo)志UserFlag查找中斷向量重定位表,得到當(dāng)前用戶程序的相應(yīng)中斷程序入口地址,并跳轉(zhuǎn)到當(dāng)前用戶相應(yīng)中斷程序執(zhí)行(即由傳統(tǒng)的直接跳轉(zhuǎn)轉(zhuǎn)變成多級間接跳轉(zhuǎn)),如表2所列。中斷執(zhí)行流程如圖2所示。

      表2 中斷向量重定位表

      圖2 中斷執(zhí)行流程

      每個用戶程序中有一張中斷向量重定位表,用于跳轉(zhuǎn)到用戶編寫的中斷服務(wù)子程序。每個用戶區(qū)的中斷服務(wù)程序的函數(shù)名已經(jīng)固定好,用于指定入口地址。

      舉例說明:在用戶程序2中開啟了 UART1接收中斷。當(dāng)監(jiān)控程序?qū)⒖刂茩?quán)交給用戶程序2后,用戶程序2處于運(yùn)行狀態(tài)(UserFlag=2)。如果此時 UART1接收到數(shù)據(jù),就會向MCU發(fā)出 UART中斷(0x4E)請求。MCU立即響應(yīng)該中斷,并跳轉(zhuǎn)到中斷向量表中該中斷對應(yīng)的中斷服務(wù)程序的入口地址處(_Uart1_handler)運(yùn)行。在該中斷服務(wù)程序中根據(jù)UserFlag跳轉(zhuǎn)到用戶程序2的中斷向量重定位表User2Vector[1](1表示在用戶程序中的中斷重定位號),并開始執(zhí)行真正的中斷服務(wù)程序。

      3 全局變量訪問

      在多用戶編程系統(tǒng)中還需解決的問題是,監(jiān)控程序中定義的變量如何在多用戶程序中共享。在用戶程序中可能需要訪問監(jiān)控程序中定義的全局變量,但由于用戶程序和監(jiān)控程序是分開編譯的,所以用戶程序無法直接訪問監(jiān)控程序中定義的全局變量。例如,將MCF52223的定時器中斷設(shè)為1 ms,用戶程序希望通過查詢系統(tǒng)時鐘的方式控制小燈每隔1 s亮滅一次。因此,必須在監(jiān)控程序中添加全局變量,以記錄中斷的次數(shù)。用戶程序查詢該全局變量,記錄第一次的值t1,并將再次讀得的值t2和 t1比較。當(dāng)t2-t1>=1 000時便點(diǎn)亮小燈,同時更新t1的值t1=t2。有以下3種方法可實(shí)現(xiàn)全局變量的訪問。

      3.1 寄存器

      在MCF52223中可以使用的數(shù)據(jù)寄存器有D0~D7[3],主要用來保存操作數(shù)或運(yùn)算結(jié)果等信息。它們的存在節(jié)省了存取操作數(shù)所需占用總線和訪問存儲器的時間。寄存器資源比較少,而且寄存器是CPU使用的,因此用戶程序在使用前需要將寄存器的值進(jìn)棧,用完后立即恢復(fù)。由于用戶程序是不定期地訪問寄存器,所以需要頻繁地進(jìn)出棧,而且在C語言工程中直接操作寄存器需要嵌入?yún)R編代碼,使用起來不方便,還會破壞程序的整體風(fēng)格。

      3.2 RAM

      RAM是指隨機(jī)存取存儲器,存儲單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關(guān)。這種存儲器在斷電時將丟失其存儲內(nèi)容,故主要用于存儲短時間使用的程序。每個單片機(jī)上都集成了一定容量的RAM,用于程序的運(yùn)行、變量的存儲以及系統(tǒng)堆棧的開辟。程序中定義的全局變量都是在RAM中分得的一塊空間,而變量名只是地址的代號,因而可以使用地址直接存取RAM。

      3.3 Flash

      對Flash存儲器的讀寫不同于一般的RAM讀寫,需要專門的編程。Flash有兩種基本操作:擦除(Erase)和寫入(Program)。擦除操作的含義是將存儲單元的內(nèi)容由二進(jìn)制的0變成1;而寫入操作的含義,是將存儲單元的內(nèi)容由二進(jìn)制的1變成0。對Flash的寫入相當(dāng)于對其執(zhí)行邏輯與的操作,邏輯與的結(jié)果即Flash的內(nèi)容。在執(zhí)行寫入操作之前要確保該區(qū)域是空白的(存儲單元內(nèi)容為$FF),即同一塊Flash擦除后只能寫一次。因此,在寫Flash之前一般都要先執(zhí)行擦除操作。

      雖然RAM的效率較寄存器低,但是比Flash提升了很多,而且可以用變量或指針來操作,使用比較簡單。因而,最終確定使用RAM來實(shí)現(xiàn)多用戶在線編程的全局變量共享。實(shí)現(xiàn)方法:定義unsigned short類型的指針指向地址為0x20000400所在的RAM區(qū)。

      unsigned short*p;

      p=(unsigned short*)0x20000400;

      系統(tǒng)每毫秒產(chǎn)生一次定時器中斷,在中斷服務(wù)程序中將指針的值加1,即(*p)++。在用戶程序中也可以定義指針,同樣指定到地址為0x20000400所在的RAM區(qū),也可以跟監(jiān)控程序一樣使用地址來共享。

      4 系統(tǒng)試驗(yàn)評估

      隨著機(jī)器人教育的普及,采用多用戶程序在線編程技術(shù)的教育機(jī)器人開發(fā)平臺隨之而產(chǎn)生。教育機(jī)器人開發(fā)平臺分為3部分:外圍設(shè)備、主控板及軟件平臺。學(xué)生通過軟件平臺生成多個用戶程序,通過 USB將編譯后的用戶程序下載到主控板的不同用戶空間中??梢岳冒存I選擇不同的用戶程序運(yùn)行,搭配外圍設(shè)備即可實(shí)現(xiàn)用戶的功能。

      在分析并解決了前面幾個關(guān)鍵問題后,設(shè)計(jì)的監(jiān)控程序完全能滿足多用戶在線編程的要求。通過使用指針的方法在多用戶程序中共享監(jiān)控程序中定義的全局變量,如本設(shè)計(jì)中的系統(tǒng)時鐘。本文使用了USB接口,因而支持即插即用,并且高通信速率和有效的校驗(yàn)保證了用戶程序快速、高效的下載,為多用戶在線編程提供了高可靠性。

      結(jié) 語

      多用戶程序在線編程技術(shù)建立在監(jiān)控程序的基礎(chǔ)上,是對單用戶程序在線編程技術(shù)的一種改進(jìn),使硬件資源得以充分利用。文中以MCF52223芯片為例設(shè)計(jì)的多用戶程序在線編程系統(tǒng),可穩(wěn)定地應(yīng)用于教育機(jī)器人開發(fā)平臺。實(shí)踐表明,多用戶在線編程運(yùn)行穩(wěn)定、方便更新,具有一定的推廣價(jià)值。但是有關(guān)在線編程技術(shù)的文獻(xiàn)資料比較少,特別是多用戶程序在線編程方面,因此,涉及的相關(guān)細(xì)節(jié)還需進(jìn)一步研究。

      [1]王宜懷.嵌入式應(yīng)用在線編程開發(fā)系統(tǒng)的研制[J].計(jì)算機(jī)工程,2002,28(12):22-24.

      [2]殷樹明.嵌入式系統(tǒng)中多用戶程序在線編程技術(shù)[J].計(jì)算機(jī)工程,2009,35(5):37-39,43.

      [3]Freescale.Freescale MCF52223 MCF52223RM[OL].2004[2009-11].http://www.freescale.com,2004.

      [4]Freescale.Freescale MCF52223 DataSheet[OL].2004[2009-11].http://www.freescale.com.

      [5]鄧宗明,蔣祺明.基于PowerPC開發(fā)板的Flash編程方法與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2004,30(1):168-170.

      [6]Morton Todd D.嵌入式微控制器[M].嚴(yán)雋永,譯.北京:機(jī)械工業(yè)出版社,2005.

      猜你喜歡
      用戶程序服務(wù)程序多用戶
      安泰科多用戶報(bào)告訂閱單
      基于移動終端的人事信息員工自助服務(wù)系統(tǒng)設(shè)計(jì)
      基于移動終端的人事信息員工自助服務(wù)系統(tǒng)設(shè)計(jì)
      安泰科多用戶報(bào)告訂閱單
      安泰科多用戶報(bào)告訂閱單
      基于C#的進(jìn)程守護(hù)程序的設(shè)計(jì)
      視聽(2020年3期)2020-06-11 14:28:18
      安泰科多用戶報(bào)告訂閱單
      變速箱控制系統(tǒng)Bootloader設(shè)計(jì)與實(shí)現(xiàn)
      嵌入式設(shè)備遠(yuǎn)程升級方案設(shè)計(jì)
      基于CCS5.5的TMS320C6000程序Flash上電自舉設(shè)計(jì)及三種固化方法對比
      德昌县| 巴彦淖尔市| 正镶白旗| 五华县| 康平县| 光山县| 安陆市| 应城市| 内乡县| 上林县| 东方市| 绥宁县| 谷城县| 宁强县| 曲阜市| 雷山县| 安塞县| 红安县| 寿光市| 迁西县| 辽阳县| 铁力市| 青阳县| 武冈市| 西华县| 分宜县| 林口县| 福贡县| 麻江县| 阳西县| 鸡东县| 洛阳市| 惠东县| 舒城县| 翼城县| 常德市| 东山县| 昔阳县| 富蕴县| 磐石市| 庆阳市|