HI-TECH PICC C 的使用說明. 這里我們只講述了PICC C 與標(biāo)準(zhǔn)C 的不同,它不是一本C 語言的教程, 并且我們假定你有C 語言的基礎(chǔ). 為了對PIC 單片機(jī)有更好的支持,PICC 在標(biāo)準(zhǔn)C 的基礎(chǔ)上作了一些擴(kuò)充: 定義I/O 函數(shù),以便在你的硬件系統(tǒng)中使用<stdio.h>中定義的函數(shù)。 用C 語言編寫中斷服務(wù)程序 用C 語言編寫I/O 操作程序 C 語言與匯編語言間的接口1-1 與標(biāo)準(zhǔn)C 的不同PICC 只在一處與標(biāo)準(zhǔn)C 不同:函數(shù)的重入。因為PIC 單片機(jī)的寄存器及堆棧有限,所以PICC 不支持可重入函數(shù)。1-2 支持的PIC 芯片PICC 支持很多PIC 單片機(jī),支持PIC 單片機(jī)的類型在LIB 目錄下的picinfo.ini文件中有定義。1-3 PICC 包含一些標(biāo)準(zhǔn)庫1-4 PICC 編譯器可以輸出一些格式的目標(biāo)文件,缺省設(shè)置為輸出Bytecraft 的'COD'格式和 Intel 的'HEX'格式。你可以用表1-1 中的命令來指定輸出格式。
上傳時間: 2013-10-10
上傳用戶:781354052
AVR高速嵌入式單片機(jī)原理與應(yīng)用(修訂版)詳細(xì)介紹ATMEL公司開發(fā)的AVR高速嵌入式單片機(jī)的結(jié)構(gòu);講述AVR單片機(jī)的開發(fā)工具和集成開發(fā)環(huán)境(IDE),包括Studio調(diào)試工具、AVR單片機(jī)匯編器和單片機(jī)串行下載編程;學(xué)習(xí)指令系統(tǒng)時,每條指令均有實例,邊學(xué)習(xí)邊調(diào)試,使學(xué)習(xí)者看得見指令流向及操作結(jié)果,真正理解每條指令的功能及使用注意事項;介紹AVR系列多種單片機(jī)功能特點、實用程序設(shè)計及應(yīng)用實例;作為提高篇,講述簡單易學(xué)、適用AVR單片機(jī)的高級語言BASCOMAVR及ICC AVR C編譯器。 AVR高速嵌入式單片機(jī)原理與應(yīng)用(修訂版) 目錄 第一章ATMEL單片機(jī)簡介1.1ATMEL公司產(chǎn)品的特點11.2AT90系列單片機(jī)簡介21.3AT91M系列單片機(jī)簡介2第二章AVR單片機(jī)系統(tǒng)結(jié)構(gòu)2.1AVR單片機(jī)總體結(jié)構(gòu)42.2AVR單片機(jī)中央處理器CPU62.2.1結(jié)構(gòu)概述72.2.2通用寄存器堆92.2.3X、Y、Z寄存器92.2.4ALU運(yùn)算邏輯單元92.3AVR單片機(jī)存儲器組織102.3.1可下載的Flash程序存儲器102.3.2內(nèi)部和外部的SRAM數(shù)據(jù)存儲器102.3.3EEPROM數(shù)據(jù)存儲器112.3.4存儲器訪問和指令執(zhí)行時序112.3.5I/O存儲器132.4AVR單片機(jī)系統(tǒng)復(fù)位162.4.1復(fù)位源172.4.2加電復(fù)位182.4.3外部復(fù)位192.4.4看門狗復(fù)位192.5AVR單片機(jī)中斷系統(tǒng)202.5.1中斷處理202.5.2外部中斷232.5.3中斷應(yīng)答時間232.5.4MCU控制寄存器 MCUCR232.6AVR單片機(jī)的省電方式242.6.1休眠狀態(tài)242.6.2空閑模式242.6.3掉電模式252.7AVR單片機(jī)定時器/計數(shù)器252.7.1定時器/計數(shù)器預(yù)定比例器252.7.28位定時器/計數(shù)器0252.7.316位定時器/計數(shù)器1272.7.4看門狗定時器332.8AVR單片機(jī)EEPROM讀/寫訪問342.9AVR單片機(jī)串行接口352.9.1同步串行接口 SPI352.9.2通用串行接口 UART402.10AVR單片機(jī)模擬比較器452.10.1模擬比較器452.10.2模擬比較器控制和狀態(tài)寄存器ACSR462.11AVR單片機(jī)I/O端口472.11.1端口A472.11.2端口 B482.11.3端口 C542.11.4端口 D552.12AVR單片機(jī)存儲器編程612.12.1編程存儲器鎖定位612.12.2熔斷位612.12.3芯片代碼612.12.4編程 Flash和 EEPROM612.12.5并行編程622.12.6串行下載662.12.7可編程特性67第三章AVR單片機(jī)開發(fā)工具3.1AVR實時在線仿真器ICE200693.2JTAG ICE仿真器693.3AVR嵌入式單片機(jī)開發(fā)下載實驗器SL?AVR703.4AVR集成開發(fā)環(huán)境(IDE)753.4.1AVR Assembler編譯器753.4.2AVR Studio773.4.3AVR Prog783.5SL?AVR系列組態(tài)開發(fā)實驗系統(tǒng)793.6SL?AVR*.ASM源文件說明81第四章AVR單片機(jī)指令系統(tǒng)4.1指令格式844.1.1匯編指令844.1.2匯編器偽指令844.1.3表達(dá)式874.2尋址方式894.3數(shù)據(jù)操作和指令類型924.3.1數(shù)據(jù)操作924.3.2指令類型924.3.3指令集名詞924.4算術(shù)和邏輯指令934.4.1加法指令934.4.2減法指令974.4.3乘法指令1014.4.4取反碼指令1014.4.5取補(bǔ)指令1024.4.6比較指令1034.4.7邏輯與指令1054.4.8邏輯或指令1074.4.9邏輯異或指令1104.5轉(zhuǎn)移指令1114.5.1無條件轉(zhuǎn)移指令1114.5.2條件轉(zhuǎn)移指令1144.6數(shù)據(jù)傳送指令1354.6.1直接數(shù)據(jù)傳送指令1354.6.2間接數(shù)據(jù)傳送指令1374.6.3從程序存儲器直接取數(shù)據(jù)指令1444.6.4I/O口數(shù)據(jù)傳送指令1454.6.5堆棧操作指令1464.7位指令和位測試指令1474.7.1帶進(jìn)位邏輯操作指令1474.7.2位變量傳送指令1514.7.3位變量修改指令1524.7.4其它指令1614.8新增指令(新器件)1624.8.1EICALL-- 延長間接調(diào)用子程序1624.8.2EIJMP--擴(kuò)展間接跳轉(zhuǎn)1634.8.3ELPM--擴(kuò)展裝載程序存儲器1644.8.4ESPM--擴(kuò)展存儲程序存儲器1644.8.5FMUL--小數(shù)乘法1664.8.6FMULS--有符號數(shù)乘法1664.8.7FMULSU--有符號小數(shù)和無符號小數(shù)乘法1674.8.8MOVW--拷貝寄存器字1684.8.9MULS--有符號數(shù)乘法1694.8.10MULSU--有符號數(shù)與無符號數(shù)乘法1694.8.11SPM--存儲程序存儲器170 第五章AVR單片機(jī)AT90系列5.1AT90S12001725.1.1特點1725.1.2描述1735.1.3引腳配置1745.1.4結(jié)構(gòu)縱覽1755.2AT90S23131835.2.1特點1835.2.2描述1845.2.3引腳配置1855.3ATmega8/8L1855.3.1特點1865.3.2描述1875.3.3引腳配置1895.3.4開發(fā)實驗工具1905.4AT90S2333/44331915.4.1特點1915.4.2描述1925.4.3引腳配置1945.5AT90S4414/85151955.5.1特點1955.5.2AT90S4414和AT90S8515的比較1965.5.3引腳配置1965.6AT90S4434/85351975.6.1特點1975.6.2描述1985.6.3AT90S4434和AT90S8535的比較1985.6.4引腳配置2005.6.5AVR RISC結(jié)構(gòu)2015.6.6定時器/計數(shù)器2125.6.7看門狗定時器 2175.6.8EEPROM讀/寫2175.6.9串行外設(shè)接口SPI2175.6.10通用串行接口UART2175.6.11模擬比較器 2175.6.12模數(shù)轉(zhuǎn)換器2185.6.13I/O端口2235.7ATmega83/1632285.7.1特點2285.7.2描述2295.7.3ATmega83與ATmega163的比較2315.7.4引腳配置2315.8ATtiny10/11/122325.8.1特點2325.8.2描述2335.8.3引腳配置2355.9ATtiny15/L2375.9.1特點2375.9.2描述2375.9.3引腳配置2395 .10ATmega128/128L2395.10.1特點2405.10.2描述2415.10.3引腳配置2435.10.4開發(fā)實驗工具2455.11ATmega1612465.11.1特點2465.11.2描述2475.11.3引腳配置2475.12AVR單片機(jī)替代MCS51單片機(jī)249第六章實用程序設(shè)計6.1程序設(shè)計方法2506.1.1程序設(shè)計步驟2506.1.2程序設(shè)計技術(shù)2506.2應(yīng)用程序舉例2516.2.1內(nèi)部寄存器和位定義文件2516.2.2訪問內(nèi)部 EEPROM2546.2.3數(shù)據(jù)塊傳送2546.2.4乘法和除法運(yùn)算應(yīng)用一2556.2.5乘法和除法運(yùn)算應(yīng)用二2556.2.616位運(yùn)算2556.2.7BCD運(yùn)算2556.2.8冒泡分類算法2556.2.9設(shè)置和使用模擬比較器2556.2.10半雙工中斷方式UART應(yīng)用一2556.2.11半雙工中斷方式UART應(yīng)用二2566.2.128位精度A/D轉(zhuǎn)換器2566.2.13裝載程序存儲器2566.2.14安裝和使用相同模擬比較器2566.2.15CRC程序存儲的檢查2566.2.164×4鍵區(qū)休眠觸發(fā)方式2576.2.17多工法驅(qū)動LED和4×4鍵區(qū)掃描2576.2.18I2C總線2576.2.19I2C工作2586.2.20SPI軟件2586.2.21驗證SLAVR實驗器及AT90S1200的口功能12596.2.22驗證SLAVR實驗器及AT90S1200的口功能22596.2.23驗證SLAVR實驗器及具有DIP40封裝的口功能第七章AVR單片機(jī)的應(yīng)用7.1通用延時子程序2607.2簡單I/O口輸出實驗2667.2.1SLAVR721.ASM 2667.2.2SLAVR722.ASM2677.2.3SLAVR723.ASM2687.2.4SLAVR724.ASM2707.2.5SLAVR725.ASM2717.2.6SLAVR726.ASM2727.2.7SLAVR727.ASM2737.3綜合程序2747.3.1LED/LCD/鍵盤掃描綜合程序2747.3.2LED鍵盤掃描綜合程序2757.3.3在LED上實現(xiàn)字符8的循環(huán)移位顯示程序2757.3.4電腦放音機(jī)2777.3.5鍵盤掃描程序2857.3.6十進(jìn)制計數(shù)顯示2867.3.7廉價的A/D轉(zhuǎn)換器2897.3.8高精度廉價的A/D轉(zhuǎn)換器2947.3.9星星燈2977.3.10按鈕猜數(shù)程序2987.3.11漢字的輸入3047.4復(fù)雜實用程序3067.4.110位A/D轉(zhuǎn)換3067.4.2步進(jìn)電機(jī)控制程序3097.4.3測脈沖寬度3127.4.4LCD顯示8字循環(huán)3187.4.5LED電腦時鐘3247.4.6測頻率3307.4.7測轉(zhuǎn)速3327.4.8AT90S8535的A/D轉(zhuǎn)換334第八章BASCOMAVR的應(yīng)用8.1基于高級語言BASCOMAVR的單片機(jī)開發(fā)平臺3408.2BASCOMAVR軟件平臺的安裝與使用3418.3AVR I/O口的應(yīng)用3458.3.1LED發(fā)光二極管的控制3458.3.2簡易手控廣告燈3468.3.3簡易電腦音樂放音機(jī)3478.4LCD顯示器3498.4.1標(biāo)準(zhǔn)LCD顯示器的應(yīng)用3498.4.2簡單游戲機(jī)--按鈕猜數(shù)3518.5串口通信UART3528.5.1AVR系統(tǒng)與PC的簡易通信3538.5.2PC控制的簡易廣告燈3548.6單總線接口和溫度計3568.7I2C總線接口和簡易IC卡讀寫器359第九章ICC AVR C編譯器的使用9.1ICC AVR的概述3659.1.1介紹ImageCraft的ICC AVR3659.1.2ICC AVR中的文件類型及其擴(kuò)展名3659.1.3附注和擴(kuò)充3669.2ImageCraft的ICC AVR編譯器安裝3679.2.1安裝SETUP.EXE程序3679.2.2對安裝完成的軟件進(jìn)行注冊3679.3ICC AVR導(dǎo)游3689.3.1起步3689.3.2C程序的剖析3699.4ICC AVR的IDE環(huán)境3709.4.1編譯一個單獨(dú)的文件3709.4.2創(chuàng)建一個新的工程3709.4.3工程管理3719.4.4編輯窗口3719.4.5應(yīng)用構(gòu)筑向?qū)?719.4.6狀態(tài)窗口3719.4.7終端仿真3719.5C庫函數(shù)與啟動文件3729.5.1啟動文件3729.5.2常用庫函數(shù)3729.5.3字符類型庫3739.5.4浮點運(yùn)算庫3749.5.5標(biāo)準(zhǔn)輸入/輸出庫3759.5.6標(biāo)準(zhǔn)庫和內(nèi)存分配函數(shù)3769.5.7字符串函數(shù)3779.5.8變量參數(shù)函數(shù)3799.5.9堆棧檢查函數(shù)3799.6AVR硬件訪問的編程3809.6.1訪問AVR的底層硬件3809.6.2位操作3809.6.3程序存儲器和常量數(shù)據(jù)3819.6.4字符串3829.6.5堆棧3839.6.6在線匯編3839.6.7I/O寄存器3849.6.8絕對內(nèi)存地址3849.6.9C任務(wù)3859.6.10中斷操作3869.6.11訪問UART3879.6.12訪問EEPROM3879.6.13訪問SPI3889.6.14相對轉(zhuǎn)移/調(diào)用的地址范圍3889.6.15C的運(yùn)行結(jié)構(gòu)3889.6.16匯編界面和調(diào)用規(guī)則3899.6.17函數(shù)返回非整型值3909.6.18程序和數(shù)據(jù)區(qū)的使用3909.6.19編程區(qū)域3919.6.20調(diào)試3919.7應(yīng)用舉例*3929.7.1讀/寫口3929.7.2延時函數(shù)3929.7.3讀/寫EEPROM3929.7.4AVR的PB口變速移位3939.7.5音符聲程序3939.7.68字循環(huán)移位顯示程序3949.7.7鋸齒波程序3959.7.8正三角波程序3969.7.9梯形波程序396附錄1AT89系列單片機(jī)簡介398附錄2AT94K系列現(xiàn)場可編程系統(tǒng)標(biāo)準(zhǔn)集成電路401附錄3指令集綜合404附錄4AVR單片機(jī)選型表408參 考 文 獻(xiàn)412
上傳時間: 2013-11-08
上傳用戶:xcy122677
九.輸入/輸出保護(hù)為了支持多任務(wù),80386不僅要有效地實現(xiàn)任務(wù)隔離,而且還要有效地控制各任務(wù)的輸入/輸出,避免輸入/輸出沖突。本文將介紹輸入輸出保護(hù)。 這里下載本文源代碼。 <一>輸入/輸出保護(hù)80386采用I/O特權(quán)級IPOL和I/O許可位圖的方法來控制輸入/輸出,實現(xiàn)輸入/輸出保護(hù)。 1.I/O敏感指令輸入輸出特權(quán)級(I/O Privilege Level)規(guī)定了可以執(zhí)行所有與I/O相關(guān)的指令和訪問I/O空間中所有地址的最外層特權(quán)級。IOPL的值在如下圖所示的標(biāo)志寄存器中。 標(biāo) 志寄存器 BIT31—BIT18 BIT17 BIT16 BIT15 BIT14 BIT13—BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 00000000000000 VM RF 0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF I/O許可位圖規(guī)定了I/O空間中的哪些地址可以由在任何特權(quán)級執(zhí)行的程序所訪問。I/O許可位圖在任務(wù)狀態(tài)段TSS中。 I/O敏感指令 指令 功能 保護(hù)方式下的執(zhí)行條件 CLI 清除EFLAGS中的IF位 CPL<=IOPL STI 設(shè)置EFLAGS中的IF位 CPL<=IOPL IN 從I/O地址讀出數(shù)據(jù) CPL<=IOPL或I/O位圖許可 INS 從I/O地址讀出字符串 CPL<=IOPL或I/O位圖許可 OUT 向I/O地址寫數(shù)據(jù) CPL<=IOPL或I/O位圖許可 OUTS 向I/O地址寫字符串 CPL<=IOPL或I/O位圖許可 上表所列指令稱為I/O敏感指令,由于這些指令與I/O有關(guān),并且只有在滿足所列條件時才可以執(zhí)行,所以把它們稱為I/O敏感指令。從表中可見,當(dāng)前特權(quán)級不在I/O特權(quán)級外層時,可以正常執(zhí)行所列的全部I/O敏感指令;當(dāng)特權(quán)級在I/O特權(quán)級外層時,執(zhí)行CLI和STI指令將引起通用保護(hù)異常,而其它四條指令是否能夠被執(zhí)行要根據(jù)訪問的I/O地址及I/O許可位圖情況而定(在下面論述),如果條件不滿足而執(zhí)行,那么將引起出錯碼為0的通用保護(hù)異常。 由于每個任務(wù)使用各自的EFLAGS值和擁有自己的TSS,所以每個任務(wù)可以有不同的IOPL,并且可以定義不同的I/O許可位圖。注意,這些I/O敏感指令在實模式下總是可執(zhí)行的。 2.I/O許可位圖如果只用IOPL限制I/O指令的執(zhí)行是很不方便的,不能滿足實際要求需要。因為這樣做會使得在特權(quán)級3執(zhí)行的應(yīng)用程序要么可訪問所有I/O地址,要么不可訪問所有I/O地址。實際需要與此剛好相反,只允許任務(wù)甲的應(yīng)用程序訪問部分I/O地址,只允許任務(wù)乙的應(yīng)用程序訪問另一部分I/O地址,以避免任務(wù)甲和任務(wù)乙在訪問I/O地址時發(fā)生沖突,從而避免任務(wù)甲和任務(wù)乙使用使用獨(dú)享設(shè)備時發(fā)生沖突。 因此,在IOPL的基礎(chǔ)上又采用了I/O許可位圖。I/O許可位圖由二進(jìn)制位串組成。位串中的每一位依次對應(yīng)一個I/O地址,位串的第0位對應(yīng)I/O地址0,位串的第n位對應(yīng)I/O地址n。如果位串中的第位為0,那么對應(yīng)的I/O地址m可以由在任何特權(quán)級執(zhí)行的程序訪問;否則對應(yīng)的I/O地址m只能由在IOPL特權(quán)級或更內(nèi)層特權(quán)級執(zhí)行的程序訪問。如果在I/O外層特權(quán)級執(zhí)行的程序訪問位串中位值為1的位所對應(yīng)的I/O地址,那么將引起通用保護(hù)異常。 I/O地址空間按字節(jié)進(jìn)行編址。一條I/O指令最多可涉及四個I/O地址。在需要根據(jù)I/O位圖決定是否可訪問I/O地址的情況下,當(dāng)一條I/O指令涉及多個I/O地址時,只有這多個I/O地址所對應(yīng)的I/O許可位圖中的位都為0時,該I/O指令才能被正常執(zhí)行,如果對應(yīng)位中任一位為1,就會引起通用保護(hù)異常。 80386支持的I/O地址空間大小是64K,所以構(gòu)成I/O許可位圖的二進(jìn)制位串最大長度是64K個位,即位圖的有效部分最大為8K字節(jié)。一個任務(wù)實際需要使用的I/O許可位圖大小通常要遠(yuǎn)小于這個數(shù)目。 當(dāng)前任務(wù)使用的I/O許可位圖存儲在當(dāng)前任務(wù)TSS中低端的64K字節(jié)內(nèi)。I/O許可位圖總以字節(jié)為單位存儲,所以位串所含的位數(shù)總被認(rèn)為是8的倍數(shù)。從前文中所述的TSS格式可見,TSS內(nèi)偏移66H的字確定I/O許可位圖的開始偏移。由于I/O許可位圖最長可達(dá)8K字節(jié),所以開始偏移應(yīng)小于56K,但必須大于等于104,因為TSS中前104字節(jié)為TSS的固定格式,用于保存任務(wù)的狀態(tài)。 1.I/O訪問許可檢查細(xì)節(jié)保護(hù)模式下處理器在執(zhí)行I/O指令時進(jìn)行許可檢查的細(xì)節(jié)如下所示。 (1)若CPL<=IOPL,則直接轉(zhuǎn)步驟(8);(2)取得I/O位圖開始偏移;(3)計算I/O地址對應(yīng)位所在字節(jié)在I/O許可位圖內(nèi)的偏移;(4)計算位偏移以形成屏蔽碼值,即計算I/O地址對應(yīng)位在字節(jié)中的第幾位;(5)把字節(jié)偏移加上位圖開始偏移,再加1,所得值與TSS界限比較,若越界,則產(chǎn)生出錯碼為0的通用保護(hù)故障;(6)若不越界,則從位圖中讀對應(yīng)字節(jié)及下一個字節(jié);(7)把讀出的兩個字節(jié)與屏蔽碼進(jìn)行與運(yùn)算,若結(jié)果不為0表示檢查未通過,則產(chǎn)生出錯碼為0的通用保護(hù)故障;(8)進(jìn)行I/O訪問。設(shè)某一任務(wù)的TSS段如下: TSSSEG SEGMENT PARA USE16 TSS <> ;TSS低端固定格式部分 DB 8 DUP(0) ;對應(yīng)I/O端口00H—3FH DB 10000000B ;對應(yīng)I/O端口40H—47H DB 01100000B ;對用I/O端口48H—4FH DB 8182 DUP(0ffH) ;對應(yīng)I/O端口50H—0FFFFH DB 0FFH ;位圖結(jié)束字節(jié)TSSLen = $TSSSEG ENDS 再假設(shè)IOPL=1,CPL=3。那么如下I/O指令有些能正常執(zhí)行,有些會引起通用保護(hù)異常: in al,21h ;(1)正常執(zhí)行 in al,47h ;(2)引起異常 out 20h,al ;(3)正常實行 out 4eh,al ;(4)引起異常 in al,20h ;(5)正常執(zhí)行 out 20h,eax ;(6)正常執(zhí)行 out 4ch,ax ;(7)引起異常 in ax,46h ;(8)引起異常 in eax,42h ;(9)正常執(zhí)行 由上述I/O許可檢查的細(xì)節(jié)可見,不論是否必要,當(dāng)進(jìn)行許可位檢查時,80386總是從I/O許可位圖中讀取兩個字節(jié)。目的是為了盡快地執(zhí)行I/O許可檢查。一方面,常常要讀取I/O許可位圖的兩個字節(jié)。例如,上面的第(8)條指令要對I/O位圖中的兩個位進(jìn)行檢查,其低位是某個字節(jié)的最高位,高位是下一個字節(jié)的最低位。可見即使只要檢查兩個位,也可能需要讀取兩個字節(jié)。另一方面,最多檢查四個連續(xù)的位,即最多也只需讀取兩個字節(jié)。所以每次要讀取兩個字節(jié)。這也是在判別是否越界時再加1的原因。為此,為了避免在讀取I/O許可位圖的最高字節(jié)時產(chǎn)生越界,必須在I/O許可位圖的最后填加一個全1的字節(jié),即0FFH。此全1的字節(jié)應(yīng)填加在最后一個位圖字節(jié)之后,TSS界限范圍之前,即讓填加的全1字節(jié)在TSS界限之內(nèi)。 I/O許可位圖開始偏移加8K所得的值與TSS界限值二者中較小的值決定I/O許可位圖的末端。當(dāng)TSS的界限大于I/O許可位圖開始偏移加8K時,I/O許可位圖的有效部分就有8K字節(jié),I/O許可檢查全部根據(jù)全部根據(jù)該位圖進(jìn)行。當(dāng)TSS的界限不大于I/O許可位圖開始偏移加8K時,I/O許可位圖有效部分就不到8K字節(jié),于是對較小I/O地址訪問的許可檢查根據(jù)位圖進(jìn)行,而對較大I/O地址訪問的許可檢查總被認(rèn)為不可訪問而引起通用保護(hù)故障。因為這時會發(fā)生字節(jié)越界而引起通用保護(hù)異常,所以在這種情況下,可認(rèn)為不足的I/O許可位圖的高端部分全為1。利用這個特點,可大大節(jié)約TSS中I/O許可位圖占用的存儲單元,也就大大減小了TSS段的長度。 <二>重要標(biāo)志保護(hù)輸入輸出的保護(hù)與存儲在標(biāo)志寄存器EFLAGS中的IOPL密切相關(guān),顯然不能允許隨便地改變IOPL,否則就不能有效地實現(xiàn)輸入輸出保護(hù)。類似地,對EFLAGS中的IF位也必須加以保護(hù),否則CLI和STI作為敏感指令對待是無意義的。此外,EFLAGS中的VM位決定著處理器是否按虛擬8086方式工作。 80386對EFLAGS中的這三個字段的處理比較特殊,只有在較高特權(quán)級執(zhí)行的程序才能執(zhí)行IRET、POPF、CLI和STI等指令改變它們。下表列出了不同特權(quán)級下對這三個字段的處理情況。 不同特權(quán)級對標(biāo)志寄存器特殊字段的處理 特權(quán)級 VM標(biāo)志字段 IOPL標(biāo)志字段 IF標(biāo)志字段 CPL=0 可變(初POPF指令外) 可變 可變 0 不變 不變 可變 CPL>IOPL 不變 不變 不變 從表中可見,只有在特權(quán)級0執(zhí)行的程序才可以修改IOPL位及VM位;只能由相對于IOPL同級或更內(nèi)層特權(quán)級執(zhí)行的程序才可以修改IF位。與CLI和STI指令不同,在特權(quán)級不滿足上述條件的情況下,當(dāng)執(zhí)行POPF指令和IRET指令時,如果試圖修改這些字段中的任何一個字段,并不引起異常,但試圖要修改的字段也未被修改,也不給出任何特別的信息。此外,指令POPF總不能改變VM位,而PUSHF指令所壓入的標(biāo)志中的VM位總為0。 <三>演示輸入輸出保護(hù)的實例(實例九)下面給出一個用于演示輸入輸出保護(hù)的實例。演示內(nèi)容包括:I/O許可位圖的作用、I/O敏感指令引起的異常和特權(quán)指令引起的異常;使用段間調(diào)用指令CALL通過任務(wù)門調(diào)用任務(wù),實現(xiàn)任務(wù)嵌套。 1.演示步驟實例演示的內(nèi)容比較豐富,具體演示步驟如下:(1)在實模式下做必要準(zhǔn)備后,切換到保護(hù)模式;(2)進(jìn)入保護(hù)模式的臨時代碼段后,把演示任務(wù)的TSS段描述符裝入TR,并設(shè)置演示任務(wù)的堆棧;(3)進(jìn)入演示代碼段,演示代碼段的特權(quán)級是0;(4)通過任務(wù)門調(diào)用測試任務(wù)1。測試任務(wù)1能夠順利進(jìn)行;(5)通過任務(wù)門調(diào)用測試任務(wù)2。測試任務(wù)2演示由于違反I/O許可位圖規(guī)定而導(dǎo)致通用保護(hù)異常;(6)通過任務(wù)門調(diào)用測試任務(wù)3。測試任務(wù)3演示I/O敏感指令如何引起通用保護(hù)異常;(7)通過任務(wù)門調(diào)用測試任務(wù)4。測試任務(wù)4演示特權(quán)指令如何引起通用保護(hù)異常;(8)從演示代碼轉(zhuǎn)臨時代碼,準(zhǔn)備返回實模式;(9)返回實模式,并作結(jié)束處理。
上傳時間: 2013-12-11
上傳用戶:nunnzhy
微處理器及微型計算機(jī)的發(fā)展概況 第一代微處理器是以Intel公司1971年推出的4004,4040為代表的四位微處理機(jī)。 第二代微處理機(jī)(1973年~1977年),典型代表有:Intel 公司的8080、8085;Motorola公司的M6800以及Zlog公司的Z80。 第三代微處理機(jī) 第三代微機(jī)是以16位機(jī)為代表,基本上是在第二代微機(jī)的基礎(chǔ)上發(fā)展起來的。其中Intel公司的8088。8086是在8085的基礎(chǔ)發(fā)展起來的;M68000是Motorola公司在M6800 的基礎(chǔ)發(fā)展起來的; 第四代微處理機(jī) 以Intel公司1984年10月推出的80386CPU和1989年4月推出的80486CPU為代表, 第五代微處理機(jī)的發(fā)展更加迅猛,1993年3月被命名為PENTIUM的微處理機(jī)面世,98年P(guān)ENTIUM 2又被推向市場。 INTEL CPU 發(fā)展歷史Intel第一塊CPU 4004,4位主理器,主頻108kHz,運(yùn)算速度0.06MIPs(Million Instructions Per Second, 每秒百萬條指令),集成晶體管2,300個,10微米制造工藝,最大尋址內(nèi)存640 bytes,生產(chǎn)曰期1971年11月. 8085,8位主理器,主頻5M,運(yùn)算速度0.37MIPs,集成晶體管6,500個,3微米制造工藝,最大尋址內(nèi)存64KB,生產(chǎn)曰期1976年 8086,16位主理器,主頻4.77/8/10MHZ,運(yùn)算速度0.75MIPs,集成晶體管29,000個,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個,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微米制造工藝, 二級緩存512K),Prescott核心(主頻2.8G起,FSB800MHZ,0.09微米制造工藝,1M二級緩存,13條全新指令集SSE3),生產(chǎn)曰期2001年7月. 更大的緩存、更高的頻率、 超級流水線、分支預(yù)測、亂序執(zhí)行超線程技術(shù) 微型計算機(jī)組成結(jié)構(gòu)單片機(jī)簡介單片機(jī)即單片機(jī)微型計算機(jī),是將計算機(jī)主機(jī)(CPU、 內(nèi)存和I/O接口)集成在一小塊硅片上的微型機(jī)。 三、計算機(jī)編程語言的發(fā)展概況 機(jī)器語言 機(jī)器語言就是0,1碼語言,是計算機(jī)唯一能理解并直接執(zhí)行的語言。匯編語言 用一些助記符號代替用0,1碼描述的某種機(jī)器的指令系統(tǒng),匯編語言就是在此基礎(chǔ)上完善起來的。高級語言 BASIC,PASCAL,C語言等等。用高級語言編寫的程序稱源程序,它們必須通過編譯或解釋,連接等步驟才能被計算機(jī)處理。 面向?qū)ο笳Z言 C++,Java等編程語言是面向?qū)ο蟮恼Z言。 1.3 微型計算機(jī)中信息的表示及運(yùn)算基礎(chǔ)(一) 十進(jìn)制ND有十個數(shù)碼:0~9,逢十進(jìn)一。 例 1234.5=1×103 +2×102 +3×101 +4×100 +5×10-1加權(quán)展開式以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兩個數(shù)碼:0、1, 逢二進(jìn)一。 例 1101.101=1×23+1×22+0×21+1×20+1×2-1+1×2-3 加權(quán)展開式以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十六個數(shù)碼0~9、A~F,逢十六進(jìn)一。 例:DFC.8=13×162 +15×161 +12×160 +8×16-1 展開式以十六為基數(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)位計數(shù)制之間的轉(zhuǎn)換 (二)二進(jìn)制與十六進(jìn)制數(shù)之間的轉(zhuǎn)換 24=16 ,四位二進(jìn)制數(shù)對應(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。每除一次取一個余數(shù),從低位排向高位。舉例: 2. 小數(shù)轉(zhuǎn)換法“乘基取整”:用轉(zhuǎn)換進(jìn)制的基數(shù)乘以小數(shù)部分,直至小數(shù)為0或達(dá)到轉(zhuǎn)換精度要求的位數(shù)。每乘一次取一次整數(shù),從最高位排到最低位。舉例: 三、帶符號數(shù)的表示方法 機(jī)器數(shù):機(jī)器中數(shù)的表示形式。真值: 機(jī)器數(shù)所代表的實際數(shù)值。舉例:一個8位機(jī)器數(shù)與它的真值對應(yīng)關(guān)系如下: 真值: X1=+84=+1010100B X2=-84= -1010100B 機(jī)器數(shù):[X1]機(jī)= 01010100 [X2]機(jī)= 11010100(二)原碼、反碼、補(bǔ)碼最高位為符號位,0表示 “+”,1表示“-”。 數(shù)值位與真值數(shù)值位相同。 例 8位原碼機(jī)器數(shù): 真值: x1 = +1010100B x2 =- 1010100B 機(jī)器數(shù): [x1]原 = 01010100 [x2]原 = 11010100原碼表示簡單直觀,但0的表示不唯一,加減運(yùn)算復(fù)雜。 正數(shù)的反碼與原碼表示相同。 負(fù)數(shù)反碼符號位為 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、字符編碼 美國標(biāo)準(zhǔn)信息交換碼ASCII碼,用于計算 機(jī)與計算機(jī)、計算機(jī)與外設(shè)之間傳遞信息。 3、漢字編碼 “國家標(biāo)準(zhǔn)信息交換用漢字編碼”(GB2312-80標(biāo)準(zhǔn)),簡稱國標(biāo)碼。 用兩個七位二進(jìn)制數(shù)編碼表示一個漢字 例如“巧”字的代碼是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ìn)行這種運(yùn)算時會出現(xiàn)潛在的錯誤。為了解決BCD數(shù)的運(yù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 三、 帶符號二進(jìn)制數(shù)的運(yùn)算 1.5 幾個重要的數(shù)字邏輯電路編碼器譯碼器計數(shù)器微機(jī)自動工作的條件程序指令順序存放自動跟蹤指令執(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)管腳特點 1、多功能;2、分時復(fù)用內(nèi)部結(jié)構(gòu) 1、控制; 2、運(yùn)算; 3、寄存器; 4、地址程序計數(shù)器堆棧定義 1、定義;2、管理;3、堆棧形式
上傳時間: 2013-10-17
上傳用戶:erkuizhang
MCS-51單片機(jī)實用子程序庫 ;片內(nèi)RAM初始化子程序IBCLR: MOV A,R0MOV R1,ACLR AIBC1 : MOV @R1,AINC R1DJNZ R7,IBC1RET;片外RAM初始化子程序EBCLR1: MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,ACLR CEBC11: MOVX @DPTR,AINC DPTRDJNZ R7,EBC11RET;片外RAM初始化子程序(雙字節(jié)個單元)EBCLR2: MOV A,ADDPLMOV DPL,AMOV A,ADDPHMOV DPH,AMOV A,R7JZ EBC21INC R6EBC21: CLR AMOVX @DPTR,AINC DPTRDJNZ R7,EBC21DJNZ R6,EBC21RET;內(nèi)部RAM數(shù)據(jù)復(fù)制程序;入口: R0,R7;占用資源: A;堆棧需求: 2字節(jié)
上傳時間: 2013-10-10
上傳用戶:18602424091
可編程邏輯器件(PLD)是嵌入式工業(yè)設(shè)計的關(guān)鍵元器件。在工業(yè)設(shè)計中,PLD已經(jīng)從提供簡單的膠合邏輯發(fā)展到使用FPGA作為協(xié)處理器。該技術(shù)在通信、電機(jī)控制、I/O模塊以及圖像處理等應(yīng)用中支持 I/O 擴(kuò)展,替代基本的微控制器 (MCU) 或者數(shù)字信號處理器 (DSP)。 隨著系統(tǒng)復(fù)雜度的提高,F(xiàn)PGA還能夠集成整個芯片系統(tǒng)(SoC),與分立的 MCU、DSP、ASSP,以及 ASIC解決方案相比,大幅度降低了成本。不論是用作協(xié)處理器還是SoC,Altera FPGA在您的工業(yè)應(yīng)用中都具有以下優(yōu)點: 1. 設(shè)計集成——使用FPGA作為協(xié)處理器或者SoC,在一個器件平臺上集成 IP和軟件堆棧,從而降低成本。 2. 可重新編程能力——在一個公共開發(fā)平臺的一片 FPGA中,使工業(yè)設(shè)計能夠適應(yīng)協(xié)議、IP以及新硬件功能的發(fā)展變化。 3. 性能調(diào)整——通過FPGA中的嵌入式處理器、定制指令和IP模塊,增強(qiáng)性能,滿足系統(tǒng)要求。 4. 過時保護(hù)——較長的 FPGA 產(chǎn)品生命周期,通過 FPGA 新系列的器件移植,延長工業(yè)產(chǎn)品的生命周期,保護(hù)硬件不會過時。 5. 熟悉的工具——使用熟悉的、功能強(qiáng)大的集成工具,簡化設(shè)計和軟件開發(fā)、IP集成以及調(diào)試。
標(biāo)簽: FPGA 工業(yè)應(yīng)用
上傳時間: 2014-12-28
上傳用戶:rnsfing
提出了一種將堆棧空間劃分為任務(wù)棧和中斷嵌套棧的設(shè)計結(jié)構(gòu),使堆棧空間最小化。采用VHDL硬件語言,在FPGA設(shè)備上模擬實現(xiàn)了具有自動檢驗功能的棧空間管理器。棧空間管理器由不同功能的邏輯模塊組成,主要闡述了狀態(tài)控制邏輯模塊和地址產(chǎn)生邏輯模塊的設(shè)計方法。
上傳時間: 2014-12-28
上傳用戶:plsee
詳細(xì)介紹了以LPC1788 ARM Cortex-M3微處理器為目標(biāo)硬件平臺,在IAR Embedded Workbench for ARM 6.3集成開發(fā)環(huán)境下μC/OS-II 實時操作系統(tǒng)的詳細(xì)移植過程,重點闡述移植代碼中堆棧初始化、任務(wù)切換、時鐘中斷服務(wù)程序的編寫方法,并在評估板上驗證了在該嵌入式實時操作系統(tǒng)上實現(xiàn)多任務(wù)操作。
上傳時間: 2014-01-22
上傳用戶:HGH77P99
隨著多核平臺在嵌入式市場的激增,從傳統(tǒng)堆棧到多核堆棧的遷移已成標(biāo)準(zhǔn)任務(wù)。但它本身引發(fā)了如何有效挖掘多核功能的一些挑戰(zhàn)。部分需要解決的問題包括:調(diào)試、有效線程處理及避免出現(xiàn)死鎖情況、性能和時間造成的延遲問題、多個CPU之間共享系統(tǒng)資源的問題、緩存一致性問題、OS角色問題(不同CPU之間的線程及中斷遷移)等。本會議將具體討論這些挑戰(zhàn)并且針對如何應(yīng)對這些挑戰(zhàn)提供相應(yīng)的建議。此外,我們還將討論現(xiàn)有的調(diào)試技術(shù)、工具和方法論。
上傳時間: 2013-12-26
上傳用戶:wxnumen
針對在51單片機(jī)上移植實時操作系統(tǒng)μC/OS-II的目的,以μC/OS-II工作原理為基礎(chǔ),結(jié)合51單片機(jī)堆棧空間少的情況,采用改變堆棧指針到不同任務(wù)寄存器組的方法,通過改變堆棧指針的實驗,得出在堆棧空間較少的情況下,也能夠?qū)崿F(xiàn)μC/OS-II在51單片機(jī)上的運(yùn)行的結(jié)論。
上傳時間: 2013-11-13
上傳用戶:hz07104032
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1