基于uclinux 的CAN總線(xiàn)嵌入式驅動(dòng)編程
1 引言
早期應用于八位單片機軟件設計的嵌入式系統主要為前后臺系統(或超循環(huán)系統),程序大約在幾千行以?xún)?,由兩部分組成,即其應用程序是一個(gè)無(wú)限的循環(huán),循環(huán)中調用函數完成相應的操作,屬于后臺行為;其中斷服務(wù)程序處理異步事件,屬于前臺行為.隨著(zhù)嵌入式系統功能越來(lái)越龐雜,如友好的人機界面、網(wǎng)絡(luò )化、遠程監控等.各種任務(wù)的優(yōu)先級不同,傳統的設計方法無(wú)法完成,程序長(cháng)達數萬(wàn)行,程序員必須同繁瑣的底層硬件打交道,這樣效率低下.現代電子技術(shù)的發(fā)展為嵌入式微處理器提供了更多的外設,通用的如串口、并口、以太網(wǎng)口、現場(chǎng)總線(xiàn)、USB口等.基于免費自由軟件Linux發(fā)展而來(lái)的嵌入式系統uclinux,是一種免費的嵌入式操作系統.uclinux系統具有內核小、效率高、源碼開(kāi)放、性能穩定、大量的開(kāi)發(fā)工具、良好的開(kāi)發(fā)環(huán)境等特點(diǎn),并且各種應用程序豐富,是進(jìn)行嵌入式系統開(kāi)發(fā)的最優(yōu)秀工具之一.
2 uclinux操作系統簡(jiǎn)介
uclinux 系統主要由用戶(hù)進(jìn)程、系統調用接口、uclinux 內核、硬件控制器等四部分組成.用戶(hù)進(jìn)程是用戶(hù)根據自己的設計和功能要求開(kāi)發(fā)的應用程序,通過(guò)調用系統的功能函數來(lái)實(shí)現系統功能;系統調用接口通過(guò)系統調用實(shí)現用戶(hù)與系統內核的接口,這些調用和服務(wù)也可以看成是系統內核的一部分;uclinux 內核是操作系統的靈魂,它抽象了許多硬件細節,將所有的硬件抽象成統一的虛擬接口,使程序可以以一種統一的方式進(jìn)行數據處理,它主要包括基于優(yōu)先級的進(jìn)程調度、內存管理、文件系統、網(wǎng)絡(luò )接口、進(jìn)程間通訊等五部分;硬件控制器則包含了系統需要的所有可能的物理設備.以上四個(gè)部分之間的每個(gè)子系統都只能跟鄰近的系統進(jìn)行通信。
uclinux 的設備管理系統是嵌入式操作系統的重要組成部分,它可以分為:下層、與設備相關(guān)的,即所謂的設備驅動(dòng)程序,直接與相應的設備打交道,并向上提供一組訪(fǎng)問(wèn)接口;以及上層、與設備無(wú)關(guān),根據輸入輸出請求,通過(guò)特定設備驅動(dòng)提供的接口,與設備進(jìn)行通信.如通用的串口、網(wǎng)卡等驅動(dòng)程序在uclinux 中都可以找到.
3 uclinux驅動(dòng)編程原理
uclinux嵌入式系統不能象Linux一樣動(dòng)態(tài)加載驅動(dòng)程序模塊,而只能同內核一起編譯,與應用程序、其他驅動(dòng)程序一起固化到可擦寫(xiě)的Flash上,驅動(dòng)程序長(cháng)駐內存,是靜態(tài)驅動(dòng)程序.uclinux系統根據設備性質(zhì)的不同,將設備分為四種類(lèi)型:字符設備(char)、塊設備(block)、網(wǎng)絡(luò )接口( net )和其他設備驅動(dòng)程序模塊.在下載的uclinux源代碼包中,可以在uclinux/linux/drivers目錄下面看到通用設備如char,block, net, cdrom, scsi, sound等.系統對于每個(gè)設備都對應一個(gè)主設備號和一個(gè)次設備號,不同的設備可以對應相同的主設備號,應用程序訪(fǎng)問(wèn)設備通過(guò)不同的次設備號來(lái)識別和區別設備.在Linux系統/dev目錄下通過(guò)輸入ls -l命令可以查到系統已注冊的設備,因此編寫(xiě)新的驅動(dòng)程序時(shí)必須向系統注冊
該設備.在uclinux系統中,通過(guò)register_chrdev函數實(shí)現注冊.
uclinux系統將所有硬件抽象成虛擬的文件系統,所有的字符設備、塊設備都支持文件操作接口,因此可以對這種虛擬的設備文件系統進(jìn)行文件操作.通常對設備文件進(jìn)行的操作有open、read、write、release等,即打開(kāi)、讀、寫(xiě)、釋放文件.每一個(gè)設備驅動(dòng)程序實(shí)質(zhì)上是用來(lái)完成特定任務(wù)的一組函數集. 驅動(dòng)程序擁有一個(gè)稱(chēng)為fileoperation 的數據結構,其中包含指向驅動(dòng)程序內部大多數函數的指針.引導系統時(shí),內核調用每一個(gè)驅動(dòng)程序的初始化函數,將驅動(dòng)程序的主設備號以及程序內部的函數地址結構的指針傳輸給內核.這樣,內核就能通過(guò)設備驅動(dòng)程序的主設備號索引訪(fǎng)問(wèn)驅動(dòng)程序內部的子程序,完成打開(kāi)、讀、寫(xiě)等操作.程序員經(jīng)常面臨的一項工作就是為系統的新設備編寫(xiě)驅動(dòng)程序.
在現代控制系統中,為了便于數據通訊,在底層常采用現場(chǎng)總線(xiàn),目前CAN總線(xiàn)廣泛應用于過(guò)程工業(yè)、機械工業(yè)、紡織機械、農用機械、機器人、數控機床、醫療器械及傳感器等領(lǐng)域,下面介紹CAN總線(xiàn)應用于嵌入式系統的驅動(dòng)編程.
4 CAN 總線(xiàn)的性能特點(diǎn)
CAN(Controller Area Network)即控制器局域網(wǎng)絡(luò ).CAN 總線(xiàn)目前已形成國際標準 version2.0.該技術(shù)規范包括A 和B 兩部分.2.0A 給出了CAN 報文標準格式,而2.0B 給了出廠(chǎng)標準和擴展兩種格式.CAN 總線(xiàn)是應用最廣泛的現場(chǎng)總線(xiàn)之一,CAN為多主方式工作,網(wǎng)絡(luò )上任一節點(diǎn)均可在任意時(shí)刻主動(dòng)地向網(wǎng)絡(luò )上其他節點(diǎn)發(fā)送信息,而不分主從,通信方式靈活,且無(wú)需站地址等節點(diǎn)信息;CAN 網(wǎng)絡(luò )上的節點(diǎn)信息分成不同的優(yōu)先級,可滿(mǎn)足不同的實(shí)時(shí)要求;CAN 采用非破壞性總線(xiàn)仲裁技術(shù),當多個(gè)節點(diǎn)同時(shí)向總線(xiàn)發(fā)送信息時(shí),優(yōu)先級較低的節點(diǎn)會(huì )主動(dòng)地退出發(fā)送,而最高優(yōu)先級的節點(diǎn)可不受影響地繼續傳輸數據;CAN 只需通過(guò)報文濾波即可實(shí)現點(diǎn)對點(diǎn)、一點(diǎn)對多點(diǎn)及全局廣播等幾種方式傳送接收數據,無(wú)需專(zhuān)門(mén)的“調度”,CAN 的直接通信距離最遠可達10km(速率5kbps 以下);通信速率最高可達1Mbps(此時(shí)通信距離最長(cháng)為40m).CAN 上的節點(diǎn)數主要取決于總線(xiàn)驅動(dòng)電路,目前可達110個(gè);采用短幀結構,傳輸時(shí)間短,受干擾概率低,具有極好的檢錯效果;CAN 的通信介質(zhì)可為雙絞線(xiàn)、同軸電纜或光纖等.CAN 總線(xiàn)的數據通信具有突出的可靠性、實(shí)時(shí)性和靈活性.
評論