<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Linux的嵌入式數據采集系統

基于Linux的嵌入式數據采集系統

作者:張宏壯 王建民 時(shí)間:2008-08-28 來(lái)源:微計算機信息 收藏

摘要: 系統是集計算機、通信及電子技術(shù)、工業(yè)控制為一體的綜合探測系統。本文介紹了基于系統的硬件結構和軟件設計。為提高系統的實(shí)時(shí)響應性能和多任務(wù)處理能力,在硬件上采用ARM9 微處理器技術(shù),同時(shí)移植操作系統,使系統的可靠性和可擴展性得以提高。設計中充分利用了 的特點(diǎn)。系統軟件模塊有模塊、數據處理模塊、數據通信模塊和數據診斷模塊。將Linux 操作系統引入數據采集系統的設計中,加速了系統的開(kāi)發(fā),方便了將來(lái)的功能擴展,提高了觀(guān)測數據的及時(shí)性和準確性,實(shí)現了觀(guān)測的自動(dòng)化。

關(guān)鍵字: 嵌入式Linux ,數據采集系統,

  1 嵌入式系統概述

  嵌入式系統是以應用為中心、以計算機技術(shù)為基礎、軟件硬件可裁剪、適應應用系統,對功能、可靠性、成本、體積、功耗有嚴格要求的專(zhuān)用計算機系統,它將操作系統和功能軟件集成于計算機硬件系統之中,簡(jiǎn)而言之就是系統的應用軟件與系統的硬件一體化,類(lèi)似于BIOS的工作方式,具有軟件代碼小,高度自動(dòng)化,響應速度快等特點(diǎn)。特別適合于要求實(shí)時(shí)和多任務(wù)的體系。嵌入式系統是將先進(jìn)的計算機技術(shù)、半導體技術(shù)、電子技術(shù)和各個(gè)行業(yè)實(shí)際應用相結合的產(chǎn)物。嵌入式系統的結構由兩大模塊組成:硬件平臺和軟件平臺,其結構如圖1所示。

本文引用地址:http://dyxdggzs.com/article/87487.htm


1 嵌入式系統結構圖

  2 系統設計

  數據采集系統的采集任務(wù)在現場(chǎng)完成。采集系統設計為分布式的控制系統,系統上位機與現場(chǎng)檢測下位機之間的通信基于串口。正常運行時(shí),現場(chǎng)下位檢測控制器完成數據采集、數據處理、數據存儲、數據發(fā)送等多種任務(wù)。系統具有一定的自檢測、自校正能力,能將異常情況傳給PC機,以便維護。為了適應各種不同情況對焊縫自動(dòng)檢測的要求,整個(gè)檢測系統采用模塊化結構設計,可應用不同的模塊組合成不同的應用系統。數據采集系統的基本組成如圖2所示。

  2.1 系統的硬件
  數據采集系統主要完成實(shí)時(shí)數據采樣、保持、并送入A/D 轉換器變成數字信號,然后
  再對數據進(jìn)行計算處理、保存,再通過(guò)通信接口將實(shí)時(shí)數據發(fā)送到監控中心,同時(shí)接收監控中心下發(fā)的各種命令。其硬件結構如圖3所示。

  該系統采用了Cirrus Logic公司的EP9302作為主CPU,并移植Linux操作系統來(lái)對任務(wù)進(jìn)行管理和調度。

  交流采樣電路主要由采樣保持、多路開(kāi)關(guān)和A/D轉換組成,用來(lái)保證在模數轉換過(guò)程中電壓、電流的同時(shí)性,以滿(mǎn)足功率測量要求。本系統采集四相電壓及四相電流,通過(guò)多路開(kāi)關(guān)分時(shí)將采樣量送入A/D轉換器。14位A/D轉換電路采用Analog Devices的AD7865,AD7865 是四通道高速A/D轉換器,其電路輸出具有三態(tài)鎖存功能。

  通信電路由SJA1000芯片、光耦電路和總線(xiàn)驅動(dòng)器組成。SJA1000的AD0?AD7連接到系統數據總線(xiàn)上,為了增強CAN總線(xiàn)節點(diǎn)的抗干擾能力,SJA1000的TX0和RX0并不是直接82C250 的TXD和RXD相連,而是通過(guò)高速光耦合器6N137與82C250相連,這樣就很好地實(shí)現了總線(xiàn)上各CAN 節點(diǎn)間的電氣隔離。光耦部分電路所采用的2個(gè)電源Vcc和Vdd必須完全隔離,可采用小功率電源隔離模塊或帶多個(gè)5V隔離輸出的開(kāi)關(guān)電源模塊實(shí)現。這部分增加了接口電路的復雜性,但卻提高了節點(diǎn)的穩定性和安全性。

  2.2 系統的軟件

  軟件的設計是在操作系統上實(shí)現的,嵌入式操作系統是整個(gè)系統的核心。針對本系統的特點(diǎn),軟件平臺采用多任務(wù)嵌入式操作系統Linux來(lái)實(shí)現,改變了傳統的在類(lèi)似硬件平臺下采用MSDOS單用戶(hù)、單任務(wù)操作系統難以完成較為復雜的分布式多任務(wù)應用的缺點(diǎn)。在數據采集系統中,Linux系統可以同時(shí)處理多個(gè)傳感器發(fā)送來(lái)的較為復雜的控制任務(wù),從而提高系統的

  整體響應速度及并發(fā)處理能力。構成嵌入式Linux系統至少需要下面3個(gè)基本元素:引導程序、Linux微內核和初始化進(jìn)程。如果要讓它有更多的功能, 還可加上文件系統、GUI和設計精簡(jiǎn)的應用程序,并將其放在diskonchip中啟動(dòng)。

  2.2.1 內核的裁減編譯與啟動(dòng)

  微型計算機的存儲空間較小, 而標準Linux是面向PC 的,需要對Linux 內核進(jìn)行裁減。對一些可獨立加上或卸下的功能塊,可在編譯內核時(shí)僅保留嵌入式系統所需的功能支持模塊, 刪除不需要的功能。為了滿(mǎn)足一定的實(shí)時(shí)性要求,需屏蔽內核的虛擬內存管理機制來(lái)增強的Linux實(shí)時(shí)性。系統中微機主板屬于X86體系結構,兼容一般桌面PC的Linuxi386版本。這

  樣,我們可以直接使用X86體系的編譯器對Linux核心源代碼直接進(jìn)行編譯及裁剪,并避免了對Linux 核心源代碼中涉及CPU的部分模塊以及內存管理模式模塊的修改。增加了文件系統和GUI根據系統需要,文件系統應包括: 基本文件系統結構、基本應用程序、基本配置文件、基本設備/dev/hd* 和/dev/tty*、基本程序運行所需的函數庫。GUI 是軟件可視化設計不可

  缺少的,也為將來(lái)的現場(chǎng)檢修維護提供可視化的界面。編寫(xiě)Linux的引導代碼, 將diskonchip作為系統的啟動(dòng)設備,引導代碼放在diskonchip上。系統加電后,由引導代碼進(jìn)行基本的硬件初始化,然后把內核經(jīng)映像裝入內存運行。

  2.2.2 程序

  系統需要對I/O口、串口編寫(xiě)程序。設備驅動(dòng)程序是操作系統內核與硬件之間的接口,屬于內核的一部分,主要功能應包含:對設備初始化或釋放、把數據從內核傳送到硬件及從硬件讀取數據、讀取應用程序傳送給設備的數據和回送應用程序請求的數據、監測和處理設備出現的異常。

  設備驅動(dòng)程序的實(shí)質(zhì)就是中斷處理。Linux中斷處理程序分為上半部和下半部。上半部即一般的中斷服務(wù)程序, 由硬件中斷觸發(fā),一般運行在關(guān)中斷的方式下,應當盡可能短小,處理盡可能快;下半部運行在開(kāi)中斷和任務(wù)串行化的環(huán)境下,處理需較長(cháng)時(shí)間的任務(wù)。驅動(dòng)程序上半部在處理完實(shí)時(shí)性很強的任務(wù)后,用queue_task函數將下半部處理函數掛入立即隊列, 并用mark_bh函數來(lái)激活立即隊列,下半部就可以最優(yōu)先地被執行。

  用戶(hù)進(jìn)程是通過(guò)設備文件與硬件打交道,對設備文件的操作方式是系統調用,由file_operations結構實(shí)現系統調用。這個(gè)結構的每一個(gè)成員的名字都對應著(zhù)一個(gè)系統調用。用戶(hù)進(jìn)程對設備文件進(jìn)行操作時(shí),系統調用通過(guò)設備文件的主設備號找到相應的設備驅動(dòng)程序,然后讀取這個(gè)數據結構相應的函數指針,接著(zhù)把控制權交給該函數。這就是Linux 設備驅動(dòng)程序工作的基本原理。編寫(xiě)設備驅動(dòng)程序的主要工作就是編寫(xiě)子函數,并填充file_operations的各個(gè)域。

  設備驅動(dòng)程序以模塊方式加入內核,在init_module模塊中,當檢查設備存在后,用request_irq函數為設備申請系統中空閑的中斷,用kmalloc為設備驅動(dòng)程序申請輸入輸出緩存隊列, 如果申請成功, 用regis2ter_chrdev函數將設備驅動(dòng)程序注冊到系統中,加載完成。在clearup_module模塊中,先用free_irq函數釋放申請到的中斷,然后用kfree函數釋放申請到的內存空間,最后用unregister_chrdev函數釋放注冊的設備驅動(dòng)程序。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程



上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>