操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    、ARM匯編:匯編中IA、IB、DA、DB和FD、ED、FA、EA

    2、ARM處理器的9種模式詳解

    3、MRS,MSR指令詳解

    4、嵌入式DDR布線分析 DDR信號布線介紹

    5、嵌入式學習之IRQ和FIQ之間的區別

    ARM指令的多數據傳輸(STM、LDM)中,提到:多寄存器的Load和Store指令分為2組:
    一組用于數據的存儲與讀取,對應于IA、IB、DA、DB,
    一組用于堆棧操作,對應于FD、ED、FA、EA,

    兩組中對應的指令含義相同。

    IA:increase after ;表示數據傳輸后地址增加
    IB:increase before
    DA: decrease after
    DB: decrease before

    即:

    1. STMIB(地址先增而后完成操作)
    2. STMFA(滿遞增堆棧)
    3. STMIA(完成操作而后地址遞增)
    4. STMEA(空遞增堆棧)
    5. STMDB(地址先減而后完成操作)
    6. STMFD(滿遞減堆棧)
    7. STMDA(完成操作而后地址遞減)
    8. STMED(空遞減堆棧)

    上述各組2個指令含義相同只是適用場合不同,同理有:

    1、LDMIB、LDMED;

    2、LDMIA、LDMFD;

    3、LDMDB、LDMEA

    4、LDMDA、LDMFA。

    IA模式表示:每次傳送后地址+4;(After Increase)

    DB模式表示:每次傳送前地址-4;(Before Decrease)

    多寄存器加載/存儲指令共有8種模式(4個用與數據塊的傳輸,4個用于棧操作)

    STMDB和LDMIA指令一般配對使用,STMDB用于將寄存器壓棧,LDMIA用于將寄存器彈出棧,作用是保存使用到的寄存器。

    例、

    指令:stmdb sp!,{r0-r12,lr}
    含義:sp = sp - 4,先壓lr,sp = lr(即將lr中的內容放入sp所指的內存地址)。sp = sp - 4,再壓r12,sp = r12。sp = sp - 4,再壓r11,sp = r11......sp = sp - 4,最后壓r0,sp = r0。

    如果想要將r0-r12和lr彈出,可以用ldmia指令:ldmia sp!,{r0-r12,lr}

    STMIA, 比如當前r0指向的內存地址是 0x1000,STMIA R0!,{R1-R7} 就是 首先把r1存入 0x1000,然后r2存入0x1004,然后r3存入0x1008,如果是32位的處理器就是每次加4個字節,以此類推把 r1-r7按照遞增的地址存入,這個r0!就是從r0的地址開始存的意思。STMDB則是地址從r0開始減少,依次存儲。

    LDMIA:LDM是多寄存器存取的意思,后面參數以“,”分隔,第一個參數是首地址;第二個參數是寄存器列表,并以“{}”括起來。
    LDMIA R0!, {R1-R4};R0表示要操作的存儲空間首地址,要操作的數據個數由寄存器列表決定,現在是R1到R4,共4個數據(每個數據是32bits的)

    具體:
    地址為R0的存儲空間中的數據賦值給R1
    地址為R0+4的存儲空間中的數據賦值給R2
    地址為R0+8的存儲空間中的數據賦值給R3
    地址為R0+12的存儲空間中的數據賦值給R4

    所有的示例指令執行前的存儲空間和寄存器情況:
    mem32[0x1000C] = 0x04
    mem32[0x10008] = 0x03
    mem32[0x10004] = 0x02
    mem32[0x10000] = 0x01
    r0 = 0x00010000
    r1 = 0x00000000
    r3 = 0x00000000
    r4 = 0x00000000
    執行后存儲空間不變,寄存器變化:
    r0 = 0x00010010
    r1 = 0x01
    r2 = 0x02
    r3 = 0x03
    r4 = 0x04

    2、ARM處理器的9種模式詳解

    ARM的處理器模式分幾種要看是ARM的哪個系列,但是以現在的系列來說,有九種模式,這九種模式就是CPU在運算的時候,本來在讀程序,突然系統發生異常,比如說藍屏,這個時候操作系統肯定有相關的處理,同時我們也需要CPU一些信號,那么我們就可以通話CPU的切換來進行處理,這樣實際上是在最低級別上考慮到的方式來完成了安全控制和效率控制,還有節能控制,所以這就是我們為什么要模式切換的原因,它模式與模式之間相對而言是比較獨立的。

    Cortex-A九種處理器模式

    1,user模式:用戶模式,大部分程序運行時候的非特權模式。

    2,FIQ模式:快速中斷模式,進入FIQ中斷異常,中斷也會分類,除了硬件中斷還有軟件中斷,中斷的時候也會有消息傳過來,這個消息可能數據量比較大,而且要求還很大,還有的消息數據量比較小,它要求就會很小,這種要求大的中斷我們就稱為快速中斷,比較小的我們就稱為一般中斷。

    3,IRQ模式:一般中斷模式。

    4,Supervisor(SVC)模式:超級管理員,它主要是用來管理調用指令被執行或者reset的時候,這個模式的權限級別非常大,所以一般情況下是不能隨便用的。

    5,Monitor(MON)模式:監視模式,就像后臺服務,就像監測網絡信號,其實CPU不需要去處理一些用戶中斷,這個模式主要用來安全擴展模式,只用于安全。

    6,Abort(ABY)模式:退出模式,通常開始發生了用戶級別的開始,就會出現這樣的退出,這個時候CPU就會說暫停下面的代碼運行,就直接退出。

    7,Hyp(HYP)模式:是一個超級的監視者,它比超級管理員要稍微低一點,它主要是用來做一些虛擬化的擴展。

    8,Undef(UND)模式:它就是未定義的指令執行的時候,比如說一條指令是CPU不識別的,就叫做未定義。

    9,System(SYS)模式:系統模式,當系統自己異常的時候,就會發生這樣的模式,它有一個特點就是可以進行各個模式的切換,在不同的狀態的時候,訪問的寄存器就有可能不一樣,這個模式用到的寄存器與用戶模式是共享的,只是訪問級別不一樣。這九種模式里面User模式稱為非特權模式,其他的全部稱為特權模式。

    3、MRS,MSR指令詳解

    在ARM處理器中,只有MRS(Move to Register from State register)指令可以對狀態寄存器CPSR和SPSR進行讀操作。通過讀CPSR可以獲得當前處理器的工作狀態。讀SPSR寄存器可以獲得進入異常前的處理器狀態(因為只有異常模式下有SPSR寄存器)。

    例如:

    MRS R1,CPSR ; 將CPSR狀態寄存器讀取,保存到R1中

    MRS R2,SPSR ; 將SPSR狀態寄存器讀取,保存到R2中

    通過MRS指令可以取得狀態寄存器里的值,然后比較其模式位M[4:0]的值判斷當前所處模式,當然也可以比較其它相應位了解當前CPU的狀態。

    同樣,在ARM處理器中,只有MSR指令可以對狀態寄存器CPSR和SPSR進行寫操作。與MRS配合使用,可以實現對CPSR或SPSR寄存器的讀-修改-寫操作,可以切換處理器模式、或者允許/禁止IRQ/FIQ中斷等。

    由于xPSR寄存器代表了CPU的狀態,其每個位有特殊意義,在執行對xPSR狀態寄存器寫入時(讀取時不存在該用法),為了防止誤操作和方便記憶,將xPSR里32位分成四個區域,每個區域用小寫字母表示:

    c 控制域屏蔽 psr[7..0]

    x 擴展域屏蔽 psr[15..8]

    s 狀態域屏蔽 psr[23..16]

    f 標志域屏蔽 psr[31..24]

    注意:區域名必須為小寫字母

    向對應區域進行執行寫入時,使用xPSR_x可以指定寫入區域,而不影響狀態寄存器其它位,如:

    使能IRQ中斷:

    ENABLE_IRQ

    MRS R0, CPSR ; 將CPSR寄存器內容讀出到R0

    BIC R0, R0,#0x80 ; 清掉CPSR中的I控制位

    MSR CPSR_c,R0 ; 將修改后的值寫回 CPSR寄存器的對應控制域

    MOV PC,LR ; 返回上一層函數

    禁用IRQ中斷:

    DISABLE_IRQ

    MRS R0 CPSR ; 將CPSR寄存器內容讀出到R0

    ORR R0, R0,#0x80 ; 設置CPSR中的I控制位

    MSR CPSR_c,R0 ; 將修改后的值寫回 CPSR寄存器的對應控制域

    MOV PC,LR ; 返回上一層函數

    下表列出了不同模式的二進制數表示:

    表3-3 不同工作模式對應二進制



    在對開發板進行初始化時,用對不同模式指定其??臻g,下面例子對各模式的棧指針sp進行初始化:

    stack_init ; 棧指針初始化函數

    @ undefine_stack

    msr cpsr_c, #0xdb ; 切換到未定義異常

    ldr sp, =0x34000000 ; 棧指針為內存最高地址,棧為倒生的棧

    ; ??臻g的最后1M 0x34000000~0x33f00000

    @ abort_stack

    msr cpsr_c, #0xd7 ; 切換到終止異常模式

    ldr sp, =0x33f00000 ; ??臻g為1M,0x33f00000~0x33e00000

    @ irq_stack

    msr cpsr_c, #0xd2 ; 切換到中斷模式

    ldr sp, =0x33e00000 ; ??臻g為1M,0x33e00000~0x33d00000

    @ sys_stack

    msr cpsr_c, #0xdf ; 切換到系統模式

    ldr sp, =0x33d00000 ; ??臻g為1M,0x33d00000~0x33c00000

    msr cpsr_c, #0xd3 ; 切換回管理模式

    mov pc, lr

    4、嵌入式DDR布線分析 DDR信號布線介紹

    嵌入式DDR(Double Data Rate,雙數據速率)設計是含DDR的嵌入式硬件設計中最重要和最核心的部分。隨著嵌入式系統的處理能力越來越強大,實現的功能越來越多,系統的工作頻率越來越高,DDR的工作頻率也逐漸從最低的133 MHz提高到200 MHz,從而實現了更大的系統帶寬和更好的性能。然而,更高的工作頻率同時也對系統的穩定性提出了更高的要求,這需要硬件設計者對電路的布局走線有更多的約束和考慮。而影響整個系統能否工作正常且穩定的最重要的部分就是DDR部分的電路設計。

    嵌入式系統使用DDR內存,可以在傳統的單數據數率內存芯片上實現更好的性能。DDR允許在不增加時鐘頻率和數據位寬的條件下,一個時鐘周期內能夠處理兩個操作。增加的數據總線性能是由于源同步數據選通允許數據同時在選通脈沖的上升沿和下降沿被獲取

    DDR雖然能夠給嵌入式設計帶來更好的性能,但是設計者必須比以往的SDR設計更小心地處理DDR部分的PCB布線部分,否則不僅不能實現好的性能,整個嵌人式系統的穩定性也會受到影響。DDR比傳統的SDR有更短的信號建立保持時間、更干凈的參考電壓、更緊密的走線匹配和新的I/O口信號,并且需要合適的終端電阻匹配。這些都是要面對的新的挑戰。

    1 DDR總線結構

    對于DDR內存,JEDEC建立和采用了一個低壓高速信號標準。這個標準稱為“短截線串聯終結邏輯(StubSeries Terminated Logic,SSTL)”。SSTL能夠改進數據通過總線傳輸的信號完整性,這種終端設計的目的是防止在高速傳輸下由于信號反射導致的數據錯誤。

    在一個典型的內存拓撲結構中,如果使用了串聯匹配電阻(RS),那么它應該放在遠離DDR控制器的位置。這種方法能夠節約控制器附近寶貴的電路板空間,避免布線擁塞和繁瑣的引腳扇出;而且也優化了從控制器到內存芯片的信號完整性,在這些位置往往有很多地址和命令信號需要可靠地被多個內存接收。

    最普通的SSTL終端模型是一種較好的單終端和并聯終端方案,如圖1所示。這種方案包含使用一個串聯終端電阻(Rs)從控制器到內存,以及一個并聯終端電阻(RT)上拉到終端電壓(VTT)。這種方法常見于商用電腦的主板上,但目前的嵌入式主板上為了獲得更好的信號完整性和系統穩定性,也常常使用。RS和RT的值是信賴于具體的系統的,應該由板級仿真確定具體的值。

    5、嵌入式學習之IRQ和FIQ之間的區別

    IRQ和FIQ是ARM處理器的兩種編程模式。IRQ是指中斷模式,FIR是指快速中斷模式。對于 FIQ 你必須盡快處理你的事情并離開這個模式。IRQ 可以被 FIQ 所中斷,但 IRQ 不能中斷 FIQ。為了使 FIQ 更快,所以這種模式有更多的影子寄存器。FIQ 不能調用 SWI(軟件中斷)。FIQ 還必須禁用中斷。如果一個 FIQ 例程必須重新啟用中斷,則它太慢了,并應該是 IRQ 而不是 FIQ。

    對FIQ你必須進快處理中斷請求,并離開這個模式。

    IRQ可以被FIQ所中斷,但FIQ不能被IRQ所中斷。在處理FIQ時必須要關閉中斷。

    FIQ和IRQ是兩種不同類型的中斷,ARM為了支持這兩種不同的中斷,提供了對應的叫做FIQ和IRQ處理器模式(ARM有7種處理模式)。

    一般的中斷控制器里我們可以配置與控制器相連的某個中斷輸入是FIQ還是IRQ,所以一個中斷是可以指定為FIQ或者IRQ的,為了合理,要求系統更快響應,自身處理所耗時間也很短的中斷設置為FIQ,否則就設置了IRQ。

    如果該中斷設置為了IRQ,那么當該中斷產生的時候,中斷處理器通過IRQ請求線告訴ARM,ARM就知道有個IRQ中斷來了,然后ARM切換到IRQ模式運行。類似的如果該中斷設置為FIQ,那么當該中斷產生的時候,中斷處理器通過FIQ請求線告訴ARM,ARM就知道有個FIQ中斷來了,然后切換到FIQ模式運行。

    簡單的對比的話就是FIQ比IRQ快,為什么快呢?

    ARM的FIQ模式提供了更多的banked寄存器,r8到r14還有SPSR,而IRQ模式就沒有那么多,R8,R9,R10,R11,R12對應的banked的寄存器就沒有,這就意味著在ARM的IRQ模式下,中斷處理程序自己要保存R8到R12這幾個寄存器,然后退出中斷處理時程序要恢復這幾個寄存器,而FIQ模式由于這幾個寄存器都有banked寄存器,模式切換時CPU自動保存這些值到banked寄存器,退出FIQ模式時自動恢復,所以這個過程FIQ比IRQ快.

    FIQ比IRQ有更高優先級,如果FIQ和IRQ同時產生,那么FIQ先處理。

    在symbian系統里,當CPU處于FIQ模式處理FIQ中斷的過程中,預取指令異常,未定義指令異常,軟件中斷全被禁止,所有的中斷被屏蔽。所以FIQ就會很快執行,不會被其他異?;蛘咧袛啻驍?,所以它又比IRQ快了。而IRQ不一樣,當ARM處理IRQ模式處理IRQ中斷時,如果來了一個FIQ中斷請求,那正在執行的IRQ中斷處理程序會被搶斷,ARM切換到FIQ模式去執行這個FIQ,所以FIQ比IRQ快多了。

    另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18。

    >首先在“運行”里面輸入cmd,打開一個命令行窗口,轉到U盤的盤符,然后執行如下命令:mkdir autorun.inf cd autorun.inf mkdir a...\\ ,這樣就可以起到U盤病毒免疫的功能了。其原理也很簡單,通過建立這樣一個非常規,且無法刪除的autorun.inf目錄,使得病毒自己無法創建這樣的文件來引發U盤病毒,從而起到防止U盤病毒或者蠕蟲病毒自動運行的功能,這個方法本身并沒有殺毒功能。
網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有