




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Arm+Linux開(kāi)發(fā)平臺(tái)軟件需求規(guī)格書 文檔編號(hào):Arm+Linux開(kāi)發(fā)平臺(tái)軟件需求規(guī)格書單 位: 編制人:日期:校 對(duì):日期:審 核:日期:批 準(zhǔn):日期:修改記錄日期版本描述修改人目錄1.引言41.1.編寫目的41.2.名詞解析41.3.參考資料42.運(yùn)行環(huán)境42.1.硬件環(huán)境42.2.軟件環(huán)境43.功能需求43.1.功能劃分53.2.功能描述53.2.1.53.2.2.54.接口需求54.1.接口劃分54.2.接口描述54.2.1.54.2.2.55.性能需求55.1.穩(wěn)定性55.2.實(shí)時(shí)性55.3.可擴(kuò)展性55.4.可維護(hù)性56.運(yùn)行需求56.1.開(kāi)機(jī)界面66.2.即插即用67.其他需
2、求61. 引言1.1. 編寫目的為了能夠使arm+linux平臺(tái)外協(xié)合作方了解我們公司軟件需求規(guī)格,按照計(jì)劃完成該arm+linux平臺(tái)的外協(xié)開(kāi)發(fā),為了能夠協(xié)調(diào)好外協(xié)工作的順利進(jìn)行和需求規(guī)格的交流,特制定并編寫本平臺(tái)軟件需求規(guī)格書。1.2. 名詞解析名詞解析1.3. 參考資料arm+linux平臺(tái)研制要求2011年4月12日2. 運(yùn)行環(huán)境2.1. 硬件環(huán)境CPU:S3C2440,主頻400MHzRam:64MByteNandFlash:256MByte2.2. 軟件環(huán)境Bootloader:UbootLinux內(nèi)核:Linux-2.6.32.2NandFlash文件系統(tǒng):Yaffs2Rootf
3、s文件系統(tǒng):3. 功能需求3.1. 功能劃分該軟件功能可以細(xì)分為以下4部分:A/D數(shù)據(jù)采集處理和D/A模擬量輸出,外圍接口通信,數(shù)據(jù)存儲(chǔ),界面顯示和操作,3.2. 功能描述3.2.1. A/D數(shù)據(jù)采集處理和D/A模擬量輸出S3C2440與FPGA高速采集卡之間的接口為:CPCI接口。FPGA高速采集卡的功能是把輸入的-5V+5V模擬電平信號(hào)以200KSPS1MSPS的采樣速率輸入到A/D轉(zhuǎn)換電路中。A/D轉(zhuǎn)換電路通過(guò)量化和編碼把模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),然后S3C2440處理器把數(shù)字信號(hào)傳送給上層應(yīng)用程序。所以首先要編寫合理的符合業(yè)務(wù)需要的A/D驅(qū)動(dòng)程序。A/D驅(qū)動(dòng)程序的主要功能是:打開(kāi)和關(guān)閉A
4、/D轉(zhuǎn)換器以及對(duì)A/D轉(zhuǎn)換器的轉(zhuǎn)換結(jié)果進(jìn)行讀取操作。打開(kāi)、關(guān)閉、讀取A/D轉(zhuǎn)換器對(duì)應(yīng)的底層操作函數(shù)依次為:static int adc_enable(int ch);static int adc_disbale();static int adc_read(int ch);A/D驅(qū)動(dòng)程序通過(guò)I/O控制函數(shù)順序調(diào)用adc_enable()、adc_read()、adc_disable()這3個(gè)函數(shù)實(shí)現(xiàn)對(duì)模擬信號(hào)的采集、轉(zhuǎn)換和輸出。I/O控制函數(shù)的聲明如下:ssize_t adc_ioctl( struct inode* inode, struct file* file, unsigned int
5、cmd, unsigned ling arg)接著完善A/D驅(qū)動(dòng)程序的文件操作結(jié)構(gòu),其文件操作結(jié)構(gòu)如下:static struct file_operations adc_opsread:adc_read,write:adc_write,ioctl:adc_ioctl,open:adc_open,release:adc_release,然后編寫A/D轉(zhuǎn)換器驅(qū)動(dòng)程序的初始化函數(shù),其函數(shù)聲明如下:static int _init HW_AD_init(void);函數(shù)內(nèi)部調(diào)用了內(nèi)核函數(shù)devfs_register_chardev()來(lái)注冊(cè)A/D轉(zhuǎn)換設(shè)備和devfs_register()來(lái)獲得A/D
6、轉(zhuǎn)換設(shè)備的操作句柄。然后編寫A/D驅(qū)動(dòng)程序的模塊加載和卸載函數(shù)。Static int _init AD_init(void);/內(nèi)部調(diào)用初始化函數(shù)來(lái)完成模塊加載Static void _exit cleanup_AD(void);/內(nèi)部調(diào)用devfs_unregister_chrdev()和devfs_unregister()來(lái)完成模塊卸載。上層用戶應(yīng)用程序在接收到A/D轉(zhuǎn)換結(jié)果后,要進(jìn)行以下操作:1.2.3.3.2.2. 外圍接口通信該平臺(tái)的外圍接口包括:串口、網(wǎng)口、USB口、按鍵接口、LVDS觸摸屏顯示接口、GPIO口、CPCI接口、CAN口和I2C口。目前,linux內(nèi)核選用的是linu
7、x-2.6.32,而這個(gè)版本的內(nèi)核所有的驅(qū)動(dòng)程序都支持熱插拔。所以要求該平臺(tái)所有的外圍接口設(shè)備都應(yīng)該支持熱插拔,以方便用戶的使用。一個(gè)外圍設(shè)備的hotplug調(diào)用過(guò)程如下:(1) 用戶插入或者安裝上外圍設(shè)備(2) 總線報(bào)告新設(shè)備插入和讀取PID信息(3) 自動(dòng)加載對(duì)應(yīng)的驅(qū)動(dòng)程序(4) 調(diào)用/sbin/hotplug腳本,傳遞環(huán)境變量(5) 調(diào)用外圍設(shè)備代理腳本/etc/hotplug/*.agent(6) 代理腳本/etc/hotplug/*.agent加載模塊對(duì)應(yīng)的驅(qū)動(dòng)程序下面依次介紹各個(gè)外圍接口的需求。l 串口串口類型包括3種:2路RS232接口,1路RS422或者RS485接口,所屬種類
8、為:異步傳輸串行接口(UART)。這3種串口的波特率可設(shè),設(shè)置范圍為:2400bps115200bps。其中1路RS232用于調(diào)試和下載,另一路和1路RS422或者RS485用于串口通信。RS485采用差分線傳輸數(shù)字信號(hào)時(shí),兩線間的電壓差為+2V+6V時(shí),認(rèn)為是“1”,-2V-6V時(shí),認(rèn)為是“0”。RS485的實(shí)際傳輸距離為3000米,而RS232通常不能超過(guò)50米。異步串口的傳輸原理如下:其傳輸?shù)臄?shù)據(jù)都是以幀方式傳輸?shù)模S玫膸Y(jié)構(gòu)為:1位起始位,8位數(shù)據(jù)位,無(wú)奇偶校驗(yàn)位,1位停止位。在傳輸開(kāi)始前,傳輸線處于空閑狀態(tài),連續(xù)送出“1”。當(dāng)發(fā)送“0”時(shí),表示傳輸開(kāi)始,之后出現(xiàn)在總線上的都是二進(jìn)制
9、編碼的數(shù)據(jù),傳輸完成后,利用1個(gè)停止位(邏輯1),使傳輸線回到空閑狀態(tài),然后發(fā)送方才可以發(fā)送下一幀數(shù)據(jù)。在linux中,串口常被看做成中斷設(shè)備(tty),終端設(shè)備的驅(qū)動(dòng)程序分為3層,tty_core,tty_line_discipline,tty_driver。編寫串口驅(qū)動(dòng)程序的步驟如下:1. 定義各種宏,把實(shí)際的物理地址轉(zhuǎn)化成虛擬地址。2. 實(shí)現(xiàn)串口的操作函數(shù)結(jié)構(gòu)體(struct uart_ops;)中的各種函數(shù)。比如包括:阻止發(fā)送函數(shù)、發(fā)送使能函數(shù)、阻止接收函數(shù)、發(fā)送緩沖判空函數(shù)、獲取控制信息函數(shù)、發(fā)送中斷信號(hào)函數(shù)、接收中斷函數(shù)、發(fā)送中斷函數(shù)、出錯(cuò)中斷函數(shù)、初始化函數(shù)、關(guān)閉串口函數(shù)、波特率
10、改變函數(shù)、返回端口類型函數(shù)、設(shè)置端口類型函數(shù)等。3. 注冊(cè)串口驅(qū)動(dòng)程序,一個(gè)端口對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)就是uart_port,其中有串口所有的物理特性,所以,驅(qū)動(dòng)程序向系統(tǒng)注冊(cè)一個(gè)端口的過(guò)程就是注冊(cè)u(píng)art_port數(shù)據(jù)結(jié)構(gòu)的過(guò)程。l 網(wǎng)口網(wǎng)口類型為:以太網(wǎng)接口,傳輸速率為10M/100M,工作模式為點(diǎn)對(duì)點(diǎn)連接的全雙工傳輸模式。共兩路,一路用于調(diào)試和下載,另一路用于網(wǎng)絡(luò)通信。以太網(wǎng)不是一種具體的網(wǎng)絡(luò),而只是一種技術(shù)規(guī)范,它采用的技術(shù)是:CSMA/CD,即載波監(jiān)聽(tīng)多路訪問(wèn)及沖突檢測(cè)技術(shù)。兩包數(shù)據(jù)發(fā)送間隔最小為9.6ms(以10Mbit/s運(yùn)行)。以太網(wǎng)的幀結(jié)構(gòu)包括4種不同的格式,不過(guò)都具有8字節(jié)的前導(dǎo)字
11、符,前導(dǎo)字符的作用是使接收節(jié)點(diǎn)進(jìn)行同步并做好接收數(shù)據(jù)幀的準(zhǔn)備,其中前7個(gè)字節(jié)稱為前同步碼,內(nèi)容為0xAA,最后一個(gè)字節(jié)稱為幀起始標(biāo)志服,內(nèi)容為0xAB。以太網(wǎng)接口控制器包括MAC媒體訪問(wèn)層和PHY物理層芯片兩部分,MAC集成在嵌入式CPU芯片中,而PHY就是網(wǎng)絡(luò)芯片,比如RTL8201BL。而如果嵌入式CPU芯片中沒(méi)有集成,我們可以通過(guò)使用Host Bus接口的以太網(wǎng)芯片來(lái)擴(kuò)展網(wǎng)絡(luò)接口,這樣的芯片有:RTL8019。網(wǎng)絡(luò)驅(qū)動(dòng)程序的結(jié)構(gòu)如下:在設(shè)計(jì)網(wǎng)絡(luò)驅(qū)動(dòng)程序時(shí),最主要的工作就是完成設(shè)備驅(qū)動(dòng)功能層。網(wǎng)絡(luò)設(shè)備初始化的工作流程:首先通過(guò)檢測(cè)物理設(shè)備的硬件特征來(lái)判斷網(wǎng)絡(luò)物理設(shè)備是否存在,如果存在,再對(duì)
12、設(shè)備進(jìn)行資源配置。當(dāng)檢測(cè)設(shè)備和資源配置的工作完成之后,就構(gòu)造設(shè)備的device數(shù)據(jù)結(jié)構(gòu),用檢測(cè)到的數(shù)值來(lái)對(duì)device中的變量初始化,最后向linux內(nèi)核注冊(cè)該設(shè)備并申請(qǐng)內(nèi)存空間,這個(gè)注冊(cè)函數(shù)函數(shù)定義為:int register_netdevice( struct net_device *dev ),其中,dev是指向網(wǎng)絡(luò)設(shè)備的指針。所謂向內(nèi)核注冊(cè)的過(guò)程就是把dev所指向的設(shè)備的指針添加到linux系統(tǒng)中網(wǎng)絡(luò)設(shè)備鏈表(dev_base)的最后,在設(shè)備注冊(cè)成功后,程序調(diào)用device結(jié)構(gòu)體中的init()函數(shù),初始化該網(wǎng)絡(luò)設(shè)備。數(shù)據(jù)包發(fā)送的工作流程:在設(shè)備初始化成功后,通過(guò)device結(jié)構(gòu)體中的
13、open()函數(shù)指針調(diào)用網(wǎng)絡(luò)設(shè)備的打開(kāi)函數(shù)打開(kāi)設(shè)備,接著通過(guò)device結(jié)構(gòu)體中的建立硬件包頭函數(shù)指針hard_header來(lái)建立硬件幀頭信息,最后通過(guò)協(xié)議接口層函數(shù)dev_queue_xmit()來(lái)調(diào)用device結(jié)構(gòu)體中的hard_start_xmit()函數(shù)指針,完成數(shù)據(jù)包的發(fā)送。函數(shù)hard_start_xmit()將把存放在套接字緩沖區(qū)中的數(shù)據(jù)發(fā)送到物理設(shè)備上。數(shù)據(jù)包接收的工作流程:當(dāng)網(wǎng)絡(luò)物理設(shè)備上有數(shù)據(jù)到達(dá)時(shí),就觸發(fā)硬件中斷,產(chǎn)生中斷信號(hào),網(wǎng)絡(luò)設(shè)備驅(qū)功能層就能夠在中斷向量表中根據(jù)中斷號(hào)調(diào)用相應(yīng)的中斷處理程序,即數(shù)據(jù)包接收程序來(lái)處理數(shù)據(jù)包的接收。然后,網(wǎng)絡(luò)協(xié)議接口層調(diào)用netif_r
14、x函數(shù),把接收到的數(shù)據(jù)包傳輸?shù)骄W(wǎng)絡(luò)協(xié)議的上層進(jìn)行處理。比如NE2000網(wǎng)卡的數(shù)據(jù)接收過(guò)程為:先由ne_probe()函數(shù)完成網(wǎng)絡(luò)接口的初始化,利用在這個(gè)函數(shù)中的ne_probe1()函數(shù)或者ne_probe_isapnp()函數(shù)得到中斷號(hào),根據(jù)中斷號(hào)進(jìn)入中斷服務(wù)處理函數(shù)ei_interrupt(),通過(guò)ei_interrupt()函數(shù)從8390的接收緩沖區(qū)中獲得數(shù)據(jù),并組合成sk_buff結(jié)構(gòu),再通過(guò)netif_rx()函數(shù)將接收到的數(shù)據(jù)存放在系統(tǒng)的接收隊(duì)列之中。嵌入式linux網(wǎng)絡(luò)各層之間的數(shù)據(jù)傳輸都是通過(guò)sk_buff。每個(gè)sk_buff包括一些控制方法和一塊數(shù)據(jù)緩沖區(qū),多個(gè)sk_buff
15、組成雙向鏈表。l USB口USB接口類型為:USB1.1,傳輸速率為1.5Mbit/s12Mbit/s。2路USB主機(jī),用于USB接口通信,1路USB從機(jī),用于調(diào)試。這兩路host usb,一路用于連接usb鼠標(biāo),一路用于連接u盤。所以一路要編寫usb鼠標(biāo)驅(qū)動(dòng)程序,遵循HID協(xié)議標(biāo)準(zhǔn),一路要編寫u盤驅(qū)動(dòng)程序,遵循usb mass storage協(xié)議規(guī)范。Usb驅(qū)動(dòng)程序共分為3種:主機(jī)端設(shè)備驅(qū)動(dòng)程序、主機(jī)控制器驅(qū)動(dòng)程序和設(shè)備端驅(qū)動(dòng)程序。主機(jī)端設(shè)備驅(qū)動(dòng)程序:嵌入式內(nèi)核已經(jīng)為這部分驅(qū)動(dòng)程序提供了很好的編程接口,驅(qū)動(dòng)開(kāi)發(fā)工程師只需要按照要求建立程序框架,通過(guò)調(diào)用操作系統(tǒng)提供的API函數(shù)就可以完成對(duì)US
16、B外設(shè)的特定訪問(wèn)。主機(jī)控制器驅(qū)動(dòng)程序:如果想讓設(shè)備具有USB host功能,那么在設(shè)備中就需要選用一個(gè)帶有主機(jī)控制器的USB接口芯片。比如:philips公司的ISP1161、ISP1362。并且由驅(qū)動(dòng)開(kāi)發(fā)工程師自行編寫實(shí)現(xiàn)該控制器的驅(qū)動(dòng)程序。usb主機(jī)設(shè)備驅(qū)動(dòng)程序的框架如下:1. 向內(nèi)核注冊(cè)該驅(qū)動(dòng)程序。注冊(cè)操作在驅(qū)動(dòng)程序的初始化函數(shù)static int _init usb_skel_init(void)里。主要調(diào)用的是usb_register()函數(shù)。即usb_register(&skel_driver)2. 設(shè)備的相關(guān)信息和操作的結(jié)構(gòu)體struct usb_driver3. 與應(yīng)用
17、程序相對(duì)應(yīng)的文件操作函數(shù)結(jié)構(gòu)體struct file_operations4. 內(nèi)核通過(guò)設(shè)備標(biāo)識(shí)確定該設(shè)備的驅(qū)動(dòng)程序,調(diào)用probe函數(shù),同時(shí)usb_driver結(jié)構(gòu)指針、接口號(hào)和接口ID被傳送到函數(shù)中。Probe函數(shù)負(fù)責(zé)分配內(nèi)存、創(chuàng)建設(shè)備請(qǐng)求等5. 注冊(cè)devfs。通過(guò)調(diào)用devfs_register()函數(shù)來(lái)完成注冊(cè)。6. 從內(nèi)核中注銷usb子系統(tǒng)。注銷操作在驅(qū)動(dòng)程序的退出函數(shù)static void _exit usb_skel_exit(void)里。主要調(diào)用的是usb_deregister(&skel_driver)usb設(shè)備端驅(qū)動(dòng)程序的框架如下:1. 初始化模塊:初始化模塊描
18、述符、端點(diǎn)、配置RAM等2. 數(shù)據(jù)傳輸模塊:傳輸數(shù)據(jù),完成控制傳輸、中斷傳輸、同步傳輸和批量傳輸?shù)葌鬏斈K下的數(shù)據(jù)收發(fā)。3. 設(shè)備請(qǐng)求模塊:處理設(shè)備請(qǐng)求。4. 廠商請(qǐng)求模塊:處理生產(chǎn)廠商請(qǐng)求。5. 其他操作:處理主機(jī)端口復(fù)位、配置等。用戶態(tài)程序?qū)SB設(shè)備的open()、read()、write()、ioctl()、close()等操作是通過(guò)USB驅(qū)動(dòng)程序中的文件操作結(jié)構(gòu)體file_operations中的相對(duì)應(yīng)的函數(shù)實(shí)現(xiàn)的。l 按鍵接口要求按鍵個(gè)數(shù)在20個(gè)以上,其中包括0(空格),1,2(a,b,c),3(d,e,f),4(g,h,i),5(j,k,l),6(m,n,o),7(p,q,r,s
19、),8(t,u,v),9(w,x,y,z)十個(gè)數(shù)字鍵用作數(shù)字、字母和拼音輸入,“*”鍵用作符號(hào),“#”鍵用作輸入法,其他8個(gè)以上的按鍵功能暫無(wú)確定。嵌入式系統(tǒng)中按鍵的作用是:完成向CPU輸入數(shù)據(jù)、傳送命令等工作。按鍵開(kāi)關(guān)通常為機(jī)械彈性開(kāi)關(guān),具有兩種狀態(tài):閉合和斷開(kāi)。所以相對(duì)應(yīng)的按鍵也具有兩種狀態(tài):按鍵被按下和按鍵被抬起,一般是低電平表示按鍵被按下,高電平表示按鍵被抬起。按鍵的物理連接方式有兩種:線性按鍵和矩陣按鍵。由于線性按鍵要求一個(gè)按鍵對(duì)應(yīng)一個(gè)CPU的I/O口,而我們的按鍵個(gè)數(shù)又在20個(gè)以上,所以在該平臺(tái)上不采用線性按鍵的連接方式。矩陣鍵盤連接方式占用N+M個(gè)I/O口,卻可以驅(qū)動(dòng)N*M個(gè)按鍵
20、,所以在該平臺(tái)上采用的按鍵連接方式為矩陣鍵盤連接。利用軟件程序來(lái)掃描和確認(rèn)矩陣按鍵位置。硬件按鍵電路要具有按鍵防抖電路,其核心思想是:在嵌入式CPU的幾個(gè)時(shí)鐘周期內(nèi),通過(guò)對(duì)按鍵信號(hào)進(jìn)行多次訪問(wèn),查看電平狀態(tài)是否保持一致。當(dāng)多個(gè)按鍵同時(shí)按下時(shí),為了避免丟失按鍵請(qǐng)求,可以采用一個(gè)環(huán)形隊(duì)列當(dāng)做緩沖區(qū)來(lái)存儲(chǔ)鍵盤掃描碼,這個(gè)環(huán)形隊(duì)列的大小一般為10個(gè)按鍵代碼。按鍵驅(qū)動(dòng)程序包括以下模塊:(1) 鍵盤的初始化模塊,實(shí)現(xiàn)設(shè)備的注冊(cè)、中斷的注冊(cè)、驅(qū)動(dòng)程序模塊的加載和卸載等;(2) 鍵盤的文件操作模塊,包括:鍵盤的I/O控制模塊,實(shí)現(xiàn)對(duì)鍵盤設(shè)備文件讀/寫之外的其他操作;鍵盤的open()函數(shù),用來(lái)打開(kāi)設(shè)備文件;讀
21、取按鍵位置模塊;鍵盤的中斷處理模塊。l 液晶屏接口液晶屏的大小為7寸屏,分辨率為800*480,接口類型為L(zhǎng)VDS,并且為觸摸屏(觸摸屏就是在非觸摸屏表面覆蓋一層薄片,通過(guò)點(diǎn)擊按鍵和圖表來(lái)接收信息,并作出一些人為設(shè)計(jì)的響應(yīng)動(dòng)作)。觸摸屏的類型有四種,在該平臺(tái)上,采用的是電阻式觸摸屏,因?yàn)楸砻媛暡ㄊ揭?jīng)常擦拭,對(duì)環(huán)境清潔度要求較高;電容感應(yīng)式不適用于金屬機(jī)柜,對(duì)外界的電磁環(huán)境要求較高,漂移現(xiàn)象較嚴(yán)重;紅外線式對(duì)外界的光照環(huán)境要求較高。而且在嵌入式系統(tǒng)中,很多LCD模塊都采用電阻式觸摸屏。l GPIO口用作數(shù)字量的輸入和輸出。電平類型為:TTL/LVTTL,05V,工作模式為:可獨(dú)立設(shè)置輸入和輸出
22、,共4路,每路包括I/O口,工作頻率小于1MHz。l CPCI口用于外接FPGA高速采集卡。l CAN口共1路,傳輸速率為5kbps1Mbps。用作信令的傳輸。l I2C口I2C接口有三種功能:連接溫度傳感器(temperature sensor)、連接實(shí)時(shí)時(shí)鐘(RTC)和連接E2PROM。在此用作連接E2PROM。3.2.3. 數(shù)據(jù)存儲(chǔ)NandFlash的大小共256MB(地址范圍:0x00x0fff ffff),其中前32MB(地址范圍:0x00x01ff ffff)的空間用于放置linux內(nèi)核鏡像和其他配置文件。NandFlash儲(chǔ)存空間的規(guī)劃如下:3.2.4. 界面顯示和操作4. 接口
23、需求4.1. 接口劃分該平臺(tái)的接口包括:串口(uart口)、網(wǎng)口、USB口、鍵盤接口、4.2. 接口描述4.2.1. 串口串口編程需要用到的頭文件有:#include <stdio.h> ,#include <unistd.h>,#include <termios.h>,#include <fcntl.h>.串口的終端函數(shù)有:打開(kāi)串口。如:int fd = open( “/dev/ttyS0”, O_RDWR);設(shè)置串口。包括波特率設(shè)置,檢驗(yàn)位設(shè)置,停止位設(shè)置和模式設(shè)置(如果串口只是用來(lái)傳輸數(shù)據(jù),那么使用原始模式Raw Mode來(lái)進(jìn)行通信)。寫串
24、口。如:int nByte = write( int fd, char buffer1024, int length);讀串口。如:int nByre = read( int fd, char buff1024, int length);不過(guò)最常用的還是以下的操作方式:Fd_setrfds;structtimevaltv;intretval;FD_ZERO(&rdfs);FD_SET( portsportNo.handle, &rfds);tv.tv_sec = Timeout / 1000;tv.tv_usec = Timeout % 1000 * 1000;retval =
25、 select(portsportNo.handle +, &rfds, NULL, NULL, &tv);if( retval = -1 )printf(“select error!n”);break;else if(retval)int actualRead = read( portsportNo.handle, char buff1024, int maxCnt);關(guān)閉串口。如:close( fd );串口的主函數(shù)如下:#define DEVICE_TTYS “/dev/ttyS0”int main (int argc, char argv)int fd;printf(“
26、n RS232 main start! nn”);fd = open( DEVICE_TTYS, O_RDWR);if( fd = -1)printf(“ open device %s failed”, DEVICE_TTYS);elseinit_ttyS(fd);rs232_transfer(fd);close(fd);return 0;其中,init_ttyS(fd)是端口初始化函數(shù),主要完成的功能有:清除原有設(shè)置,設(shè)置波特率,設(shè)置標(biāo)志位。rs232_transfer(fd)是通信功能函數(shù),主要完成的功能有:清空接收buffer,while(1)循環(huán)先把發(fā)送buffer中的data發(fā)送到串
27、口fd,接著從串口fd中讀取data到接收buffer中。4.2.2. 網(wǎng)口對(duì)網(wǎng)絡(luò)設(shè)備進(jìn)行操作,必須提供一組函數(shù)接口以供系統(tǒng)訪問(wèn)。1. 打開(kāi)操作open()該函數(shù)在網(wǎng)絡(luò)設(shè)備狀態(tài)由down->up時(shí)被調(diào)用。當(dāng)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序以module方式被裝入時(shí),在open()函數(shù)里要調(diào)用MOD_INC_USE_COUNT宏。2. 關(guān)閉操作close()該函數(shù)在網(wǎng)絡(luò)設(shè)備狀態(tài)由up->down時(shí)被調(diào)用。當(dāng)網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序以module方式被裝入時(shí),在close()函數(shù)里要調(diào)用MOD_DEC_USE_COUNT宏。3. 發(fā)送操作hard_start_xmit()所有的網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序都必須有這個(gè)發(fā)送方法,在系統(tǒng)調(diào)用驅(qū)動(dòng)程序的xmit時(shí),發(fā)送的數(shù)據(jù)放在一個(gè)叫sk_buff的結(jié)構(gòu)體中。如果發(fā)送成功,hard_start_xmit方法里釋放sk_buff,返回0,否則,返回1
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 會(huì)場(chǎng)布置合同范本
- 鄉(xiāng)鎮(zhèn)商品房出租合同范本
- pe管材及管件購(gòu)銷合同范本
- 協(xié)議離婚陰陽(yáng)合同范本
- 酒店投資合作合同范本
- 燒豬店鋪轉(zhuǎn)讓合同范本
- 櫥柜衣柜制作及其安裝合同范本
- 國(guó)際采購(gòu)合同范本
- 合法用工合同范本
- 教育機(jī)構(gòu)培訓(xùn)合同范本
- 職業(yè)健康安全交底
- GB∕T 28610-2020 甲基乙烯基硅橡膠
- GB∕T 7588.1-2020 電梯制造與安裝安全規(guī)范 第1部分:乘客電梯和載貨電梯
- 4.昆蟲備忘錄 課件(共15張PPT)
- DB37∕T 5191-2021 高延性混凝土加固技術(shù)規(guī)程
- 2022年全省公訴業(yè)務(wù)知識(shí)考試參考答案
- 田字格(綠色標(biāo)準(zhǔn))
- 鎮(zhèn)政府(街道辦事處)辦公大樓平面圖
- 軟壓光機(jī)計(jì)算說(shuō)明
- 森林防火安全責(zé)任書(施工隊(duì)用)
- 水庫(kù)應(yīng)急搶險(xiǎn)與典型案例分析
評(píng)論
0/150
提交評(píng)論