at91rm9200啟動(dòng)過(guò)程教程 系統(tǒng)上電,檢測(cè)BMS,選擇系統(tǒng)的啟動(dòng)方式,如果BMS為高電平,則系統(tǒng)從片內(nèi)ROM啟動(dòng)。AT91RM9200的ROM上電后被映射到了0x0和0x100000處,在這兩個(gè)地址處都可以訪問(wèn)到ROM。由于9200的ROM中固化了一個(gè)BOOTLOAER程序。所以PC從0X0處開(kāi)始執(zhí)行這個(gè)BOOTLOAER(準(zhǔn)確的說(shuō)應(yīng)該是一級(jí)BOOTLOADER)。這個(gè)BOOTLOER依次完成以下步驟: 1、PLL SETUP,設(shè)置PLLB產(chǎn)生48M時(shí)鐘頻率提供給USB DEVICE。同時(shí)DEBUG USART也被初始化為48M的時(shí)鐘頻率; 2、相應(yīng)模式下的堆棧設(shè)置; 3、檢測(cè)主時(shí)鐘源(Main oscillator); 4、中斷控制器(AIC)的設(shè)置; 5、C 變量的初始化; 6、跳到主函數(shù)。 完成以上步驟后,我們可以認(rèn)為BOOT過(guò)程結(jié)束,接下來(lái)的就是LOADER的過(guò)程,或者也可以認(rèn)為是裝載二級(jí)BOOTLOER。AT91RM9200按照DATAFLASH、EEPROM、連接在外部總線上的8位并行FLASH的順序依次來(lái)找合法的BOOT程序。所謂合法的指的是在這些存儲(chǔ)設(shè)備的開(kāi)始地址處連續(xù)的存放的32個(gè)字節(jié),也就是8條指令必須是跳轉(zhuǎn)指令或者裝載PC的指令,其實(shí)這樣規(guī)定就是把這8條指令當(dāng)作是異常向量表來(lái)處理。必須注意的是第6條指令要包含將要裝載的映像的大小。關(guān)于如何計(jì)算和寫(xiě)這條指令可以參考用戶手冊(cè)。一旦合法的映像找到之后,則BOOT程序會(huì)把找到的映像搬到SRAM中去,所以映像的大小是非常有限的,不能超過(guò)16K-3K的大小。當(dāng)BOOT程序完成了把合法的映像搬到SRAM的任務(wù)以后,接下來(lái)就進(jìn)行存儲(chǔ)器的REMAP,經(jīng)過(guò)REMAP之后,SRAM從映設(shè)前的0X200000地址處被映設(shè)到了0X0地址并且程序從0X0處開(kāi)始執(zhí)行。而ROM這時(shí)只能在0X100000這個(gè)地址處看到了。至此9200就算完成了一種形式的啟動(dòng)過(guò)程。如果BOOT程序在以上所列的幾種存儲(chǔ)設(shè)備中找到合法的映像,則自動(dòng)初始化DEBUG USART口和USB DEVICE口以準(zhǔn)備從外部載入映像。對(duì)DEBUG口的初始化包括設(shè)置參數(shù)115200 8 N 1以及運(yùn)行XMODEM協(xié)議。對(duì)USB DEVICE進(jìn)行初始化以及運(yùn)行DFU協(xié)議。現(xiàn)在用戶可以從外部(假定為PC平臺(tái))載入你的映像了。在PC平臺(tái)下,以WIN2000為例,你可以用超級(jí)終端來(lái)完成這個(gè)功能,但是還是要注意你的映像的大小不能超過(guò)13K。一旦正確從外部裝載了映像,接下來(lái)的過(guò)程就是和前面一樣重映設(shè)然后執(zhí)行映像了。我們上面講了BMS為高電平,AT91RM9200選擇從片內(nèi)的ROM啟動(dòng)的一個(gè)過(guò)程。如果BMS為低電平,則AT91RM9200會(huì)從片外的FLASH啟動(dòng),這時(shí)片外的FLASH的起始地址就是0X0了,接下來(lái)的過(guò)程和片內(nèi)啟動(dòng)的過(guò)程是一樣的,只不過(guò)這時(shí)就需要自己寫(xiě)啟動(dòng)代碼了,至于怎么寫(xiě),大致的內(nèi)容和ROM的BOOT差不多,不同的硬件設(shè)計(jì)可能有不一樣的地方,但基本的都是一樣的。由于片外FLASH可以設(shè)計(jì)的大,所以這里編寫(xiě)的BOOTLOADER可以一步到位,也就是說(shuō)不用像片內(nèi)啟動(dòng)可能需要BOOT好幾級(jí)了,目前AT91RM9200上使用較多的bootloer是u-boot,這是一個(gè)開(kāi)放源代碼的軟件,用戶可以自由下載并根據(jù)自己的應(yīng)用配置。總的說(shuō)來(lái),筆者以為AT91RM9200的啟動(dòng)過(guò)程比較簡(jiǎn)單,ATMEL的服務(wù)也不錯(cuò),不但提供了片內(nèi)啟動(dòng)的功能,還提供了UBOOT可供下載。筆者寫(xiě)了一個(gè)BOOTLODER從片外的FLASHA啟動(dòng),效果還可以。 uboot結(jié)構(gòu)與使用uboot是一個(gè)龐大的公開(kāi)源碼的軟件。他支持一些系列的arm體系,包含常見(jiàn)的外設(shè)的驅(qū)動(dòng),是一個(gè)功能強(qiáng)大的板極支持包。其代碼可以 http://sourceforge.net/projects/u-boot下載 在9200上,為了啟動(dòng)uboot,還有兩個(gè)boot軟件包,分別是loader和boot。分別完成從sram和flash中的一級(jí)boot。其源碼可以從atmel的官方網(wǎng)站下載。 我們知道,當(dāng)9200系統(tǒng)上電后,如果bms為高電平,則系統(tǒng)從片內(nèi)rom啟動(dòng),這時(shí)rom中固化的boot程序初始化了debug口并向其發(fā)送'c',這時(shí)我們打開(kāi)超級(jí)終端會(huì)看到ccccc...。這說(shuō)明系統(tǒng)已經(jīng)啟動(dòng),同時(shí)xmodem協(xié)議已經(jīng)啟動(dòng),用戶可以通過(guò)超級(jí)終端下載用戶的bootloader。作為第一步,我們下載loader.bin.loader.bin將被下載到片內(nèi)的sram中。這個(gè)loder完成的功能主要是初始化時(shí)鐘,sdram和xmodem協(xié)議,為下載和啟動(dòng)uboot做準(zhǔn)備。當(dāng)下載了loader.bin后,超級(jí)終端會(huì)繼續(xù)打印:ccccc....。這時(shí)我們就可以下在uboot了。uboot將被下載到sdram中的一個(gè)地址后并把pc指針調(diào)到此處開(kāi)始執(zhí)行uboot。接著我們就可以在終端上看到uboot的shell啟動(dòng)了,提示符uboot>,用戶可以u(píng)boot>help 看到命令列表和大概的功能。uboot的命令包含了對(duì)內(nèi)存、flash、網(wǎng)絡(luò)、系統(tǒng)啟動(dòng)等一些命令。 如果系統(tǒng)上電時(shí)bms為低電平,則系統(tǒng)從片外的flash啟動(dòng)。為了從片外的flash啟動(dòng)uboot,我們必須把boot.bin放到0x0地址出,使得從flash啟動(dòng)后首先執(zhí)行boot.bin,而要少些boot.bin,就要先完成上面我們講的那些步驟,首先開(kāi)始從片內(nèi)rom啟動(dòng)uboot。然后再利用uboot的功能完成把boot.bin和uboot.gz燒寫(xiě)到flash中的目的,假如我們已經(jīng)啟動(dòng)了uboot,可以這樣操作: uboot>protect off all uboot>erase all uboot>loadb 20000000 uboot>cp.b 20000000 10000000 5fff uboot>loadb 21000000 uboot>cp.b 210000000 10010000 ffff 然后系統(tǒng)復(fù)位,就可以看到系統(tǒng)先啟動(dòng)boot,然后解壓縮uboot.gz,然后啟動(dòng)uboot。注意,這里uboot必須壓縮成.gz文件,否則會(huì)出錯(cuò)。 怎么編譯這三個(gè)源碼包呢,首先要建立一個(gè)arm的交叉編譯環(huán)境,關(guān)于如何建立,此處不予說(shuō)明。建立好了以后,分別解壓源碼包,然后修改Makefile中的編譯器項(xiàng)目,正確填寫(xiě)你的編譯器的所在路徑。 對(duì)loader和boot,直接make。對(duì)uboot,第一步:make_at91rm9200dk,第二步:make。這樣就會(huì)在當(dāng)前目錄下分別生成*.bin文件,對(duì)于uboot.bin,我們還要壓縮成.gz文件。 也許有的人對(duì)loader和boot搞不清楚為什么要兩個(gè),有什么區(qū)別嗎?首先有區(qū)別,boot主要完成從flash中啟動(dòng)uboot的功能,他要對(duì)uboot的壓縮文件進(jìn)行解壓,除此之外,他和loader并無(wú)大的區(qū)別,你可以把boot理解為在loader的基礎(chǔ)上加入了解壓縮.gz的功能而已。所以這兩個(gè)并無(wú)多大的本質(zhì)不同,只是他們的使命不同而已。 特別說(shuō)名的是這三個(gè)軟件包都是開(kāi)放源碼的,所以用戶可以根據(jù)自己的系統(tǒng)的情況修改和配置以及裁減,打造屬于自己系統(tǒng)的bootloder。
上傳時(shí)間: 2013-10-27
上傳用戶:wsf950131
關(guān)于PCB封裝的資料收集整理. 大的來(lái)說(shuō),元件有插裝和貼裝.零件封裝是指實(shí)際零件焊接到電路板時(shí)所指示的外觀和焊點(diǎn)的位置。是純粹的空間概念.因此不同的元件可共用同一零件封裝,同種元件也可有不同的零件封裝。像電阻,有傳統(tǒng)的針插式,這種元件體積較大,電路板必須鉆孔才能安置元件,完成鉆孔后,插入元件,再過(guò)錫爐或噴錫(也可手焊),成本較高,較新的設(shè)計(jì)都是采用體積小的表面貼片式元件(SMD)這種元件不必鉆孔,用鋼膜將半熔狀錫膏倒入電路板,再把SMD 元件放上,即可焊接在電路板上了。晶體管是我們常用的的元件之一,在DEVICE。LIB庫(kù)中,簡(jiǎn)簡(jiǎn)單單的只有NPN與PNP之分,但實(shí)際上,如果它是NPN的2N3055那它有可能是鐵殼子的TO—3,如果它是NPN的2N3054,則有可能是鐵殼的TO-66或TO-5,而學(xué)用的CS9013,有TO-92A,TO-92B,還有TO-5,TO-46,TO-52等等,千變?nèi)f化。還有一個(gè)就是電阻,在DEVICE 庫(kù)中,它也是簡(jiǎn)單地把它們稱為RES1 和RES2,不管它是100Ω 還是470KΩ都一樣,對(duì)電路板而言,它與歐姆數(shù)根本不相關(guān),完全是按該電阻的功率數(shù)來(lái)決定的我們選用的1/4W 和甚至1/2W 的電阻,都可以用AXIAL0.3 元件封裝,而功率數(shù)大一點(diǎn)的話,可用AXIAL0.4,AXIAL0.5等等。現(xiàn)將常用的元件封裝整理如下:電阻類及無(wú)極性雙端元件:AXIAL0.3-AXIAL1.0無(wú)極性電容:RAD0.1-RAD0.4有極性電容:RB.2/.4-RB.5/1.0二極管:DIODE0.4及DIODE0.7石英晶體振蕩器:XTAL1晶體管、FET、UJT:TO-xxx(TO-3,TO-5)可變電阻(POT1、POT2):VR1-VR5這些常用的元件封裝,大家最好能把它背下來(lái),這些元件封裝,大家可以把它拆分成兩部分來(lái)記如電阻AXIAL0.3 可拆成AXIAL 和0.3,AXIAL 翻譯成中文就是軸狀的,0.3 則是該電阻在印刷電路板上的焊盤(pán)間的距離也就是300mil(因?yàn)樵陔姍C(jī)領(lǐng)域里,是以英制單位為主的。同樣的,對(duì)于無(wú)極性的電容,RAD0.1-RAD0.4也是一樣;對(duì)有極性的電容如電解電容,其封裝為RB.2/.4,RB.3/.6 等,其中“.2”為焊盤(pán)間距,“.4”為電容圓筒的外徑。對(duì)于晶體管,那就直接看它的外形及功率,大功率的晶體管,就用TO—3,中功率的晶體管,如果是扁平的,就用TO-220,如果是金屬殼的,就用TO-66,小功率的晶體管,就用TO-5,TO-46,TO-92A等都可以,反正它的管腳也長(zhǎng),彎一下也可以。對(duì)于常用的集成IC電路,有DIPxx,就是雙列直插的元件封裝,DIP8就是雙排,每排有4個(gè)引腳,兩排間距離是300mil,焊盤(pán)間的距離是100mil。SIPxx 就是單排的封裝。等等。值得我們注意的是晶體管與可變電阻,它們的包裝才是最令人頭痛的,同樣的包裝,其管腳可不一定一樣。例如,對(duì)于TO-92B之類的包裝,通常是1 腳為E(發(fā)射極),而2 腳有可能是B 極(基極),也可能是C(集電極);同樣的,3腳有可能是C,也有可能是B,具體是那個(gè),只有拿到了元件才能確定。因此,電路軟件不敢硬性定義焊盤(pán)名稱(管腳名稱),同樣的,場(chǎng)效應(yīng)管,MOS 管也可以用跟晶體管一樣的封裝,它可以通用于三個(gè)引腳的元件。Q1-B,在PCB 里,加載這種網(wǎng)絡(luò)表的時(shí)候,就會(huì)找不到節(jié)點(diǎn)(對(duì)不上)。在可變電阻
上傳時(shí)間: 2013-11-03
上傳用戶:daguogai
Keil C51使用詳解Keil C51 是美國(guó)Keil Software 公司出品的51 系列兼容單片機(jī)C 語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C 語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì),因而易學(xué)易用。用過(guò)匯編語(yǔ)言后再使用C 來(lái)開(kāi)發(fā),體會(huì)更加深刻。Keil C51 軟件提供豐富的庫(kù)函數(shù)和功能強(qiáng)大的集成開(kāi)發(fā)調(diào)試工具,全Windows界面。另外重要的一點(diǎn),只要看一下編譯后生成的匯編代碼,就能體會(huì)到Keil C51生成的目標(biāo)代碼效率非常之高,多數(shù)語(yǔ)句生成的匯編代碼很緊湊,容易理解。在開(kāi)發(fā)大型軟件時(shí)更能體現(xiàn)高級(jí)語(yǔ)言的優(yōu)勢(shì)。下面詳細(xì)介紹 Keil C51 開(kāi)發(fā)系統(tǒng)各部分功能和使用。第二節(jié) Keil C51 單片機(jī)軟件開(kāi)發(fā)系統(tǒng)的整體結(jié)構(gòu)C51 工具包的整體結(jié)構(gòu),如圖(1)所示,其中uVision 與Ishell 分別是C51 forWindows 和for Dos 的集成開(kāi)發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個(gè)開(kāi)發(fā)流程。開(kāi)發(fā)人員可用IDE 本身或其它編輯器編輯C 或匯編源文件。然后分別由C51 及A51 編譯器編譯生成目標(biāo)文件(.OBJ)。目標(biāo)文件可由LIB51 創(chuàng)建生成庫(kù)文件,也可以與庫(kù)文件一起經(jīng)L51 連接定位生成絕對(duì)目標(biāo)文件(.ABS)。ABS 文件由OH51 轉(zhuǎn)換成標(biāo)準(zhǔn)的Hex 文件,以供調(diào)試器dScope51 或tScope51 使用進(jìn)行源代碼級(jí)調(diào)試,也可由仿真器使用直接對(duì)目標(biāo)板進(jìn)行調(diào)試,也可以直接寫(xiě)入程序存貯器如EPROM 中。圖(1) C51 工具包整體結(jié)構(gòu)圖第三節(jié) Keil C51 工具包的安裝81. C51 for Dos在 Windows 下直接運(yùn)行軟件包中DOS\C51DOS.exe 然后選擇安裝目錄即可。完畢后欲使系統(tǒng)正常工作須進(jìn)行以下操作(設(shè)C:\C51 為安裝目錄):修改 Autoexec.bat,加入path=C:\C51\BinSet C51LIB=C:\C51\LIBSet C51INC=C:\C51\INC然后運(yùn)行Autoexec.bat2. C51 for Windows 的安裝及注意事項(xiàng):在 Windows 下運(yùn)行軟件包中WIN\Setup.exe,最好選擇安裝目錄與C51 for Dos相同,這樣設(shè)置最簡(jiǎn)單(設(shè)安裝于C:\C51 目錄下)。然后將軟件包中crack 目錄中的文件拷入C:\C51\Bin 目錄下。第四節(jié) Keil C51 工具包各部分功能及使用簡(jiǎn)介1. C51 與A51(1) C51C51 是C 語(yǔ)言編譯器,其使用方法為:C51 sourcefile[編譯控制指令]或者 C51 @ commandfile其中 sourcefile 為C 源文件(.C)。大量的編譯控制指令完成C51 編譯器的全部功能。包控C51 輸出文件C.LST,.OBJ,.I 和.SRC 文件的控制。源文件(.C)的控制等,詳見(jiàn)第五部分的具體介紹。而 Commandfile 為一個(gè)連接控制文件其內(nèi)容包括:.C 源文件及各編譯控制指令,它沒(méi)有固定的名字,開(kāi)發(fā)人員可根據(jù)自己的習(xí)慣指定,它適于用控制指令較多的場(chǎng)合。(2) A51A51 是匯編語(yǔ)言編譯器,使用方法為:9A51 sourcefile[編譯控制指令]或 A51 @ commandfile其中sourcefile 為匯編源文件(.asm或.a51),而編譯控制指令的使用與其它匯編如ASM語(yǔ)言類似,可參考其他匯編語(yǔ)言材料。Commandfile 同C51 中的Commandfile 類似,它使A51 使用和修改方便。2. L51 和BL51(1) L51L51 是Keil C51 軟件包提供的連接/定位器,其功能是將編譯生成的OBJ 文件與庫(kù)文件連接定位生成絕對(duì)目標(biāo)文件(.ABS),其使用方法為:L51 目標(biāo)文件列表[庫(kù)文件列表] [to outputfile] [連接控制指令]或 L51 @Commandfile源程序的多個(gè)模塊分別經(jīng) C51 與A51 編譯后生成多個(gè)OBJ 文件,連接時(shí),這些文件全列于目標(biāo)文件列表中,作為輸入文件,如果還需與庫(kù)文件(.LiB)相連接,則庫(kù)文件也必須列在其后。outputfile 為輸文件名,缺少時(shí)為第一模塊名,后綴為.ABS。連接控制指令提供了連接定位時(shí)的所有控制功能。Commandfile 為連接控制文件,其具體內(nèi)容是包括了目標(biāo)文件列表,庫(kù)文件列表及輸出文件、連接控制命令,以取代第一種繁瑣的格式,由于目標(biāo)模塊庫(kù)文件大多不止1 個(gè),因而第2 種方法較多見(jiàn),這個(gè)文件名字也可由使用者隨意指定。(2) Bl51BL51 也是C51 軟件包的連接/定位器,其具有L51 的所有功能,此外它還具有以下3 點(diǎn)特別之處:a. 可以連接定位大于64kBytes 的程序。b. 具有代碼域及域切換功能(CodeBanking & Bank Switching)c. 可用于RTX51 操作系統(tǒng)RTX51 是一個(gè)實(shí)時(shí)多任務(wù)操作系統(tǒng),它改變了傳統(tǒng)的編程模式,甚至不必用main( )函數(shù),單片機(jī)系統(tǒng)軟件向RTOS 發(fā)展是一種趨勢(shì),這種趨勢(shì)對(duì)于186 和38610及68K 系列CPU 更為明顯和必須,對(duì)8051 因CPU 較為簡(jiǎn)單,程序結(jié)構(gòu)等都不太復(fù)雜,RTX51 作用顯得不太突出,其專業(yè)版軟件PK51 軟件包甚至不包括RTX51Full,而只有一個(gè)RTX51TINY 版本的RTOS。RTX51 TINY 適用于無(wú)外部RAM 的單片機(jī)系統(tǒng),因而可用面很窄,在本文中不作介紹。Bank switching 技術(shù)因使用很少也不作介紹。3. DScope51,Tscope51 及Monitor51(1) dScope51dScope51 是一個(gè)源級(jí)調(diào)試器和模擬器,它可以調(diào)試由C51 編譯器、A51 匯編器、PL/M-51 編譯器及ASM-51 匯編器產(chǎn)生的程序。它不需目標(biāo)板(for windows 也可通過(guò)mon51 接目標(biāo)板),只能進(jìn)行軟件模擬,但其功能強(qiáng)大,可模擬CPU 及其外圍器件,如內(nèi)部串口,外部I/O 及定時(shí)器等,能對(duì)嵌入式軟件功能進(jìn)行有效測(cè)試。
上傳時(shí)間: 2013-11-01
上傳用戶:zhouxuepeng1
單片機(jī)音樂(lè)中音調(diào)和節(jié)拍的確定方法:調(diào)號(hào)-音樂(lè)上指用以確定樂(lè)曲主音高度的符號(hào)。很明顯一個(gè)八度就有12個(gè)半音。A、B、C、D、E、F、G。經(jīng)過(guò)聲學(xué)家的研究,全世界都用這些字母來(lái)表示固定的音高。比如,A這個(gè)音,標(biāo)準(zhǔn)的音高為每秒鐘振動(dòng)440周。 升C調(diào):1=#C,也就是降D調(diào):1=BD;277(頻率)升D調(diào):1=#D,也就是降E調(diào):1=BE;311升F調(diào):1=#F,也就是降G調(diào):1=BG;369升G調(diào):1=#G,也就是降A(chǔ)調(diào):1=BA;415升A調(diào):1=#A,也就是降B調(diào):1=BB。466,C 262 #C277 D 294 #D(bE)311 E 330 F 349 #F369 G 392 #G415A 440. #A466 B 494 所謂1=A,就是說(shuō),這首歌曲的“導(dǎo)”要唱得同A一樣高,人們也把這首歌曲叫做A調(diào)歌曲,或叫“唱A調(diào)”。1=C,就是說(shuō),這首歌曲的“導(dǎo)”要唱得同C一樣高,或者說(shuō)“這歌曲唱C調(diào)”。同樣是“導(dǎo)”,不同的調(diào)唱起來(lái)的高低是不一樣的。各調(diào)的對(duì)應(yīng)的標(biāo)準(zhǔn)頻率為: 單片機(jī)演奏音樂(lè)時(shí)音調(diào)和節(jié)拍的確定方法 經(jīng)常看到一些剛學(xué)單片機(jī)的朋友對(duì)單片機(jī)演奏音樂(lè)比較有興趣,本人也曾是這樣。在此,本人將就這方面的知識(shí)做一些簡(jiǎn)介,但愿能對(duì)單片機(jī)演奏音樂(lè)比較有興趣而又不知其解的朋友能有所啟迪。 一般說(shuō)來(lái),單片機(jī)演奏音樂(lè)基本都是單音頻率,它不包含相應(yīng)幅度的諧波頻率,也就是說(shuō)不能象電子琴那樣能奏出多種音色的聲音。因此單片機(jī)奏樂(lè)只需弄清楚兩個(gè)概念即可,也就是“音調(diào)”和“節(jié)拍”。音調(diào)表示一個(gè)音符唱多高的頻率,節(jié)拍表示一個(gè)音符唱多長(zhǎng)的時(shí)間。 在音樂(lè)中所謂“音調(diào)”,其實(shí)就是我們常說(shuō)的“音高”。在音樂(lè)中常把中央C上方的A音定為標(biāo)準(zhǔn)音高,其頻率f=440Hz。當(dāng)兩個(gè)聲音信號(hào)的頻率相差一倍時(shí),也即f2=2f1時(shí),則稱f2比f(wàn)1高一個(gè)倍頻程, 在音樂(lè)中1(do)與 ,2(來(lái))與 ……正好相差一個(gè)倍頻程,在音樂(lè)學(xué)中稱它相差一個(gè)八度音。在一個(gè)八度音內(nèi),有12個(gè)半音。以1—i八音區(qū)為例, 12個(gè)半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5一#5、#5—6、6—#6、#6—7、7—i。這12個(gè)音階的分度基本上是以對(duì)數(shù)關(guān)系來(lái)劃分的。如果我們只要知道了這十二個(gè)音符的音高,也就是其基本音調(diào)的頻率,我們就可根據(jù)倍頻程的關(guān)系得到其他音符基本音調(diào)的頻率。 知道了一個(gè)音符的頻率后,怎樣讓單片機(jī)發(fā)出相應(yīng)頻率的聲音呢?一般說(shuō)來(lái),常采用的方法就是通過(guò)單片機(jī)的定時(shí)器定時(shí)中斷,將單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O口來(lái)回取反,或者說(shuō)來(lái)回清零,置位,從而讓蜂鳴器發(fā)出聲音,為了讓單片機(jī)發(fā)出不同頻率的聲音,我們只需將定時(shí)器予置不同的定時(shí)值就可實(shí)現(xiàn)。那么怎樣確定一個(gè)頻率所對(duì)應(yīng)的定時(shí)器的定時(shí)值呢?以標(biāo)準(zhǔn)音高A為例: A的頻率f = 440 Hz,其對(duì)應(yīng)的周期為:T = 1/ f = 1/440 =2272μs 由上圖可知,單片機(jī)上對(duì)應(yīng)蜂鳴器的I/O口來(lái)回取反的時(shí)間應(yīng)為:t = T/2 = 2272/2 = 1136μs這個(gè)時(shí)間t也就是單片機(jī)上定時(shí)器應(yīng)有的中斷觸發(fā)時(shí)間。一般情況下,單片機(jī)奏樂(lè)時(shí),其定時(shí)器為工作方式1,它以振蕩器的十二分頻信號(hào)為計(jì)數(shù)脈沖。設(shè)振蕩器頻率為f0,則定時(shí)器的予置初值由下式來(lái)確定: t = 12 *(TALL – THL)/ f0 式中TALL = 216 = 65536,THL為定時(shí)器待確定的計(jì)數(shù)初值。因此定時(shí)器的高低計(jì)數(shù)器的初值為: TH = THL / 256 = ( TALL – t* f0/12) / 256 TL = THL % 256 = ( TALL – t* f0/12) %256 將t=1136μs代入上面兩式(注意:計(jì)算時(shí)應(yīng)將時(shí)間和頻率的單位換算一致),即可求出標(biāo)準(zhǔn)音高A在單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)器高低計(jì)數(shù)器的予置初值為 : TH440Hz = (65536 – 1136 * 12/12) /256 = FBH TL440Hz = (65536 – 1136 * 12/12)%256 = 90H根據(jù)上面的求解方法,我們就可求出其他音調(diào)相應(yīng)的計(jì)數(shù)器的予置初值。 音符的節(jié)拍我們可以舉例來(lái)說(shuō)明。在一張樂(lè)譜中,我們經(jīng)常會(huì)看到這樣的表達(dá)式,如1=C 、1=G …… 等等,這里1=C,1=G表示樂(lè)譜的曲調(diào),和我們前面所談的音調(diào)有很大的關(guān)聯(lián), 、 就是用來(lái)表示節(jié)拍的。以 為例加以說(shuō)明,它表示樂(lè)譜中以四分音符為節(jié)拍,每一小結(jié)有三拍。比如: 其中1 、2 為一拍,3、4、5為一拍,6為一拍共三拍。1 、2的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),3、4的時(shí)長(zhǎng)為八分音符的一半,即為十六分音符長(zhǎng),5的時(shí)長(zhǎng)為四分音符的一半,即為八分音符長(zhǎng),6的時(shí)長(zhǎng)為四分音符長(zhǎng)。那么一拍到底該唱多長(zhǎng)呢?一般說(shuō)來(lái),如果樂(lè)曲沒(méi)有特殊說(shuō)明,一拍的時(shí)長(zhǎng)大約為400—500ms 。我們以一拍的時(shí)長(zhǎng)為400ms為例,則當(dāng)以四分音符為節(jié)拍時(shí),四分音符的時(shí)長(zhǎng)就為400ms,八分音符的時(shí)長(zhǎng)就為200ms,十六分音符的時(shí)長(zhǎng)就為100ms。可見(jiàn),在單片機(jī)上控制一個(gè)音符唱多長(zhǎng)可采用循環(huán)延時(shí)的方法來(lái)實(shí)現(xiàn)。首先,我們確定一個(gè)基本時(shí)長(zhǎng)的延時(shí)程序,比如說(shuō)以十六分音符的時(shí)長(zhǎng)為基本延時(shí)時(shí)間,那么,對(duì)于一個(gè)音符,如果它為十六分音符,則只需調(diào)用一次延時(shí)程序,如果它為八分音符,則只需調(diào)用二次延時(shí)程序,如果它為四分音符,則只需調(diào)用四次延時(shí)程序,依次類推。通過(guò)上面關(guān)于一個(gè)音符音調(diào)和節(jié)拍的確定方法,我們就可以在單片機(jī)上實(shí)現(xiàn)演奏音樂(lè)了。具體的實(shí)現(xiàn)方法為:將樂(lè)譜中的每個(gè)音符的音調(diào)及節(jié)拍變換成相應(yīng)的音調(diào)參數(shù)和節(jié)拍參數(shù),將他們做成數(shù)據(jù)表格,存放在存儲(chǔ)器中,通過(guò)程序取出一個(gè)音符的相關(guān)參數(shù),播放該音符,該音符唱完后,接著取出下一個(gè)音符的相關(guān)參數(shù)……,如此直到播放完畢最后一個(gè)音符,根據(jù)需要也可循環(huán)不停地播放整個(gè)樂(lè)曲。另外,對(duì)于樂(lè)曲中的休止符,一般將其音調(diào)參數(shù)設(shè)為FFH,F(xiàn)FH,其節(jié)拍參數(shù)與其他音符的節(jié)拍參數(shù)確定方法一致,樂(lè)曲結(jié)束用節(jié)拍參數(shù)為00H來(lái)表示。下面給出部分音符(三個(gè)八度音)的頻率以及以單片機(jī)晶振頻率f0=12Mhz,定時(shí)器在工作方式1下的定時(shí)器高低計(jì)數(shù)器的予置初值 : C調(diào)音符 頻率Hz 262 277 293 311 329 349 370 392 415 440 466 494TH/TL F88B F8F2 F95B F9B7 FA14 FA66 FAB9 FB03 FB4A FB8F FBCF FC0BC調(diào)音符 1 1# 2 2# 3 4 4# 5 5# 6 6# 7頻率Hz 523 553 586 621 658 697 739 783 830 879 931 987TH/TL FC43 FC78 FCAB FCDB FD08 FD33 FD5B FD81 FDA5 FDC7 FDE7 FE05C調(diào)音符 頻率Hz 1045 1106 1171 1241 1316 1393 1476 1563 1658 1755 1860 1971TH/TL FB21 FE3C FE55 FE6D FE84 FE99 FEAD FEC0 FE02 FEE3 FEF3 FF02
上傳時(shí)間: 2013-10-20
上傳用戶:哈哈haha
有兩種方式可以讓設(shè)備和應(yīng)用程序之間聯(lián)系:1. 通過(guò)為設(shè)備創(chuàng)建的一個(gè)符號(hào)鏈;2. 通過(guò)輸出到一個(gè)接口WDM驅(qū)動(dòng)程序建議使用輸出到一個(gè)接口而不推薦使用創(chuàng)建符號(hào)鏈的方法。這個(gè)接口保證PDO的安全,也保證安全地創(chuàng)建一個(gè)惟一的、獨(dú)立于語(yǔ)言的訪問(wèn)設(shè)備的方法。一個(gè)應(yīng)用程序使用Win32APIs來(lái)調(diào)用設(shè)備。在某個(gè)Win32 APIs和設(shè)備對(duì)象的分發(fā)函數(shù)之間存在一個(gè)映射關(guān)系。獲得對(duì)設(shè)備對(duì)象訪問(wèn)的第一步就是打開(kāi)一個(gè)設(shè)備對(duì)象的句柄。 用符號(hào)鏈打開(kāi)一個(gè)設(shè)備的句柄為了打開(kāi)一個(gè)設(shè)備,應(yīng)用程序需要使用CreateFile。如果該設(shè)備有一個(gè)符號(hào)鏈出口,應(yīng)用程序可以用下面這個(gè)例子的形式打開(kāi)句柄:hDevice = CreateFile("\\\\.\\OMNIPORT3", GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL ,NULL);文件路徑名的前綴“\\.\”告訴系統(tǒng)本調(diào)用希望打開(kāi)一個(gè)設(shè)備。這個(gè)設(shè)備必須有一個(gè)符號(hào)鏈,以便應(yīng)用程序能夠打開(kāi)它。有關(guān)細(xì)節(jié)查看有關(guān)Kdevice和CreateLink的內(nèi)容。在上述調(diào)用中第一個(gè)參數(shù)中前綴后的部分就是這個(gè)符號(hào)鏈的名字。注意:CreatFile中的第一個(gè)參數(shù)不是Windows 98/2000中驅(qū)動(dòng)程序(.sys文件)的路徑。是到設(shè)備對(duì)象的符號(hào)鏈。如果使用DriverWizard產(chǎn)生驅(qū)動(dòng)程序,它通常使用類KunitizedName來(lái)構(gòu)成設(shè)備的符號(hào)鏈。這意味著符號(hào)鏈名有一個(gè)附加的數(shù)字,通常是0。例如:如果鏈接名稱的主干是L“TestDevice”那么在CreateFile中的串就該是“\\\\.\\TestDevice0”。如果應(yīng)用程序需要被覆蓋的I/O,第六個(gè)參數(shù)(Flags)必須或上FILE_FLAG_OVERLAPPED。 使用一個(gè)輸出接口打開(kāi)句柄用這種方式打開(kāi)一個(gè)句柄會(huì)稍微麻煩一些。DriverWorks庫(kù)提供兩個(gè)助手類來(lái)使獲得對(duì)該接口的訪問(wèn)容易一些,這兩個(gè)類是CDeviceInterface, 和 CdeviceInterfaceClass。CdeviceInterfaceClass類封裝了一個(gè)設(shè)備信息集,該信息集包含了特殊類中的所有設(shè)備接口信息。應(yīng)用程序能有用CdeviceInterfaceClass類的一個(gè)實(shí)例來(lái)獲得一個(gè)或更多的CdeviceInterface類的實(shí)例。CdeviceInterface類是一個(gè)單一設(shè)備接口的抽象。它的成員函數(shù)DevicePath()返回一個(gè)路徑名的指針,該指針可以在CreateFile中使用來(lái)打開(kāi)設(shè)備。下面用一個(gè)小例子來(lái)顯示這些類最基本的使用方法:extern GUID TestGuid;HANDLE OpenByInterface( GUID* pClassGuid, DWORD instance, PDWORD pError){ CDeviceInterfaceClass DevClass(pClassGuid, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; CDeviceInterface DevInterface(&DevClass, instance, pError); if (*pError != ERROR_SUCCESS) return INVALID_HANDLE_VALUE; cout << "The device path is " << DevInterface.DevicePath() << endl; HANDLE hDev; hDev = CreateFile( DevInterface.DevicePath(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (hDev == INVALID_HANDLE_VALUE) *pError = GetLastError(); return hDev;} 在設(shè)備中執(zhí)行I/O操作一旦應(yīng)用程序獲得一個(gè)有效的設(shè)備句柄,它就能使用Win32 APIs來(lái)產(chǎn)生到設(shè)備對(duì)象的IRPs。下面的表顯示了這種對(duì)應(yīng)關(guān)系。Win32 API DRIVER_FUNCTION_xxxIRP_MJ_xxx KDevice subclass member function CreateFile CREATE Create ReadFile READ Read WriteFile WRITE Write DeviceIoControl DEVICE_CONTROL DeviceControl CloseHandle CLOSECLEANUP CloseCleanUp 需要解釋一下設(shè)備類成員的Close和CleanUp:CreateFile使內(nèi)核為設(shè)備創(chuàng)建一個(gè)新的文件對(duì)象。這使得多個(gè)句柄可以映射同一個(gè)文件對(duì)象。當(dāng)這個(gè)文件對(duì)象的最后一個(gè)用戶級(jí)句柄被撤銷后,I/O管理器調(diào)用CleanUp。當(dāng)沒(méi)有任何用戶級(jí)和核心級(jí)的對(duì)文件對(duì)象的訪問(wèn)的時(shí)候,I/O管理器調(diào)用Close。如果被打開(kāi)的設(shè)備不支持指定的功能,則調(diào)用相應(yīng)的Win32將引起錯(cuò)誤(無(wú)效功能)。以前為Windows95編寫(xiě)的VxD的應(yīng)用程序代碼中可能會(huì)在打開(kāi)設(shè)備的時(shí)候使用FILE_FLAG_DELETE_ON_CLOSE屬性。在Windows NT/2000中,建議不要使用這個(gè)屬性,因?yàn)樗鼘?dǎo)致沒(méi)有特權(quán)的用戶企圖打開(kāi)這個(gè)設(shè)備,這是不可能成功的。I/O管理器將ReadFile和WriteFile的buff參數(shù)轉(zhuǎn)換成IRP域的方法依賴于設(shè)備對(duì)象的屬性。當(dāng)設(shè)備設(shè)置DO_DIRECT_IO標(biāo)志,I/O管理器將buff鎖住在存儲(chǔ)器中,并且創(chuàng)建了一個(gè)存儲(chǔ)在IRP中的MDL域。一個(gè)設(shè)備可以通過(guò)調(diào)用Kirp::Mdl來(lái)存取MDL。當(dāng)設(shè)備設(shè)置DO_BUFFERED_IO標(biāo)志,設(shè)備對(duì)象分別通過(guò)KIrp::BufferedReadDest或 KIrp::BufferedWriteSource為讀或?qū)懖僮鳙@得buff地址。當(dāng)設(shè)備不設(shè)置DO_BUFFERED_IO標(biāo)志也不設(shè)置DO_DIRECT_IO,內(nèi)核設(shè)置IRP 的UserBuffer域來(lái)對(duì)應(yīng)ReadFile或WriteFile中的buff參數(shù)。然而,存儲(chǔ)區(qū)并沒(méi)有被鎖住而且地址只對(duì)調(diào)用進(jìn)程有效。驅(qū)動(dòng)程序可以使用KIrp::UserBuffer來(lái)存取IRP域。對(duì)于DeviceIoControl調(diào)用,buffer參數(shù)的轉(zhuǎn)換依賴于特殊的I/O控制代碼,它不在設(shè)備對(duì)象的特性中。宏CTL_CODE(在winioctl.h中定義)用來(lái)構(gòu)造控制代碼。這個(gè)宏的其中一個(gè)參數(shù)指明緩沖方法是METHOD_BUFFERED, METHOD_IN_DIRECT, METHOD_OUT_DIRECT, 或METHOD_NEITHER。下面的表顯示了這些方法和與之對(duì)應(yīng)的能獲得輸入緩沖與輸出緩沖的KIrp中的成員函數(shù):Method Input Buffer Parameter Output Buffer Parameter METHOD_BUFFERED KIrp::IoctlBuffer KIrp::IoctlBuffer METHOD_IN_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_OUT_DIRECT KIrp::IoctlBuffer KIrp::Mdl METHOD_NEITHER KIrp::IoctlType3InputBuffer KIrp::UserBuffer 如果控制代碼指明METHOD_BUFFERED,系統(tǒng)分配一個(gè)單一的緩沖來(lái)作為輸入與輸出。驅(qū)動(dòng)程序必須在向輸出緩沖放數(shù)據(jù)之前拷貝輸入數(shù)據(jù)。驅(qū)動(dòng)程序通過(guò)調(diào)用KIrp::IoctlBuffer獲得緩沖地址。在完成時(shí),I/O管理器從系統(tǒng)緩沖拷貝數(shù)據(jù)到提供給Ring 3級(jí)調(diào)用者使用的緩沖中。驅(qū)動(dòng)程序必須在結(jié)束前存儲(chǔ)拷貝到IRP的Information成員中的數(shù)據(jù)個(gè)數(shù)。如果控制代碼不指明METHOD_IN_DIRECT或METHOD_OUT_DIRECT,則DeviceIoControl的參數(shù)呈現(xiàn)不同的含義。參數(shù)InputBuffer被拷貝到一個(gè)系統(tǒng)緩沖,這個(gè)緩沖驅(qū)動(dòng)程序可以通過(guò)調(diào)用KIrp::IoctlBuffer。參數(shù)OutputBuffer被映射到KMemory對(duì)象,驅(qū)動(dòng)程序?qū)@個(gè)對(duì)象的訪問(wèn)通過(guò)調(diào)用KIrp::Mdl來(lái)實(shí)現(xiàn)。對(duì)于METHOD_OUT_DIRECT,調(diào)用者必須有對(duì)緩沖的寫(xiě)訪問(wèn)權(quán)限。注意,對(duì)METHOD_NEITHER,內(nèi)核只提供虛擬地址;它不會(huì)做映射來(lái)配置緩沖。虛擬地址只對(duì)調(diào)用進(jìn)程有效。這里是一個(gè)用METHOD_BUFFERED的例子:首先,使用宏CTL_CODE來(lái)定義一個(gè)IOCTL代碼:#define IOCTL_MYDEV_GET_FIRMWARE_REV \CTL_CODE (FILE_DEVICE_UNKNOWN,0,METHOD_BUFFERED,FILE_ANY_ACCESS)現(xiàn)在使用一個(gè)DeviceIoControl調(diào)用:BOOLEAN b;CHAR FirmwareRev[60];ULONG FirmwareRevSize;b = DeviceIoControl(hDevice, IOCTL_MYDEV_GET_VERSION_STRING, NULL, // no input 注意,這里放的是包含有執(zhí)行操作命令的字符串指針 0, FirmwareRev, //這里是output串指針,存放從驅(qū)動(dòng)程序中返回的字符串。sizeof(FirmwareRev),& FirmwareRevSize, NULL // not overlapped I/O );如果輸出緩沖足夠大,設(shè)備拷貝串到里面并將拷貝的資結(jié)束設(shè)置到FirmwareRevSize中。在驅(qū)動(dòng)程序中,代碼看起來(lái)如下所示:const char* FIRMWARE_REV = "FW 16.33 v5";NTSTATUS MyDevice::DeviceControl( KIrp I ){ ULONG fwLength=0; switch ( I.IoctlCode() ) { case IOCTL_MYDEV_GET_FIRMWARE_REV: fwLength = strlen(FIRMWARE_REV)+1; if (I.IoctlOutputBufferSize() >= fwLength) { strcpy((PCHAR)I.IoctlBuffer(),FIRMWARE_REV); I.Information() = fwLength; return I.Complete(STATUS_SUCCESS); } else { } case . . . } }
標(biāo)簽: 驅(qū)動(dòng)程序 應(yīng)用程序 接口
上傳時(shí)間: 2013-10-17
上傳用戶:gai928943
微處理器及微型計(jì)算機(jī)的發(fā)展概況 第一代微處理器是以Intel公司1971年推出的4004,4040為代表的四位微處理機(jī)。 第二代微處理機(jī)(1973年~1977年),典型代表有:Intel 公司的8080、8085;Motorola公司的M6800以及Zlog公司的Z80。 第三代微處理機(jī) 第三代微機(jī)是以16位機(jī)為代表,基本上是在第二代微機(jī)的基礎(chǔ)上發(fā)展起來(lái)的。其中Intel公司的8088。8086是在8085的基礎(chǔ)發(fā)展起來(lái)的;M68000是Motorola公司在M6800 的基礎(chǔ)發(fā)展起來(lái)的; 第四代微處理機(jī) 以Intel公司1984年10月推出的80386CPU和1989年4月推出的80486CPU為代表, 第五代微處理機(jī)的發(fā)展更加迅猛,1993年3月被命名為PENTIUM的微處理機(jī)面世,98年P(guān)ENTIUM 2又被推向市場(chǎng)。 INTEL CPU 發(fā)展歷史Intel第一塊CPU 4004,4位主理器,主頻108kHz,運(yùn)算速度0.06MIPs(Million Instructions Per Second, 每秒百萬(wàn)條指令),集成晶體管2,300個(gè),10微米制造工藝,最大尋址內(nèi)存640 bytes,生產(chǎn)曰期1971年11月. 8085,8位主理器,主頻5M,運(yùn)算速度0.37MIPs,集成晶體管6,500個(gè),3微米制造工藝,最大尋址內(nèi)存64KB,生產(chǎn)曰期1976年 8086,16位主理器,主頻4.77/8/10MHZ,運(yùn)算速度0.75MIPs,集成晶體管29,000個(gè),3微米制造工藝,最大尋址內(nèi)存1MB,生產(chǎn)曰期1978年6月. 80486DX,DX2,DX4,32位主理器,主頻25/33/50/66/75/100MHZ,總線頻率33/50/66MHZ,運(yùn)算速度20~60MIPs,集成晶體管1.2M個(gè),1微米制造工藝,168針PGA,最大尋址內(nèi)存4GB,緩存8/16/32/64KB,生產(chǎn)曰期1989年4月 Celeron一代, 主頻266/300MHZ(266/300MHz w/o L2 cache, Covington芯心 (Klamath based),300A/333/366/400/433/466/500/533MHz w/128kB L2 cache, Mendocino核心 (Deschutes-based), 總線頻率66MHz,0.25微米制造工藝,生產(chǎn)曰期1998年4月) Pentium 4 (478針),至今分為三種核心:Willamette核心(主頻1.5G起,FSB400MHZ,0.18微米制造工藝),Northwood核心(主頻1.6G~3.0G,FSB533MHZ,0.13微米制造工藝, 二級(jí)緩存512K),Prescott核心(主頻2.8G起,FSB800MHZ,0.09微米制造工藝,1M二級(jí)緩存,13條全新指令集SSE3),生產(chǎn)曰期2001年7月. 更大的緩存、更高的頻率、 超級(jí)流水線、分支預(yù)測(cè)、亂序執(zhí)行超線程技術(shù) 微型計(jì)算機(jī)組成結(jié)構(gòu)單片機(jī)簡(jiǎn)介單片機(jī)即單片機(jī)微型計(jì)算機(jī),是將計(jì)算機(jī)主機(jī)(CPU、 內(nèi)存和I/O接口)集成在一小塊硅片上的微型機(jī)。 三、計(jì)算機(jī)編程語(yǔ)言的發(fā)展概況 機(jī)器語(yǔ)言 機(jī)器語(yǔ)言就是0,1碼語(yǔ)言,是計(jì)算機(jī)唯一能理解并直接執(zhí)行的語(yǔ)言。匯編語(yǔ)言 用一些助記符號(hào)代替用0,1碼描述的某種機(jī)器的指令系統(tǒng),匯編語(yǔ)言就是在此基礎(chǔ)上完善起來(lái)的。高級(jí)語(yǔ)言 BASIC,PASCAL,C語(yǔ)言等等。用高級(jí)語(yǔ)言編寫(xiě)的程序稱源程序,它們必須通過(guò)編譯或解釋,連接等步驟才能被計(jì)算機(jī)處理。 面向?qū)ο笳Z(yǔ)言 C++,Java等編程語(yǔ)言是面向?qū)ο蟮恼Z(yǔ)言。 1.3 微型計(jì)算機(jī)中信息的表示及運(yùn)算基礎(chǔ)(一) 十進(jìn)制ND有十個(gè)數(shù)碼:0~9,逢十進(jìn)一。 例 1234.5=1×103 +2×102 +3×101 +4×100 +5×10-1加權(quán)展開(kāi)式以10稱為基數(shù),各位系數(shù)為0~9,10i為權(quán)。 一般表達(dá)式:ND= dn-1×10n-1+dn-2×10n-2 +…+d0×100 +d-1×10-1+… (二) 二進(jìn)制NB兩個(gè)數(shù)碼:0、1, 逢二進(jìn)一。 例 1101.101=1×23+1×22+0×21+1×20+1×2-1+1×2-3 加權(quán)展開(kāi)式以2為基數(shù),各位系數(shù)為0、1, 2i為權(quán)。 一般表達(dá)式: NB = bn-1×2n-1 + bn-2×2n-2 +…+b0×20 +b-1×2-1+… (三)十六進(jìn)制NH十六個(gè)數(shù)碼0~9、A~F,逢十六進(jìn)一。 例:DFC.8=13×162 +15×161 +12×160 +8×16-1 展開(kāi)式以十六為基數(shù),各位系數(shù)為0~9,A~F,16i為權(quán)。 一般表達(dá)式: NH= hn-1×16n-1+ hn-2×16n-2+…+ h0×160+ h-1×16-1+… 二、不同進(jìn)位計(jì)數(shù)制之間的轉(zhuǎn)換 (二)二進(jìn)制與十六進(jìn)制數(shù)之間的轉(zhuǎn)換 24=16 ,四位二進(jìn)制數(shù)對(duì)應(yīng)一位十六進(jìn)制數(shù)。舉例:(三)十進(jìn)制數(shù)轉(zhuǎn)換成二、十六進(jìn)制數(shù)整數(shù)、小數(shù)分別轉(zhuǎn)換 1.整數(shù)轉(zhuǎn)換法“除基取余”:十進(jìn)制整數(shù)不斷除以轉(zhuǎn)換進(jìn)制基數(shù),直至商為0。每除一次取一個(gè)余數(shù),從低位排向高位。舉例: 2. 小數(shù)轉(zhuǎn)換法“乘基取整”:用轉(zhuǎn)換進(jìn)制的基數(shù)乘以小數(shù)部分,直至小數(shù)為0或達(dá)到轉(zhuǎn)換精度要求的位數(shù)。每乘一次取一次整數(shù),從最高位排到最低位。舉例: 三、帶符號(hào)數(shù)的表示方法 機(jī)器數(shù):機(jī)器中數(shù)的表示形式。真值: 機(jī)器數(shù)所代表的實(shí)際數(shù)值。舉例:一個(gè)8位機(jī)器數(shù)與它的真值對(duì)應(yīng)關(guān)系如下: 真值: X1=+84=+1010100B X2=-84= -1010100B 機(jī)器數(shù):[X1]機(jī)= 01010100 [X2]機(jī)= 11010100(二)原碼、反碼、補(bǔ)碼最高位為符號(hào)位,0表示 “+”,1表示“-”。 數(shù)值位與真值數(shù)值位相同。 例 8位原碼機(jī)器數(shù): 真值: x1 = +1010100B x2 =- 1010100B 機(jī)器數(shù): [x1]原 = 01010100 [x2]原 = 11010100原碼表示簡(jiǎn)單直觀,但0的表示不唯一,加減運(yùn)算復(fù)雜。 正數(shù)的反碼與原碼表示相同。 負(fù)數(shù)反碼符號(hào)位為 1,數(shù)值位為原碼數(shù)值各位取反。 例 8位反碼機(jī)器數(shù): x= +4: [x]原= 00000100 [x]反= 00000100 x= -4: [x]原= 10000100 [x]反= 111110113、補(bǔ)碼(Two’s Complement)正數(shù)的補(bǔ)碼表示與原碼相同。 負(fù)數(shù)補(bǔ)碼等于2n-abs(x)8位機(jī)器數(shù)表示的真值四、 二進(jìn)制編碼例:求十進(jìn)制數(shù)876的BCD碼 876= 1000 0111 0110 BCD 876= 36CH = 1101101100B 2、字符編碼 美國(guó)標(biāo)準(zhǔn)信息交換碼ASCII碼,用于計(jì)算 機(jī)與計(jì)算機(jī)、計(jì)算機(jī)與外設(shè)之間傳遞信息。 3、漢字編碼 “國(guó)家標(biāo)準(zhǔn)信息交換用漢字編碼”(GB2312-80標(biāo)準(zhǔn)),簡(jiǎn)稱國(guó)標(biāo)碼。 用兩個(gè)七位二進(jìn)制數(shù)編碼表示一個(gè)漢字 例如“巧”字的代碼是39H、41H漢字內(nèi)碼例如“巧”字的代碼是0B9H、0C1H1·4 運(yùn)算基礎(chǔ) 一、二進(jìn)制數(shù)的運(yùn)算加法規(guī)則:“逢2進(jìn)1” 減法規(guī)則:“借1當(dāng)2” 乘法規(guī)則:“逢0出0,全1出1”二、二—十進(jìn)制數(shù)的加、減運(yùn)算 BCD數(shù)的運(yùn)算規(guī)則 循十進(jìn)制數(shù)的運(yùn)算規(guī)則“逢10進(jìn)1”。但計(jì)算機(jī)在進(jìn)行這種運(yùn)算時(shí)會(huì)出現(xiàn)潛在的錯(cuò)誤。為了解決BCD數(shù)的運(yùn)算問(wèn)題,采取調(diào)整運(yùn)算結(jié)果的措施:即“加六修正”和“減六修正”例:10001000(BCD)+01101001(BCD) =000101010111(BCD) 1 0 0 0 1 0 0 0 + 0 1 1 0 1 0 0 1 1 1 1 1 0 0 0 1 + 0 1 1 0 0 1 1 0 ……調(diào)整 1 0 1 0 1 0 1 1 1 進(jìn)位 例: 10001000(BCD)- 01101001(BCD)= 00011001(BCD) 1 0 0 0 1 0 0 0 - 0 1 1 0 1 0 0 1 0 0 0 1 1 1 1 1 - 0 1 1 0 ……調(diào)整 0 0 0 1 1 0 0 1 三、 帶符號(hào)二進(jìn)制數(shù)的運(yùn)算 1.5 幾個(gè)重要的數(shù)字邏輯電路編碼器譯碼器計(jì)數(shù)器微機(jī)自動(dòng)工作的條件程序指令順序存放自動(dòng)跟蹤指令執(zhí)行1.6 微機(jī)基本結(jié)構(gòu)微機(jī)結(jié)構(gòu)各部分組成連接方式1、以CPU為中心的雙總線結(jié)構(gòu);2、以內(nèi)存為中心的雙總線結(jié)構(gòu);3、單總線結(jié)構(gòu)CPU結(jié)構(gòu)管腳特點(diǎn) 1、多功能;2、分時(shí)復(fù)用內(nèi)部結(jié)構(gòu) 1、控制; 2、運(yùn)算; 3、寄存器; 4、地址程序計(jì)數(shù)器堆棧定義 1、定義;2、管理;3、堆棧形式
上傳時(shí)間: 2013-10-17
上傳用戶:erkuizhang
摘要: 串行傳輸技術(shù)具有更高的傳輸速率和更低的設(shè)計(jì)成本, 已成為業(yè)界首選, 被廣泛應(yīng)用于高速通信領(lǐng)域。提出了一種新的高速串行傳輸接口的設(shè)計(jì)方案, 改進(jìn)了Aurora 協(xié)議數(shù)據(jù)幀格式定義的弊端, 并采用高速串行收發(fā)器Rocket I/O, 實(shí)現(xiàn)數(shù)據(jù)率為2.5 Gbps的高速串行傳輸。關(guān)鍵詞: 高速串行傳輸; Rocket I/O; Aurora 協(xié)議 為促使FPGA 芯片與串行傳輸技術(shù)更好地結(jié)合以滿足市場(chǎng)需求, Xilinx 公司適時(shí)推出了內(nèi)嵌高速串行收發(fā)器RocketI/O 的Virtex II Pro 系列FPGA 和可升級(jí)的小型鏈路層協(xié)議———Aurora 協(xié)議。Rocket I/O支持從622 Mbps 至3.125 Gbps的全雙工傳輸速率, 還具有8 B/10 B 編解碼、時(shí)鐘生成及恢復(fù)等功能, 可以理想地適用于芯片之間或背板的高速串行數(shù)據(jù)傳輸。Aurora 協(xié)議是為專有上層協(xié)議或行業(yè)標(biāo)準(zhǔn)的上層協(xié)議提供透明接口的第一款串行互連協(xié)議, 可用于高速線性通路之間的點(diǎn)到點(diǎn)串行數(shù)據(jù)傳輸, 同時(shí)其可擴(kuò)展的帶寬, 為系統(tǒng)設(shè)計(jì)人員提供了所需要的靈活性[4]。但該協(xié)議幀格式的定義存在弊端,會(huì)導(dǎo)致系統(tǒng)資源的浪費(fèi)。本文提出的設(shè)計(jì)方案可以改進(jìn)Aurora 協(xié)議的固有缺陷,提高系統(tǒng)性能, 實(shí)現(xiàn)數(shù)據(jù)率為2.5 Gbps 的高速串行傳輸, 具有良好的可行性和廣闊的應(yīng)用前景。
標(biāo)簽: Rocket 2.5 高速串行 收發(fā)器
上傳時(shí)間: 2013-11-06
上傳用戶:smallfish
TKS仿真器B系列快速入門(mén)
上傳時(shí)間: 2013-10-31
上傳用戶:aix008
本書(shū)介紹Linux環(huán)境下的編程方法,內(nèi)容包括Linux系統(tǒng)命令、 Shell腳本、編程語(yǔ)言(gawk、Perl)、系統(tǒng)內(nèi)核、安全體系、X Window等,內(nèi)容豐富、論述全面,涵蓋了Linux系統(tǒng)的方方面面。本書(shū)附帶光盤(pán)包括了RedHat Linux系統(tǒng)的最新版本,及安裝方法,還包括本書(shū)的大量程序代碼,極大地方便了讀者,為使用和將要使用Linux系統(tǒng)的技術(shù)人員提供了較全面的參考。 目 錄前言第一篇 Linux系統(tǒng)介紹第1章 Linux簡(jiǎn)介 …11.1 Linux 的起源 11.2 自由軟件基金會(huì)的GNU計(jì)劃 11.3 Linux 的發(fā)音 21.4 Linux 的特點(diǎn) 21.5 基本硬件要求 31.6 如何獲得Linux 31.6.1 從網(wǎng)上下載Linux 31.6.2 從光盤(pán)獲得Linux 31.7 涉及Linux 的Web 網(wǎng)址和新聞?dòng)懻摻M 61.8 Linux 的不足之處 7第2章 外殼及常用命令 82.1 登錄和退出 82.2 Linux 系統(tǒng)的外殼 82.3 外殼的常用命令 92.3.1 更改帳號(hào)密碼 92.3.2 聯(lián)機(jī)幫助 92.3.3 遠(yuǎn)程登錄 92.3.4 文件或目錄處理 92.3.5 改變工作目錄 102.3.6 復(fù)制文件 102.3.7 移動(dòng)或更改文件、目錄名稱 102.3.8 建立新目錄 102.3.9 刪除目錄 112.3.10 刪除文件 112.3.11 列出當(dāng)前所在的目錄位置 112.3.12 查看文件內(nèi)容 112.3.13 分頁(yè)查看文件內(nèi)容 112.3.14 查看目錄所占磁盤(pán)容量 112.3.15 文件傳輸 112.3.16 文件權(quán)限的設(shè)定 122.3.17 檢查自己所屬的工作組名稱 132.3.18 改變文件或目錄工作組所有權(quán) 132.3.19 改變文件或目錄的最后修改時(shí)間 132.3.20 文件的鏈接 132.3.21 文件中字符串的查尋 142.3.22 查尋文件或命令的路徑 142.3.23 比較文件或目錄的內(nèi)容 142.3.24 文件打印輸出 142.3.25 一般文件的打印 142.3.26 troff 文件的打印 142.3.27 打印機(jī)控制命令 142.3.28 進(jìn)程控制 152.3.29 外殼變量 162.3.30 環(huán)境變量 162.3.31 別名 162.3.32 歷史命令 172.3.33 文件的壓縮 172.3.34 管道命令的使用 172.3.35 輸入/輸出控制 182.3.36 查看系統(tǒng)中的用戶 182.3.37 改變用戶名 182.3.38 查看用戶名 182.3.39 查看當(dāng)前系統(tǒng)上所有工作站 的用戶 192.3.40 與某工作站上的用戶交談 192.3.41 檢查遠(yuǎn)程系統(tǒng)是否正常 192.3.42 電子郵件的使用簡(jiǎn)介 19第3章 Linux系統(tǒng)的網(wǎng)絡(luò)功能 213.1 Linux支持的網(wǎng)絡(luò)協(xié)議 213.1.1 TCP/IP 213.1.2 TCP/IP 版本 6 213.1.3 IPX/SPX 213.1.4 AppleTalk 協(xié)議集 213.1.5 廣域網(wǎng) 223.1.6 ISDN 223.1.7 PPP、SLIP及PLIP 223.1.8 業(yè)余無(wú)線電 223.1.9 ATM 223.2 Linux系統(tǒng)下的文件共享和打印共享 223.2.1 Machintosh 環(huán)境 223.2.2 Windows 環(huán)境 223.2.3 Novell 環(huán)境 233.2.4 UNIX 環(huán)境 233.3 Linux系統(tǒng)中的Internet/Intranet功能 233.3.1 郵件 233.3.2 Web 服務(wù)器 243.3.3 Web 瀏覽器 243.3.4 FTP 服務(wù)器和客戶機(jī) 243.3.5 新聞服務(wù) 243.3.6 域名系統(tǒng) 243.3.7 DHCP和 bootp 243.3.8 NIS 243.4 Linux系統(tǒng)下應(yīng)用程序的遠(yuǎn)程執(zhí)行 243.4.1 Telnet 253.4.2 遠(yuǎn)程命令 253.4.3 X Window 253.5 Linux系統(tǒng)的網(wǎng)絡(luò)互連功能 253.5.1 路由器 253.5.2 網(wǎng)橋 253.5.3 IP偽裝 253.5.4 IP統(tǒng)計(jì) 263.5.5 IP 別名 263.5.6 流量限制器 263.5.7 防火墻 263.5.8 端口下傳 263.5.9 負(fù)載平衡 263.5.10 EQL 273.5.11 代理服務(wù)器 273.5.12 按需撥號(hào) 273.5.13 管道、移動(dòng)IP和虛擬個(gè)人網(wǎng)絡(luò) 273.6 Linux系統(tǒng)中的網(wǎng)絡(luò)管理 273.6.1 Linux系統(tǒng)下的網(wǎng)絡(luò)管理應(yīng)用程序 273.6.2 SNMP 283.7 企業(yè)級(jí)Linux網(wǎng)絡(luò) 283.7.1 高可用性 283.7.2 RAID 283.7.3 冗余網(wǎng)絡(luò) 28第4章 Linux系統(tǒng)管理簡(jiǎn)介 294.1 root 帳號(hào) 294.2 啟動(dòng)和關(guān)閉系統(tǒng) 294.2.1 從軟盤(pán)啟動(dòng) 294.2.2 使用LILO 啟動(dòng) 294.2.3 關(guān)閉Linux系統(tǒng) 304.3 掛接文件系統(tǒng) 304.3.1 掛接軟盤(pán) 304.3.2 創(chuàng)建新的文件系統(tǒng) 304.3.3 卸載文件系統(tǒng) 314.4 檢查文件系統(tǒng) 314.5 使用文件作為交換區(qū) 314.6 系統(tǒng)和文件的備份 324.7 設(shè)置系統(tǒng) 334.7.1 設(shè)置系統(tǒng)名 334.7.2 使用維護(hù)磁盤(pán) 334.7.3 重新設(shè)置root 帳號(hào)口令 334.7.4 設(shè)置登錄信息 33第二篇 Linux高級(jí)語(yǔ)言及管理編程第5章 外殼編程 355.1 創(chuàng)建和運(yùn)行外殼程序 355.1.1 創(chuàng)建外殼程序 355.1.2 運(yùn)行外殼程序 355.2 使用外殼變量 365.2.1 給變量賦值 365.2.2 讀取變量的值 375.2.3 位置變量和其他系統(tǒng)變量 375.2.4 引號(hào)的作用 375.3 數(shù)值運(yùn)算命令 385.4 條件表達(dá)式 405.4.1 if 表達(dá)式 405.4.2 case 表達(dá)式 415.5 循環(huán)語(yǔ)句 425.5.1 for 語(yǔ)句 435.5.2 while 語(yǔ)句 435.5.3 until 語(yǔ)句 445.6 shift 命令 445.7 select 語(yǔ)句 455.8 repeat 語(yǔ)句 465.9 子函數(shù) 46第6章 gawk語(yǔ)言編程 486.1 gawk的主要功能 486.2 如何執(zhí)行g(shù)awk程序 486.3 文件、記錄和字段 486.4 模式和動(dòng)作 496.5 比較運(yùn)算和數(shù)值運(yùn)算 506.6 內(nèi)部函數(shù) 506.6.1 隨機(jī)數(shù)和數(shù)學(xué)函數(shù) 516.6.2 字符串的內(nèi)部函數(shù) 516.6.3 輸入輸出的內(nèi)部函數(shù) 526.7 字符串和數(shù)字 526.8 格式化輸出 526.9 改變字段分隔符 546.10 元字符 546.11 調(diào)用gawk程序 556.12 BEGIN和END 556.13 變量 566.14 內(nèi)置變量 566.15 控制結(jié)構(gòu) 576.15.1 if 表達(dá)式 576.15.2 while 循環(huán) 576.15.3 for 循環(huán) 586.15.4 next 和 exit 586.16 數(shù)組 586.17 用戶自定義函數(shù) 586.18 幾個(gè)實(shí)例 59第7章 Perl語(yǔ)言編程 607.1 什么是Perl 607.2 Perl的現(xiàn)狀 607.3 初試Perl 607.4 Perl變量 607.4.1 標(biāo)量 607.4.2 數(shù)組 637.4.3 相關(guān)數(shù)組 657.5 文件句柄和文件操作 657.6 循環(huán)結(jié)構(gòu) 667.6.1 foreach循環(huán) 667.6.2 判斷運(yùn)算 667.6.3 for循環(huán) 677.6.4 while 和 until循環(huán) 677.7 條件結(jié)構(gòu) 677.8 字符匹配 687.9 替換和翻譯 697.9.1 替換 697.9.2 翻譯 707.10 子過(guò)程 707.10.1 子過(guò)程的定義 707.10.2 參數(shù) 707.10.3 返回值 707.11 Perl程序的完整例子 71第三篇 Linux系統(tǒng)內(nèi)核分析第8章 Linux內(nèi)核簡(jiǎn)介 738.1 系統(tǒng)初始化 738.2 系統(tǒng)運(yùn)行 738.3 內(nèi)核提供的各種系統(tǒng)調(diào)用 748.3.1 進(jìn)程的基本概念和系統(tǒng) 的基本數(shù)據(jù)結(jié)構(gòu) 748.3.2 創(chuàng)建和撤消進(jìn)程 748.3.3 執(zhí)行程序 748.4 存取文件系統(tǒng) 75第9章 系統(tǒng)進(jìn)程 769.1 什么是進(jìn)程 769.2 進(jìn)程的結(jié)構(gòu) 769.3 進(jìn)程調(diào)度 789.4 進(jìn)程使用的文件 799.5 進(jìn)程使用的虛擬內(nèi)存 809.6 創(chuàng)建進(jìn)程 819.7 進(jìn)程的時(shí)間和計(jì)時(shí)器 819.7.1 實(shí)時(shí)時(shí)鐘 819.7.2 虛擬時(shí)鐘 819.7.3 形象時(shí)鐘 819.8 程序的執(zhí)行 829.8.1 ELF文件 829.8.2 腳本文件 82第10章 內(nèi)存管理 8310.1 內(nèi)存管理的作用 8310.2 虛擬內(nèi)存的抽象模型 8310.3 按需裝入頁(yè)面 8410.4 交換 8510.5 共享虛擬內(nèi)存 8510.6 存取控制 8510.7 高速緩存 8610.7.1 緩沖區(qū)高速緩存 8610.7.2 頁(yè)面高速緩存 8610.7.3 交換高速緩存 8610.7.4 硬件高速緩存 8610.8 系統(tǒng)頁(yè)面表 8610.9 頁(yè)面的分配和釋放 8710.9.1 頁(yè)面的分配 8810.9.2 頁(yè)面的釋放 8810.10 內(nèi)存映射 8810.11 請(qǐng)求調(diào)頁(yè) 8910.12 頁(yè)面高速緩存 8910.13 內(nèi)核交換守護(hù)進(jìn)程 90第11章 進(jìn)程間通信 9111.1 信號(hào)機(jī)制 9111.2 管道機(jī)制 9211.3 System V IPC 機(jī)制 9311.3.1 信息隊(duì)列 9311.3.2 信號(hào)量 9411.3.3 共享內(nèi)存 96第12章 PCI 9812.1 PCI 系統(tǒng) 9812.2 PCI地址空間 9812.3 PCI設(shè)置頭 9912.4 PCI I/O 和 PCI 內(nèi)存地址 10012.5 PCI-ISA橋 10012.6 PCI-PCI 橋 10012.7 PCI初始化 10112.7.1 Linux系統(tǒng)內(nèi)核有關(guān)PCI的 數(shù)據(jù)結(jié)構(gòu) 10112.7.2 PCI 設(shè)備驅(qū)動(dòng)程序 10212.7.3 PCI BIOS 函數(shù) 10512.7.4 PCI Fixup 105第13章 中斷和中斷處理 10613.1 中斷 10613.2 可編程中斷控制器 10613.3 初始化中斷處理的數(shù)據(jù)結(jié)構(gòu) 10713.4 中斷處理 108第14章 設(shè)備驅(qū)動(dòng)程序 10914.1 硬件設(shè)備的管理 10914.2 輪詢和中斷 11014.3 直接內(nèi)存存取 11014.4 內(nèi)存 11114.5 設(shè)備驅(qū)動(dòng)程序和內(nèi)核之間的接口 11114.5.1 字符設(shè)備 11214.5.2 塊設(shè)備 11314.6 硬盤(pán) 11314.6.1 IDE 硬盤(pán) 11514.6.2 初始化IDE 硬盤(pán)子系統(tǒng) 11514.6.3 SCSI 硬盤(pán) 11514.6.4 初始化 SCSI 磁盤(pán)子系統(tǒng) 11614.6.5 傳遞塊設(shè)備請(qǐng)求 11814.7 網(wǎng)絡(luò)設(shè)備 11814.7.1 網(wǎng)絡(luò)設(shè)備文件名 11814.7.2 總線信息 11814.7.3 網(wǎng)絡(luò)接口標(biāo)記 11914.7.4 協(xié)議信息 11914.7.5 初始化網(wǎng)絡(luò)設(shè)備 119第15章 文件系統(tǒng) 12115.1 Linux文件系統(tǒng)概述 12115.2 ext2文件系統(tǒng) 12215.2.1 ext2的索引節(jié)點(diǎn) 12215.2.2 ext2超級(jí)塊 12415.2.3 ext2 數(shù)據(jù)塊組描述符 12415.2.4 ext2 中的目錄 12515.2.5 在ext2 文件系統(tǒng)中查找文件 12515.2.6 改變ext2 文件系統(tǒng)中文件 的大小 12615.3 VFS 12715.3.1 VFS 超級(jí)塊 12815.3.2 VFS 索引節(jié)點(diǎn) 12915.3.3 登記文件系統(tǒng) 12915.3.4 掛接文件系統(tǒng) 13015.3.5 在VFS中查找文件 13115.3.6 撤消文件系統(tǒng) 13115.3.7 VFS 索引節(jié)點(diǎn)緩存 13215.3.8 VFS目錄緩存 13215.4 緩沖區(qū)緩存 13315.5 /proc 文件系統(tǒng) 135第16章 網(wǎng)絡(luò)系統(tǒng) 13616.1 TCP/IP 網(wǎng)絡(luò)簡(jiǎn)介 13616.2 TCP/IP網(wǎng)絡(luò)的分層 13716.3 BSD 套接口 13816.4 INET套接口層 14016.4.1 創(chuàng)建BSD 套接口 14116.4.2 給INET BSD 套接口指定地址 14116.4.3 在INET BSD套接口上創(chuàng)建連接 14216.4.4 監(jiān)聽(tīng)I(yíng)NET BSD 套接口 14216.4.5 接收連接請(qǐng)求 14316.5 IP 層 14316.5.1 套接口緩沖區(qū) 14316.5.2 接收IP數(shù)據(jù)包 14416.5.3 發(fā)送IP數(shù)據(jù)包 14416.5.4 數(shù)據(jù)碎片 14416.6 地址解析協(xié)議 145第17章 系統(tǒng)內(nèi)核機(jī)制 14717.1 Bottom Half處理 14717.2 任務(wù)隊(duì)列 14817.3 計(jì)時(shí)器 14917.4 等待隊(duì)列 14917.5 信號(hào)量 150第四篇 Linux系統(tǒng)高級(jí)編程第18章 Linux內(nèi)核模塊編程 15118.1 一個(gè)簡(jiǎn)單程序Hello World 15118.2 設(shè)備文件 15218.3 /proc文件系統(tǒng) 15618.4 使用/proc輸入 15818.5 與設(shè)備文件通信 16218.6 啟動(dòng)參數(shù) 16918.7 系統(tǒng)調(diào)用 17018.8 阻塞進(jìn)程 17218.9 替換printk 17718.10 調(diào)度任務(wù) 178第19章 有關(guān)進(jìn)程通信的編程 18119.1 進(jìn)程間通信簡(jiǎn)介 18119.2 半雙工UNIX管道 18119.2.1 基本概念 18119.2.2 使用C語(yǔ)言創(chuàng)建管道 18219.2.3 創(chuàng)建管道的簡(jiǎn)單方法 18519.2.4 使用管道的自動(dòng)操作 18719.2.5 使用半雙工管道時(shí)的注意事項(xiàng) 18819.3 命名管道 18819.3.1 基本概念 18819.3.2 創(chuàng)建FIFO 18819.3.3 FIFO操作 18919.3.4 FIFO的阻塞 19019.3.5 SIGPIPE信號(hào) 19019.4 System V IPC 19019.4.1 基本概念 19019.4.2 消息隊(duì)列基本概念 19119.4.3 系統(tǒng)調(diào)用msgget() 19419.4.4 系統(tǒng)調(diào)用msgsnd() 19519.4.5 系統(tǒng)調(diào)用msgctl() 19719.4.6 一個(gè)msgtool的實(shí)例 19919.5 使用信號(hào)量編程 20119.5.1 基本概念 20119.5.2 系統(tǒng)調(diào)用semget() 20219.5.3 系統(tǒng)調(diào)用semop() 20319.5.4 系統(tǒng)調(diào)用semctl() 20419.5.5 使用信號(hào)量集的實(shí)例:semtool 20519.6 共享內(nèi)存 20919.6.1 基本概念 20919.6.2 系統(tǒng)內(nèi)部用戶數(shù)據(jù)結(jié)構(gòu) shmid_ds 20919.6.3 系統(tǒng)調(diào)用shmget() 21019.6.4 系統(tǒng)調(diào)用shmat() 21119.6.5 系統(tǒng)調(diào)用shmctl() 21119.6.6 系統(tǒng)調(diào)用shmdt() 21219.6.7 使用共享內(nèi)存的實(shí)例:shmtool 212第20章 高級(jí)線程編程 21520.1 線程的概念和用途 21520.2 一個(gè)簡(jiǎn)單的例子 21520.3 線程同步 21720.4 使用信號(hào)量協(xié)調(diào)程序 21820.5 信號(hào)量的實(shí)現(xiàn) 22020.5.1 Semaphore.h 22020.5.2 Semaphore.c 221第21章 Linux系統(tǒng)網(wǎng)絡(luò)編程 22521.1 什么是套接口 22521.2 兩種類型的Internet套接口 22521.3 網(wǎng)絡(luò)協(xié)議分層 22521.4 數(shù)據(jù)結(jié)構(gòu) 22521.5 IP地址和如何使用IP地址 22621.5.1 socket() 22621.5.2 bind() 22621.5.3 connect() 22721.5.4 listen() 22821.5.5 accept() 22821.5.6 send() 和 recv() 22921.5.7 sendto() 和 recvfrom() 23021.5.8 close() 和 shutdown() 23021.5.9 getpeername() 23121.5.10 gethostname() 23121.6 DNS 23121.7 客戶機(jī)/服務(wù)器模式 23221.8 簡(jiǎn)單的數(shù)據(jù)流服務(wù)器程序 23221.9 簡(jiǎn)單的數(shù)據(jù)流客戶機(jī)程序 23421.10 數(shù)據(jù)報(bào)套接口 23521.11 阻塞 237第22章 Linux I/O端口編程 24022.1 如何在 C 語(yǔ)言下使用I/O端口 24022.1.1 一般的方法 24022.1.2 另一個(gè)替代方法: /dev/port 24122.2 硬件中斷 與 DMA 存取 24122.3 高精確的時(shí)間 24122.3.1 延遲時(shí)間 24122.3.2 時(shí)間的量測(cè) 24322.4 使用其他程序語(yǔ)言 24322.5 一些有用的 I/O 端口 24322.5.1 并行端口 24322.5.2 游戲端口 24422.5.3 串行端口 245第五篇 Linux系統(tǒng)安全分析第23章 系統(tǒng)管理員安全 24723.1 安全管理 24723.2 超級(jí)用戶 24723.3 文件系統(tǒng)安全 24723.3.1 Linux文件系統(tǒng)概述 24723.3.2 設(shè)備文件 24823.3.3 /etc/mknod命令 24923.3.4 安全考慮 24923.3.5 find命令 25023.3.6 secure程序 25023.3.7 ncheck命令 25023.3.8 安裝和拆卸文件系統(tǒng) 25023.3.9 系統(tǒng)目錄和文件 25123.4 作為root運(yùn)行的程序 25123.4.1 啟動(dòng)系統(tǒng) 25123.4.2 init進(jìn)程 25123.4.3 進(jìn)入多用戶 25223.4.4 shutdown命令 25223.4.5 系統(tǒng)V的cron程序 25223.4.6 系統(tǒng)V版本2之后的cron程序 25223.4.7 /etc/profile 25323.5 /etc/passwd文件 25323.5.1 口令時(shí)效 25323.5.2 UID和GID 25423.6 /etc/group文件 25423.7 增加、刪除和移走用戶 25423.7.1 增加用戶 25423.7.2 刪除用戶 25523.7.3 將用戶移到另一個(gè)系統(tǒng) 25523.8 安全檢查 25523.8.1 記帳 25523.8.2 其他檢查命令 25623.8.3 安全檢查程序的問(wèn)題 25623.8.4 系統(tǒng)泄密后怎么辦 25723.9 加限制的環(huán)境 25823.9.1 加限制的外殼 25823.9.2 用chroot()限制用戶 25823.10 小系統(tǒng)安全 25923.11 物理安全 25923.12 用戶意識(shí) 26023.13 系統(tǒng)管理員意識(shí) 26123.13.1 保持系統(tǒng)管理員個(gè)人的 登錄安全 26123.13.2 保持系統(tǒng)安全 261第24章 系統(tǒng)程序員安全 26324.1 系統(tǒng)子程序 26324.1.1 I/O子程序 26324.1.2 進(jìn)程控制 26324.1.3 文件屬性 26424.1.4 UID和GID的處理 26524.2 標(biāo)準(zhǔn)C程序庫(kù) 26524.2.1 標(biāo)準(zhǔn)I/O 26524.2.2 /etc/passwd的處理 26624.2.3 /etc/group的處理 26724.2.4 加密子程序 26824.2.5 運(yùn)行外殼 26824.3 編寫(xiě)安全的C程序 26824.3.1 需要考慮的安全問(wèn)題 26824.3.2 SUID/SGID程序指導(dǎo)準(zhǔn)則 26924.3.3 編譯、安裝SUID/SGID程序 的方法 26924.4 root用戶程序的設(shè)計(jì) 270第25章 Linux系統(tǒng)的網(wǎng)絡(luò)安全 27225.1 UUCP系統(tǒng)概述 27225.1.1 UUCP命令 27225.1.2 uux命令 27225.1.3 uucico程序 27325.1.4 uuxqt程序 27325.2 UUCP的安全問(wèn)題 27325.2.1 USERFILE文件 27325.2.2 L.cmds文件 27425.2.3 uucp登錄 27425.2.4 uucp使用的文件和目錄 27425.3 HONEYDANBER UUCP 27525.3.1 HONEYDANBER UUCP與 老UUCP的差別 27525.3.2 登錄名規(guī)則 27625.3.3 MACHINE規(guī)則 27725.3.4 組合MACHINE和LOGNAME 規(guī)則 27825.3.5 uucheck命令 27825.3.6 網(wǎng)關(guān) 27825.3.7 登錄文件檢查 27925.4 其他網(wǎng)絡(luò) 27925.4.1 遠(yuǎn)程作業(yè)登錄 27925.4.2 NSC網(wǎng)絡(luò)系統(tǒng) 28025.5 通信安全 28025.5.1 物理安全 28025.5.2 加密 28125.5.3 用戶身份鑒別 28225.6 SUN OS系統(tǒng)的網(wǎng)絡(luò)安全 28325.6.1 確保NFS的安全 28325.6.2 NFS安全性方面的缺陷 28425.6.3 遠(yuǎn)程過(guò)程調(diào)用鑒別 28425.6.4 Linux鑒別機(jī)制 28425.6.5 DES鑒別系統(tǒng) 28525.6.6 公共關(guān)鍵字的編碼 28625.6.7 網(wǎng)絡(luò)實(shí)體的命名 28625.6.8 DES鑒別系統(tǒng)的應(yīng)用 28725.6.9 遺留的安全問(wèn)題 28725.6.10 性能 28825.6.11 啟動(dòng)和setuid程序引起的問(wèn)題 28825.6.12 小結(jié) 289第26章 Linux系統(tǒng)的用戶安全性 29026.1 口令安全 29026.2 文件許可權(quán) 29026.3 目錄許可 29126.4 umask命令 29126.5 設(shè)置用戶ID和同組用戶ID許可 29126.6 cp mv ln和cpio命令 29126.7 su和newgrp命令 29226.7.1 su命令 29226.7.2 newgrp命令 29226.8 文件加密 29226.9 其他安全問(wèn)題 29326.9.1 用戶的.profile文件 29326.9.2 ls -a 29326.9.3 .exrc文件 29326.9.4 暫存文件和目錄 29326.9.5 UUCP和其他網(wǎng)絡(luò) 29326.9.6 特洛伊木馬 29426.9.7 誘騙 29426.9.8 計(jì)算機(jī)病毒 29426.9.9 要離開(kāi)自己已登錄的終端 29426.9.10 智能終端 29426.9.11 斷開(kāi)與系統(tǒng)的連接 29426.9.12 cu命令 29526.10 保持帳戶安全的要點(diǎn) 295第六篇 X window系統(tǒng)的內(nèi)部結(jié)構(gòu)和使用第27章 X Window系統(tǒng)的基本知識(shí) 29727.1 X Window系統(tǒng)介紹 29727.1.1 X的特點(diǎn) 29727.1.2 什么是窗口系統(tǒng) 29827.1.3 X發(fā)展的歷史 29927.1.4 X的產(chǎn)品 29927.1.5 MIT發(fā)行的X 29927.2 X的基本結(jié)構(gòu) 30227.2.1 X 的基本元素 30327.2.2 服務(wù)程序和客戶程序如何 交互通信 30427.2.3 X 的網(wǎng)絡(luò)概況 30627.3 從用戶界面的角度概觀X 30727.3.1 管理界面:窗口管理器 30727.3.2 應(yīng)用程序界面和工具箱 30927.3.3 其他系統(tǒng)角度 30927.4 術(shù)語(yǔ)和符號(hào) 31027.4.1 術(shù)語(yǔ) 31027.4.2 符號(hào) 31127.5 啟動(dòng)和關(guān)閉X 31227.5.1 啟動(dòng)X 31227.5.2 執(zhí)行X程序的方式 31327.5.3 關(guān)閉X 31427.6 窗口管理器基礎(chǔ)—uwm 31527.6.1 什么是窗口管理器 31527.6.2 啟動(dòng)uwm 31527.6.3 基本窗口操作 —uwm 的菜單 31527.6.4 移動(dòng)窗口 31627.6.5 重定窗口大小 31627.6.6 建立新窗口 31627.6.7 管理屏幕空間 31827.6.8 中止應(yīng)用程序窗口 32027.6.9 激活uwm菜單的其他方式 32027.7 使用 x的網(wǎng)絡(luò)設(shè)備 32027.7.1 指定遠(yuǎn)程終端機(jī)—display 選項(xiàng) 32127.7.2 實(shí)際使用遠(yuǎn)程的顯示器 32227.7.3 控制存取顯示器—xhost 32227.8 終端機(jī)模擬器—詳細(xì)介紹xterm 32327.8.1 選擇xterm功能—菜單與 命令行選項(xiàng) 32327.8.2 滾動(dòng)xterm屏幕 32427.8.3 記錄與終端機(jī)的交互過(guò)程—寫(xiě) 記錄 32527.8.4 剪貼文本 32527.8.5 使用Tektronix模擬功能 32627.8.6 使用不同的字體 32727.8.7 使用顏色 32727.8.8 其他xterm選項(xiàng) 32727.8.9 設(shè)定終端機(jī)鍵盤(pán) 328第28章 實(shí)用程序和工具 32928.1 實(shí)用程序 32928.2 保存、顯示和打印屏幕圖像 33028.3 使用X的應(yīng)用程序 33228.3.1 文字編輯器—Xedit 33328.3.2 郵件/信息處理系統(tǒng)—xmh 33628.4 示例和游戲程序 33628.4.1 找出通過(guò)隨機(jī)迷宮的 路徑—maze 33628.4.2 擔(dān)任鼠標(biāo)指針的大眼睛— xeyes 33628.4.3 智慧盤(pán)游戲—puzzle 33728.4.4 打印一個(gè)大X標(biāo)志—xlogo 33728.4.5 跳動(dòng)的多面體—ico 33728.4.6 動(dòng)態(tài)幾何圖案—muncher與 plaid 33728.7 顯示信息和狀態(tài)的程序 33728.7.1 列出X服務(wù)程序的特征— xdpyinfo 33828.7.2 獲取有關(guān)窗口的信息 33828.7.3 觀察X的事件—xev 340第29章 定制X Window系統(tǒng) 34129.1 使用X的字體和顏色 34129.1.1 字體初步 34129.1.2 字體命名 34229.1.3 觀察特定字體的內(nèi)容—xfd 34329.1.4 保存字體和位置 34329.1.5 例子:在你的服務(wù)程序中 增加新字體 34529.1.6 使用X的顏色 34629.2 定義和使用圖形 34729.2.1 系統(tǒng)圖形程序庫(kù) 34729.2.2 交互編輯圖形—bitmap 34729.2.3 編輯圖形的其他方法 34929.2.4 定制根窗口—xsetroot 34929.3 定義應(yīng)用程序的缺省選項(xiàng)— Resources 35029.3.1 什么是資源 35029.3.2 XToolkit 35129.3.3 管理資源—資源管理器 35329.3.4 資源的類型—如何指定值 35829.4 實(shí)際使用資源 35929.4.1 在何處保存資源的缺省值 35929.4.2 在服務(wù)程序上保存缺省值— xrdb 36329.4.3 常見(jiàn)的錯(cuò)誤和修正 36629.5 定制鍵盤(pán)和鼠標(biāo) 36729.5.1 實(shí)際使用轉(zhuǎn)換 36829.5.2 轉(zhuǎn)換—格式和規(guī)則 37429.5.3 轉(zhuǎn)換規(guī)范中常見(jiàn)的問(wèn)題 37729.6 鍵盤(pán)和鼠標(biāo)—對(duì)應(yīng)和參數(shù) 37929.6.1 鍵盤(pán)和鼠標(biāo)映射—xmodmap 37929.6.2 鍵盤(pán)和鼠標(biāo)參數(shù)設(shè)定—xset 38229.7 進(jìn)一步介紹和定制uwm 38429.7.1 uwm的新特征 38429.7.2 定制uwm 38629.8 顯示器管理器—xdm 39029.8.1 需要做些什么 39029.8.2 xdm 39129.8.3 xdm的更多信息 39229.8.4 uwm配置 395附錄A Gcc使用介紹 396附錄B 安裝X Window窗口系統(tǒng) 410
標(biāo)簽: LINUX 系統(tǒng)分析 高級(jí)編程
上傳時(shí)間: 2013-11-10
上傳用戶:changeboy
摘要: 串行傳輸技術(shù)具有更高的傳輸速率和更低的設(shè)計(jì)成本, 已成為業(yè)界首選, 被廣泛應(yīng)用于高速通信領(lǐng)域。提出了一種新的高速串行傳輸接口的設(shè)計(jì)方案, 改進(jìn)了Aurora 協(xié)議數(shù)據(jù)幀格式定義的弊端, 并采用高速串行收發(fā)器Rocket I/O, 實(shí)現(xiàn)數(shù)據(jù)率為2.5 Gbps的高速串行傳輸。關(guān)鍵詞: 高速串行傳輸; Rocket I/O; Aurora 協(xié)議 為促使FPGA 芯片與串行傳輸技術(shù)更好地結(jié)合以滿足市場(chǎng)需求, Xilinx 公司適時(shí)推出了內(nèi)嵌高速串行收發(fā)器RocketI/O 的Virtex II Pro 系列FPGA 和可升級(jí)的小型鏈路層協(xié)議———Aurora 協(xié)議。Rocket I/O支持從622 Mbps 至3.125 Gbps的全雙工傳輸速率, 還具有8 B/10 B 編解碼、時(shí)鐘生成及恢復(fù)等功能, 可以理想地適用于芯片之間或背板的高速串行數(shù)據(jù)傳輸。Aurora 協(xié)議是為專有上層協(xié)議或行業(yè)標(biāo)準(zhǔn)的上層協(xié)議提供透明接口的第一款串行互連協(xié)議, 可用于高速線性通路之間的點(diǎn)到點(diǎn)串行數(shù)據(jù)傳輸, 同時(shí)其可擴(kuò)展的帶寬, 為系統(tǒng)設(shè)計(jì)人員提供了所需要的靈活性[4]。但該協(xié)議幀格式的定義存在弊端,會(huì)導(dǎo)致系統(tǒng)資源的浪費(fèi)。本文提出的設(shè)計(jì)方案可以改進(jìn)Aurora 協(xié)議的固有缺陷,提高系統(tǒng)性能, 實(shí)現(xiàn)數(shù)據(jù)率為2.5 Gbps 的高速串行傳輸, 具有良好的可行性和廣闊的應(yīng)用前景。
標(biāo)簽: Rocket 2.5 高速串行 收發(fā)器
上傳時(shí)間: 2013-10-13
上傳用戶:lml1234lml
蟲(chóng)蟲(chóng)下載站版權(quán)所有 京ICP備2021023401號(hào)-1