南海Saia-Burgess HMI維修 桂城Saia-Burgess觸摸屏維修 大瀝Saia-Burgess觸摸屏維修 丹灶Saia-Burgess觸摸屏維修 平洲Saia-Burgess觸摸屏維修 里水Saia-Burgess觸摸屏維修 獅山Saia-Burgess觸摸屏維修 九江Saia-Burgess觸摸屏維修南海區轄1個街道(桂城街道)、6個鎮(里水鎮、九江鎮、丹灶鎮、大瀝鎮、獅山鎮、西樵鎮)。
共67個村委會、182個居委會。
政府駐桂城街道。
佛山騰鳴自動化控制設備有限公司,專業從事自動化設備、電氣系統維修改造。
公司專業流量計維修,變頻器維修,直流調速器維修,PLC維修,觸摸屏維修,伺服控制器維修,工控機維修,軟啟動器維修,UPS不間斷電源維修,人機界面維修,工業電腦維修,工控電腦維修,伺服放大器維修,伺服伺動器維修,維修觸摸屏,維修變頻器、等各種工業儀器。
不可質疑的五大優勢: 一,免出差費,不收取任何出差服務費二,維修報價制度規范(維修行業報價規范的倡議者、表率者)三,無電氣圖紙資料也可維修四,高校合作單位五,行業協會副理事長單位 (不必猶豫顧慮,拿起給李工打個咨詢交流一下吧。
能不能修,修不修得了,維修時間要多久,維修費用大概多少,等等疑問,都將不再是疑問了)維修觸摸屏品牌:BECKHOFF觸摸屏維修、LASKA觸摸屏維修、unitronics觸摸屏維修、SUTRON觸摸屏、LAUER觸摸屏維修、Resotec觸摸屏維修、Eisenmann觸摸屏維修、UNIOP觸摸屏維修、NESLAB RPC觸摸屏維修、STAHL觸摸屏維修、spn觸摸屏維修、M2I觸摸屏維修、AUTOSPLICE觸摸屏維修、Cutler Hammer觸摸屏維修、PILZ觸摸屏維修、觸摸屏維修、REDLION觸摸屏維修、BEIJER觸摸屏維修、rkc觸摸屏維修、CONTEC觸摸屏維修、hitachi觸摸屏維修、moeller觸摸屏維修、patlite觸摸屏維修、keba觸摸、koyo觸摸屏維修、idec觸摸屏維修屏維修、KOMATSU觸摸屏維修、YAMATAKE觸摸屏維修、博世力士樂觸摸屏維修、AB觸摸屏維修、三洋觸摸屏維修、白光觸摸屏維修、富士觸摸屏維修、海泰克觸摸屏維修、三菱觸摸屏維修、臺達觸摸屏維修、ABB觸摸屏維修、施耐德觸摸屏維修、proface觸摸屏維修、ESA觸摸屏維修、歐姆龍觸摸屏維修、西門子觸摸屏維修、B&R觸摸屏維修、松下觸摸屏維修、基恩士觸摸屏維修、威綸通觸摸屏維修、GARVENS觸摸屏維修、eview觸摸屏維修、WEINVIEW觸摸屏維修Saia-Burgess觸摸屏維修常見故障:上電無顯示,運行報警,觸控板破裂,觸摸玻璃,無法與電腦通訊,觸摸無反應,上電黑屏,上電白屏等故障。
一、異常(Exception)異常是理解CPU運轉最重要的一個知識點,幾乎每種處理器都支持特定異常處理,中斷是異常中的一種。
有時候我們衡量一個操作系統的時候實時性就是看os最短響應中斷時間以及單位時間內響應中斷次數。
二、異常源在ARM體系結構中,存在7種異常處理。
當異常發生時,處理器會把PC設置為一個特定的存儲器地址。
這一地址放在被稱為向量表(vector table)的特定地址范圍內,向量表的入口是一些跳轉指令,跳轉到專門處理某個異?;蛑袛嗟淖映绦颉?br>1. 異常源分類要進入異常模式,一定要有異常源,ARM規定有7種異常源:異常源描述Reset上電時執行Undef當流水線中的某個非法指令到達執行狀態時執行SWI當一個軟中斷指令被執行完的時候執行Prefetch當一個指令被從內存中預取時,由于某種原失敗,如果它能到達執行狀態這個異常才會產生Data如果一個預取指令試圖存取一個非法的內存單元,這時異常產生IRQ通常的中斷FIQ快速中斷reset復位異常當CPU剛上電時或按下reset重啟鍵之后進入該異常,該異常在管理模式下處理。
irq/fiq一般/快速中斷請求CPU和外部設備是分別獨立的硬件執行單元,CPU對全部設備進行管理和資源調度處理,CPU要想知道外部設備的運行狀態,要么CPU定時的去查看外部設備特定寄存器,要么讓外部設備在出現需要CPU干涉處理時“打斷”CPU,讓它來處理外部設備的請求,毫無疑問第二種方式更合理,可以讓CPU“專心”去工作,這里的“打斷”操作就叫做中斷請求,根據請求的緊急情況,中斷請求分一般中斷和快速中斷,快速中斷具有最高中斷優先級和最小的中斷延遲,通常用于處理高速數據傳輸及通道的中數據恢復處理,如DMA等,絕大部分外設使用一般中斷請求。
預取指令中止異常該異常發生在CPU流水線取指階段,如果目標指令地址是非法地址進入該異常,該異常在中止異常模式下處理。
未定義指令異常該異常發生在流水線技術里的譯碼階段,如果當前指令不能被識別為有效指令,產生未定義指令異常,該異常在未定義異常模式下處理。
軟件中斷指令(swi)異常該異常是應用程序自己調用時產生的,用于用戶程序申請訪問硬件資源時,例如:printf()打印函數,要將用戶數據打印到顯示器上,用戶程序要想實現打印必須申請使用顯示器,而用戶程序又沒有外設硬件的使用權,只能通過使用軟件中斷指令切換到內核態,通過操作系統內核代碼來訪問外設硬件,內核態是工作在特權模式下,操作系統在特權模式下完成將用戶數據打印到顯示器上。
這樣做的目的無非是為了保護操作系統的安全和硬件資源的合理使用,該異常在管理模式下處理。
數據中止訪問異常該異常發生在要訪問數據地址不存在或者為非法地址時,該異常在中止異常模式下處理。
2. ARM的異常優先級Reset→Data abort→FIQ→IRQ→Prefetch abort→Undefined instruction/SWI。
3. FIQ 比 IRQ快的原因fiq 比 irq 的優先級高FIQ 向量位于向量表的最末端,異常處理不需要跳轉FIQ 比 IRQ 多5個私有的寄存器(r8-r12),在中斷操作時,壓棧出棧操作的少。
三、異常發生的硬件操作異常發生后,ARM核的操作步驟可以為4大步3小步。
1. 4大步3小步保存執行狀態:將CPSR復制到發生的異常模式下SPSR中;模式切換:CPSR模式位強制設置為與異常類型相對應的值,處理器進入到ARM執行模式,禁止所有IRQ中斷,當進入FIQ快速中斷模式時禁止FIQ中斷;保存返回地址:將下一條指令的地址(被打斷程序)保存在LR(異常模式下LR_excep)中。
跳入異常向量表:強制設置PC的值為相應異常向量地址,跳轉到異常處理程序中。
2. 步驟詳解保存執行狀態當前程序的執行狀態是保存在CPSR里面的,異常發生時,要保存當前的CPSR里的執行狀態到異常模式里的SPSR里,將來異常返回時,恢復回CPSR,恢復執行狀態。
模式切換硬件自動根據當前的異常類型,將異常碼寫入CPSR里的M[4:0]模式位,這樣CPU就進入了對應異常模式下。
不管是在ARM狀態下還是在THUMB狀態下發生異常,都會自動切換到ARM狀態下進行異常的處理,這是由硬件自動完成的,將CPSR[5] 設置為 0。
CPU會關閉中斷IRQ(設置CPSR 寄存器I位),防止中斷進入,如果當前是快速中斷FIQ異常,關閉快速中斷(設置CPSR寄存器F位)。
保存返回地址當前程序被異常打斷,切換到異常處理程序里,異常處理完之后,返回當前被打斷模式繼續執行,必須要保存當前執行指令的下一條指令的地址到LR_excep(異常模式下LR,并不存在LR_excep寄存器,為方便讀者理解加上_excep,以下道理相同),由于異常模式不同以及ARM內核采用流水線技術,異常處理程序里要根據異常模式計算返回地址。
跳入異常向量表該操作是CPU硬件自動完成的,當異常發生時,CPU強制將PC的值修改為一個固定內存地址,這個固定地址叫做異常向量。
四、異常向量表異常向量表是一段特定內存地址空間,每種ARM異常對應一個字長空間(4Bytes),正好是一條32位指令長度,當異常發生時,CPU強制將PC的值設置為當前異常對應的固定內存地址。
1. 異常向量表:異常向量表跳入異常向量表操作是異常發生時,硬件自動完成的,剩下的異常處理任務完全交給了程序員。
由上表可知,異常向量是一個固定的內存地址,我們可以通過向該地址處寫一條跳轉指令,讓它跳向我們自己定義的異常處理程序的入口,就可以完成異常處理了。
正是由于異常向量表的存在,才讓硬件異常處理和程序員自定義處理程序有機聯系起來。
異常向量表里0x00000000地址處是reset復位異常,之它為0地址,是因為CPU在上電時自動從0地址處加載指令,將復位異常安裝在此地址處也是前后接合起來設計的,不得不感嘆CPU設計師的偉大,其后面分別是其余7種異常向量,每種異常向量都占有四個字節,正好是一條指令的大小,最后一個異常是快速中斷異常,將其安裝在此也有它的意義,在0x0000001C地址處可以直接存放快速中斷的處理程序,不用設置跳轉指令,這樣可以節省一個時鐘周期,加快快速中斷處理時間。
存儲器映射地址0x00000000是為向量表保留的。
在有些處理器中,向量表可以選擇定位在高地址0xFFFF0000處【可以通過協處理器指令配置】,當今操作系統為了控制內存訪問權限,通常會開啟虛擬內存,開啟了虛擬內存之后,內存的開始空間通常為內核進程空間,和頁表空間,異常向量表不能再安裝在0地址處了。
比如Cortex-A8系統中支持通過設置CP15的C12寄存器將異常向量表的首地址放置在任意地址。
2. 安裝異常向量表我們可以通過簡單的使用下面的指令來安裝異常向量表:b reset ;跳入reset處理程序b HandleUndef ;跳入未定義處理程序b HandSWI ;跳入軟中斷處理程序b HandPrefetchAbt ;跳入預取指令處理程序b HandDataAbt ;跳入數據訪問中止處理程序b HandNoUsed ;跳入未使用程序b ;跳入中斷處理程序b ;跳入快速中斷處理程序通常安裝完異常向量表,跳到我們自己定義的處理程序入口,這時我們還沒有保存被打斷程序的現場,在異常處理程序的入口里先要保存打斷程序現場。
3. 保存執行現場異常處理程序最開始,要保存被打斷程序的執行現場,程序的執行現場無非就是保存當前操作寄存器里的數據,可以通過下面的棧操作指令實現保存現場:STMFD SP_excep!, {R0 – R12, LR_excep}注:LR_abt,SP_excep分別為對應異常模式下LR和SP,為方便讀者理解加上_abt需要注意的是,在跳轉到異常處理程序入口時,已經切換到對應異常模式下了,這里的SP是異常模式下的SP_excep了,被打斷程序現場(寄存器數據)是保存在異常模式下的棧里,上述指令將R0~R12全部都保存到了異常模式棧,最后將修改完的被打斷程序返回地址入棧保存,之保存該返回地址就是將來可以通過類似:MOV PC, LR的指令,返回用戶程序繼續執行。
異常發生后,要針對異常類型進行處理,每種異常都有自己的異常處理程序,中斷異常處理過程通過下節的系統中斷處理來進行分析。
五、異常處理的返回異常處理完成之后,返回被打斷程序繼續執行,具體操作如下:恢復被打斷程序運行時寄存器數據恢復程序運行時狀態CPSR通過進入異常時保存的返回地址,返回到被打斷程序繼續執行1. 異常返回地址一條指令的執行分為:取指,譯碼,執行三個主要階段, CPU由于使用流水線技術,造成當前執行指令的地址應該是PC – 8(32位機一條指令四個字節),那么執行指令的下條指令應該是PC – 4。
在異常發生時,CPU自動會將將PC – 4 的值保存到LR里,該值是否正確還要看異常類型才能決定。
各模式的返回地址說明如下:一般/快速中斷請求:快速中斷請求和一般中斷請求返回處理是一樣的。
通常處理器執行完當前指令后,查詢FIQ/IRQ中斷引腳,并查看是否允許FIQ/IRQ中斷,如果某個中斷引腳有效,并且系統允許該中斷產生,處理器將產生FIQ/IRQ異常中斷,當FIQ/IRQ異常中斷產生時,程序計數器pc的值已經更新,它指向當前指令后面第3條指令(對于ARM指令,它指向當前指令地址加12字節的位置;對于Thumb指令,它指向當前指令地址加6字節的位置),當FIQ/IRQ異常中斷產生時,處理器將值(pc-4)保存到FIQ/IRQ異常模式下的寄存器lr_irq/lr_irq中,它指向當前指令之后的第2條指令,正確返回地址可以通過下面指令算出:SUBS PC,LR_irq,#4 ; 一般中斷SUBS PC,LR_fiq,#4 ; 快速中斷注:LR_irq/LR_fiq分別為一般中斷和快速中斷異常模式下LR,并不存在LR_xxx寄存器,為方便讀者理解加上_xxx,下同。
預取指中止異常:在指令預取時,如果目標地址是非法的,該指令被標記成有問題的指令,這時,流水線上該指令之前的指令繼續執行,當執行到該被標記成有問題的指令時,處理器產生指令預取中止異常中斷。
發生指令預取異常中斷時,程序要返回到該有問題的指令處,重新讀取并執行該指令,指令預取中止異常中斷應該返回到產生該指令預取中止異常中斷的指令處,而不是當前指令的下一條指令。
指令預取中止異常中斷由當前執行的指令在ALU里執行時產生,當指令預取中止異常中斷發生時,程序計數器pc的值還未更新,它指向當前指令后面第2條指令(對于ARM指令,它指向當前指令地址加8字節的位置;對于Thumb指令,它指向當前指令地址加4字節的位置)。
此時處理器將值(pc-4)保存到lr_abt中,它指向當前指令的下一條指令,返回操作可以通過下面指令實現:SUBS PC,LR_abt,#4未定義指令異常:未定義指令異常中斷由當前執行的指令在ALU里執行時產生,當未定義指令異常中斷產生時,程序計數器pc的值還未更新,它指向當前指令后面第2條指令(對于ARM指令,它指向當前指令地址加8字節的位置;對于Thumb指令,它指向當前指令地址加4字節的位置),當未定義指令異常中斷發生時,處理器將值(pc-4)保存到lr_und中,此時(pc-4)指向當前指令的下一條指令,從未定義指令異常中斷返回可以通過如下指令來實現:MOV PC, LR_und軟中斷指令(SWI)異常:SWI異常中斷和未定義異常中斷指令一樣,也是由當前執行的指令在ALU里執行時產生,當SWI指令執行時,pc的值還未更新,它指向當前指令后面第2條指令(對于ARM指令,它指向當前指令地址加8字節的位置;對于Thumb指令,它指向當前指令地址加4字節的位置),當未定義指令異常中斷發生時,處理器將值(pc-4)保存到lr_svc中,此時(pc-4)指向當前指令的下一條指令,從SWI異常中斷處理返回的實現方法與從未定義指令異常中斷處理返回一樣:MOV PC, LR_svc數據中止異常:發生數據訪問異常中斷時,程序要返回到該有問題的指令處,重新訪問該數據,數據訪問異常中斷應該返回到產生該數據訪問中止異常中斷的指令處,而不是當前指令的下一條指令。
數據訪問異常中斷由當前執行的指令在ALU里執行時產生,當數據訪問異常中斷發生時,程序計數器pc的值已經更新,它指向當前指令后面第3條指令(對于ARM指令,它指向當前指令地址加12字節的位置;對于Thumb指令,它指向當前指令地址加6字節的位置)。
此時處理器將值(pc-4)保存到lr_abt中,它指向當前指令后面第2條指令,返回操作可以通過下面指令實現:SUBS PC, LR_abt, #8上述每一種異常發生時,其返回地址都要根據具體異常類型進行重新修復返回地址,「強調下,被打斷程序的返回地址保存在對應異常模式下的LR_excep里」。
2. 模式恢復異常發生后,進入異常處理程序時,將用戶程序寄存器R0~R12里的數據保存在了異常模式下棧里面,異常處理完返回時,要將棧里保存的的數據再恢復回原先R0~R12里。
毫無疑問在異常處理過程中必須要保證異常處理入口和出口時棧指針SP_excep要一樣,否則恢復到R0~R12里的數據不正確,返回被打斷程序時執行現場不一致,出現問題,將執行現場恢復了,此時還是在異常模式下,CPSR里的狀態是異常模式下狀態。
要恢復SPSR_excep里的保存狀態到CPSR里,SPSR_excep是被打斷程序執行時的狀態,在恢復SPSR_excep到CPSR的CPU的模式和狀態從異常模式切換回了被打斷程序執行時的模式和狀態。
此刻程序現場恢復了,狀態也恢復了,但PC里的值仍然指向異常模式下的地址空間,我們要讓CPU繼續執行被打斷程序,要再手動改變PC的值為進入異常時的返回地址,該地址在異常處理入口時已經計算好,直接將PC = LR_excep即可。
上述操作可以一步一步實現,通常我們可以通過一條指令實現上述全部操作:LDMFD SP_excp!, {r0-r12, pc}^注:SP_excep為對應異常模式下SP,^符號表示恢復SPSR_excep到CPSR。
六、異常與模式關系reset異常進入SVC模式fiq快速中斷請求異常進入快中斷模式,支持高速數傳輸及通道處理(FIQ異常響應時進入此模式)irq中斷請求異常進入中斷模式,用于通用中斷處理,(IRQ異常響應時進入此模式)prefetch預取指中止,數據中止異常進入中止模式,用于支持虛擬內存和/或存儲器保護undef未定義指令異常進入未定義模式,支持硬件協處理器的軟件仿真(未定義指令異常響應時進入此模式)swi軟件中斷,復位異常進入管理模式,操作系統保護代碼(系統復位和軟件中斷響應時進入此模式)七、irq中斷異常1.中斷的概念什么是中斷,我們從一個生活的例子引入。
我們正在家中看書,突然鈴響了,你放下書本,去接,和來的人交談,放下,回來繼續看你的書。
這就是生活中的"中斷"的現象,也就是正常的工作過程被外部的事件打斷了。
在處理器中,所謂中斷,是一個過程,即CPU在正常執行程序的過程中,遇到外部/內部的緊急事件需要處理,暫時中斷(中止)當前程序的執行,而轉去為事件服務,待服務完畢,再返回到暫停處(斷點)繼續執行原來的程序。
為事件服務的程序稱為中斷服務程序或中斷處理程序。
嚴格地說,上面的描述是針對硬件事件引起的中斷而言的。
用軟件方法也可以引起中斷,即事先在程序中安排特殊的指令,CPU執行到該類指令時,轉去執行相應的一段預先安排好的程序,再返回來執行原來的程序,這可稱為軟中斷。
把軟中斷考慮進去,可給中斷再下一個定義:中斷是一個過程,是CPU在執行當前程序的過程中因硬件或軟件的原因插入了另一段程序運行的過程。
因硬件原因引起的中斷過程的出現是不可預測的,即隨機的,而軟中斷是事先安排的。
2. 中斷處理流程中斷異常發生時,整個處理流程:如上圖所示:執行執行到0x30000008時產生中斷cpu執行4大步3小步1) 保存CPSR到SPSR_irq2) 根據異常類型,設置模式標識位CPSR[4:0],CPU執行狀態CPSR[5]:T位=0和關閉中斷3) 設置返回地址LR=0x) 將PC指向對應的異常向量表地址[中斷IRQ:0x00000018]進入到異常向量表后執行 b 指令,跳轉到異常處理函數異常處理函數需要執行以下操作1) 修正返回地址 SUBS PC,LR_irq,#4 ,即0x3000000C2) 保存現場寄存器3) 跳入中斷處理函數isr_proccess(),執行中斷處理程序4) 恢復現場寄存器5) 返回現場PC=LR程序又回到0x3000000C位置,繼續執行關于中斷更詳細的講解,會在后續文章中詳細講解,請關注 [一口Linux]。
八、swi異常SWI指令SWI指令的格式為:SWI{條件} 24位的立即數SWI指令用于產生軟件中斷,以便用戶程序能調用操作系統的系統例程。
操作系統在SWI的異常處理程序中提供相應的系統服務,指令中24位的立即數指定用戶程序調用系統例程的類型,相關參數通過通用寄存器傳遞,當指令中24位的立即數被忽略時,用戶程序調用系統例程的類型由通用寄存器R0的內容決定,參數通過其他通用寄存器傳遞。
舉例:SWI 0x02 ;該指令調用操作系統編號位02的系統例程。
BKPT指令BKPT指令的格式為:BKPT 16位的立即數BKPT指令產生軟件斷點中斷,可用于程序的調試。
舉例以下是一個包含異常向量表的代碼,程序值填寫了reset異常和swi異常的入口,其他入口地址可以用空指令nop填充在這個位置。