透過使用ColdFire uClinux完成資料採集和傳輸論文

透過使用ColdFire uClinux完成資料採集和傳輸論文

  摘要:介紹了利用ColdFire uClinux實現資料採集和傳輸。這項技術被用在大型集裝箱檢測系統中,取得了很好的效果。

  關鍵詞:ColdFire uClinux 資料採集

  在ColdFire上嵌入uClinux作業系統是一項比較成熟的技術,般應用在手持裝置、家庭閘道器、工業控制中。但在資料採集應用中使用這項技術卻不是很常見,原因是uClinux不是實時作業系統,而資料採集應用對資料採集的實時性要求很高。本文介紹如何利用在ColdFire上嵌入uClinux作業系統的方法來實現資料的採集和傳輸。

  1 硬體平臺

  任何嵌入式應用系統都離不開具體的硬體平臺,這裡先介紹一下系統採用的硬體平臺。圖1所示即為硬體結構的示意圖。其中,SPM是資料處理模組,它控制前端的A/D變換,根據設定的採集週期將A/D變換後的資料儲存在其內部的RAM中;同時發出一箇中斷訊號。ColdFire 5307 xBoard是基於Motorola公司高效能嵌入式32位處理器ColdFire 5307自行開發的嵌入式應用開發板。其硬體配置包括:

  ColdFire5307 90MHz 32位處理器;16M SDRAM;2M Flash ROM;10Mbps乙太網介面;兩個UART串列埠;兩個64針的地址和資料匯流排介面。

  ISC(影象控制工作站)和IDS(影象資料工作站)是兩個工作站,用來對系統實現控制,對影象資料實現處理。XBoard和工作站處在同一個乙太網上,該乙太網上還配有其它的裝置。uClinux所要實現的功能是實時地將SPM上採集的資料透過乙太網傳到IDS上,同時接收來自ICS的命令以對SPM進行控制。

  (收集整理)

  2 SPM和xBoard之間的連線

  uClinux需要讀取SPM中的RAM,所以最好是把SPM中的RAM作為uClinux的記憶體地址的一部分。SPM和xBoard上MCF5307之間的硬體連線如圖2所示。

  SPM中RAM的地址線、資料線和控制線直接連到CPU的總線上。除了硬體上的連線之外,還需要設定MCF5307的暫存器,為SPM上的RAM分配記憶體空間。XBoard在加電時首先執行debug程式,所以在debug中進行暫存器的設定是比較合適的。在debug原始碼中的sysinit.c檔案裡的mcf5307_cs_init函式中加上下面的語句:

  MCF5307_WR_CS_CSAR5(imm,0xa000); SPM的地址從0xa0000000開始

  MCF5307_WR_CS_CSCR5(imm,0x3d40); 採用8位的讀方式

  MCF5307_WR_CS_CSMR5(imm,0x01FF0001); 空間大小為1M

  將SPM控制的引腳和MCF5307的並口引腳相連,這產對SPM的控制就只需設定並口的相應位了。

  3 uClinux下的實時性

  uClinux並不是一個實時作業系統(RTOS),如何使用uClinux完成有實時性要求的資料採集是需要考慮的問題。由於應用中只一個實時的任務——從SPM中讀取資料,所以採用中斷的方式來對資料採集完的訊號提供實時響應。下面的程式碼用來向uClinux註冊IRQ7中斷處理程式:result=request_irq(ECM_IRQ,ecm_interrupt,0,“ecm”,NULL);

  在中斷處理程式中,先關閉中斷,因為中斷巢狀在這裡是沒有意義的,還有一個重要的原因是SPM中斷訊號的低電平持續時間比較長。CPU是利用低電平來標誌斷訊號的,所以CPU可能在SPM的一箇中斷訊號中檢測到多次中斷。關閉中斷後,從SPM的RAM中讀取資料。由於SPM和xBoard之間的連線已得到保證,SPM的內部RAM成為uClinux的記憶體空間的.一部分,所以讀的工作是很簡單的,只是將資料從一個地址讀到另外一個地址,讀完資料後開啟中斷。讀資料之間發生的中斷都會被忽略。讀資料塊的大小為4096位元組,讀完所有的資料需要2ms。所以在採集週期低於2ms的情況下,系統無法正常工作。不過這個指標低於應用的要求。

  4 資料的臨時存放

  xBoard上並沒有大的儲存裝置,所以uClinux採集的資料必須及時地傳送出去。乙太網上透過交換機連線著多個裝置,在網路繁忙的時候並不能保證資料會被及時地傳出去。解決這個問題的方法是開闢一個緩衝區,將暫時無法傳出去的資料放在緩衝區中。

  由於沒有MMU的支援,uClinux不能提供記憶體保護機制,程序可以隨意讀取任何記憶體地址。這樣,在帶來方便的同時也

  增加了一些麻煩。方便的一面表現在可以在程序中開闢緩衝區,在核心中用同樣的地址使用緩衝區;不利的一方面表現在開闢動態記憶體必須十分小心,不能和其它程序發生重疊。

  在程序中開闢了50個數據緩衝片,這些緩衝片透過三個雙向連結串列維持形成緩衝區。所有的緩衝片被掛在一個稱為list的雙向連結串列中,退出程序的時候,應該將這些動態記憶體釋放。同時,將存有有效資料(即尚未被髮送出去的資料)的緩衝片放在稱為dirty的雙向連結串列中,將可以使用的緩衝片放在稱為clean的雙向連結串列中。中斷處理程式每次從clean連結串列中取得一個緩衝片,存入資料後放到dirty連結串列中;相反,傳送程序每次從dirty佇列中取一個緩衝片,傳送其儲存的資料,然後把它放到clean連結串列中。這樣可以在一定程式上為網路速度的穩定提供緩衝。

  5 uClinux上執行任務的分析

  在uClinux上運行了三個任務:讀取採集資料、透過乙太網傳送資料、接收和執行來自ICS的命令。其中的讀取採集資料任務對實時性有要求,把它用中斷處理程式來實現,而其它的兩個任務則透過使用者程序來實現。透過乙太網傳送資料的任務和讀取採集資料的任務其享一個緩衝區,透過ioclt函式在它們它們傳遞緩衝區雙向連結串列的地址。所以還需要為SPM註冊一個驅動程式,這也是在uClinux操作中比較特別的程序和核心通訊的方法。同時,把對SPM的設定和查詢等操作也包裝在這個驅動程式裡同,這些操作都是透過ioctl函式向程提供介面。註冊驅動程式的函式是:

  result=register_chrdev(ECM_MAJOR,“ecm”,&ecm_fops);可見,這裡把SPM作為一個字元型的裝置,由於緩衝區是共享,所以必須提供一個鎖相制,使得在某個程序向緩衝片中寫資料時,其它的程序不讀或寫該緩衝片。

  UClinux不僅在資訊家電、低端網路裝置和工業控制領域中有較廣的應用,而且在簡單的資料採集和傳輸方面也有了應用方案。

最近訪問