熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

EEPW首頁 > 測試測量 > 設計應用 > 基于PC/104的1553B總線測控系統(tǒng)的設計與實現(xiàn)

基于PC/104的1553B總線測控系統(tǒng)的設計與實現(xiàn)

作者:西北工業(yè)大學自動化學院 張曉斌 肖立恒 鄭先成 時間:2008-07-29 來源:中電網(wǎng) 收藏

  底層設備驅動配置
  驅動程序為硬件平臺和應用軟件間提供一個固定接口的軟件層,應用程序必須通過驅動程序才能與硬件進行數(shù)據(jù)通信。而驅動程序的編寫又與操作系統(tǒng)密切相關,具體的操作系統(tǒng)對驅動的要求有所不同,本設計的底層驅動和操作系統(tǒng)VxWorks及任務關系圖如圖5所示。根據(jù)本系統(tǒng)的實際需要,編寫了與VxWorks系統(tǒng)密切相關的底層設備驅動。

本文引用地址:http://www.bjwjmy.cn/article/86354.htm

  首先介紹1553B通訊卡的驅動配置。本系統(tǒng)選用的1553B通訊卡有兩種板卡訪問方式:內存映射和I/O訪問。I/O尋址采用專門的指令,編程缺乏靈活性,并且每次只能傳送單個字節(jié);而內存映射方式指令豐富,編程方便、硬件節(jié)省,便于實現(xiàn)快速交換數(shù)據(jù)。故選用內存映射方式,PC/104可以映射的空間為0xC8000~0xEFFFF,選取內存映射基地址為0xD0000。同時INT引腳通過跳線選擇IRQ9。軟件設置如下:

  1)調用setup_fw.c將固件庫源文件F002p.dat生成與ASF-P104卡匹配的Firmware.h(固件數(shù)據(jù)結構)文件,為板卡硬件提供匹配的接口定義信息;
  2)在sbs_sys.h文件中添加#define VXWORKS和#define NO_FILE_SYSTEM語句行,設置操作系統(tǒng)信息;
  3)在dev_cfg.h文件中按如下設置定義設備配置信息:


  配置好軟件設置后就是1553驅動程序的實現(xiàn),即完成設備驅動函數(shù)的編寫。在編寫函數(shù)之前,需要定義驅動號以及設備的描述符,這在頭文件中實現(xiàn),如下所示:
 

}M1553_DEV; /*1553設備描述符*/
頭文件定義完畢就可以編寫函數(shù)了,以編寫M1553Drv( )函數(shù)為例。M1553Drv( )函數(shù)調用iosDrvInstall( )安裝設備的驅動例程。它在設備驅動程序表中為設備分配一個條目,并在其中填入此設備xxCreate( ),xxDelete( ),xxOpen( ),xxClose( ),xxRead( ),xxW rite ( )和xxIoctl( )等函數(shù)的地址。函數(shù)實體如下:

 
  一一編寫其他的1553設備驅動函數(shù)M1553DevCreate( ),M1553Open( ),M1553Read( )和M1553Write( )以及中斷服務程序M1553Int( )。

  以上為1553B卡的底層驅動編寫,ADT600與之類似,只是頭文件有差異,同理編寫設備函數(shù)ADC_InitializeBoardSettings(),ADC_DigitalToSBS(),ADC_SetChannel(),ADC_StartConversion(),ADC_ConversionDone()和ADC_ReadData()。至此,設備驅動配置完成,將驅動程序加載至應用程序,上層程序代碼就可以直接調用這些底層驅動函數(shù)進行編程。

  任務設計
  VxWorks是一個實時多任務操作系統(tǒng),因此根據(jù)系統(tǒng)的功能模塊要求,將應用程序分割成若干個獨立的任務,使CPU通過操作系統(tǒng)來調度多個任務,輪番服務于一系列任務中的一個,使得應用程序的設計大大簡化,并使程序的結構模塊化、層次化。同時,使用了實時內核,所有時間要求苛刻的事件都可以盡可能快地得到處理。


  任務劃分的好壞直接影響到系統(tǒng)的性能。將一個實時應用問題分解為多個任務,可以加快執(zhí)行速度,且有效地利用系統(tǒng)資源。但是,過度地分解任務,將會使系統(tǒng)中有大量的任務,需頻繁地進行任務的切換,任務之間還要進行很多同步和互斥控制,將增加系統(tǒng)服務工作,降低系統(tǒng)的速度和有效性。因此,劃分任務時必須進行各種綜合平衡和折衷,有時將兩個操作合并在一起處理效果好些,但有時必須分開處理。這都依賴于實時應用的特性。

  根據(jù)系統(tǒng)功能需求,主任務劃分如下,任務間總體上采用優(yōu)先級搶占機制進行調度,各任務功能及優(yōu)先級的劃分如表2所示。PC/104優(yōu)先接受來自飛機控制設備的命令字,然后執(zhí)行負載控制任務,等待控制任務釋放信號量后,程序就執(zhí)行數(shù)據(jù)采集及發(fā)送任務,通訊監(jiān)控任務對數(shù)據(jù)的接發(fā)進行實時監(jiān)控,確保無信息的丟失,更重要的是,第一時間傳遞發(fā)控設備的控制命令,若啟動重發(fā)機制之后仍然接受不到信息則會報錯。而硬件初始化及自檢測任務只是在主程序開始時調用,由于優(yōu)先級的限制,只有等待再次軟啟動之后才會再次執(zhí)行。

  除了優(yōu)先級的搶占外,主要任務間還通過設置信號量進行二次調度,確保任務的連續(xù)正確執(zhí)行及資源的合理分配,優(yōu)化程序結構。在主程序引導函數(shù)ProgStart( )中,建立了2個二進制信號量和1個互斥信號量:semCON,semSEND,currNodeSemId。semCON信號量用于數(shù)據(jù)接收任務和監(jiān)控任務的信息傳遞,主要是數(shù)據(jù)的超時重發(fā)機制監(jiān)控;semSEND信號量用于數(shù)據(jù)采集任務和數(shù)據(jù)發(fā)送任務的信息傳遞;currNodeSemId信號量用于數(shù)據(jù)采集監(jiān)控任務中數(shù)據(jù)采集的完整性而設立的信號量,避免通訊任務搶占臨界資源以及調用不合理而產生"死鎖"現(xiàn)象。其中,2個二進制信號量創(chuàng)建時為空(SEM_EMPTY),處于不可用狀態(tài),高優(yōu)先級任務執(zhí)行semGive()釋放后變?yōu)闈M(SEM_FULL),變?yōu)榭捎脿顟B(tài),供低優(yōu)先級任務執(zhí)行semTake()使用?;コ庑盘柫縞urrNodeSemId創(chuàng)建時,為了避免優(yōu)先級倒置的情況以及為任務提供刪除安全,聯(lián)合使用了SEM_Q_PRIORITY、SEM_INVERSION_SAFE、SEM_DELETE_SAFE選項聯(lián)合使用,使用按位或操作,程序代碼如下:

  currNodeSemId=semMCreate(SEM_Q_PRIORITY|SEM_INVERSION_SAFE|SEM_DELETE_SAFE)
程序最后執(zhí)行ProgStop()結束主程序,刪除創(chuàng)建的任務并釋放信號量資源。因為程序中使用了互斥信號量,并啟動了互斥信號量的任務刪除保護功能,所以在刪除任務之前,必須先成功占有互斥信號量。先刪除任務,再刪除信號量。

結束語

  本文主要講述了1553B總線系統(tǒng)的設計及其在VxWorks下的軟件開發(fā)過程。實際中,建立了地面最小實驗系統(tǒng),經過聯(lián)機調試,系統(tǒng)運行正常,系統(tǒng)具有很好的實時性和穩(wěn)定性,達到了預期效果。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 下一頁

評論


相關推薦

技術專區(qū)

關閉