簡述:一種由程式進行觸發的中斷,預設開啟
起源:svc(系統服務呼叫,亦簡稱系統呼叫)多用於在作業系統之上的軟體開發中。svc 用於產生系統函式的呼叫請求。例如,作業系統不讓使用者程式直接訪問硬體,而是通過提供一些系統服務函式,使用者程式使用 svc 發出對系統服務函式的呼叫請求,以這種方法呼叫它們來間接訪問硬體。因此,當使用者程式想要控制特定的硬體時,它就會產生乙個 svc 異常,然後作業系統提供的 svc 異常服務例程得到執行,它再呼叫相關的作業系統函式,後者完成使用者程式請求的服務。
用途:可以通過設定,使得一段**能夠被某些中斷打斷,而不能被另外一些中斷打斷,比如可用於確保模擬iic的時序不被打斷而造成通訊失敗
注意:
在c中使用svcall
svc服務函式使用堆疊進行引數傳遞,故c語言版的svc服務函式需要乙個彙編操作,用於把堆疊中的引數提取到暫存器中
__asm void svc_handler(void) //view code該函式名在keil中同usart2_irqhandler等等
////
pwdsf[0] = r0 , pwdsf[1] = r1
//pwdsf[2] = r2 , pwdsf[3] = r3
//pwdsf[4] = r12, pwdsf[5] = lr
//pwdsf[6] = 返回位址(入棧的pc)
//pwdsf[7] = xpsr
unsigned long svc_handler(unsigned int*pwdsf)
//注意,這個函式返回的其實不是0!進一步地,灰色的文字只是用於哄編譯器開心的,具體參考cortex-m3權威指南p169
如何觸發中斷?
step1.宣告函式(__svc會自動生成對應函式)//__svc時keil裡的乙個巨集
unsigned long __svc(0x03) callsvc3(unsigned long svc_r0, unsigned longstep2.呼叫函式svc_r1, unsigned
long svc_r2, unsigned long svc_r3);
unsigned long svcret; //簡述:一種由程式進行觸發的中斷,預設開啟系統服務的返回值
svcret=callsvc3(p0, p1, p2, p3); //
呼叫3號系統服務,並且傳遞4個引數,依次為:p1,p2,p3,p4,再接收返回值到svcret中(別忘了,這個返回值的來歷不尋常)
起源:svc(系統服務呼叫,亦簡稱系統呼叫)多用於在作業系統之上的軟體開發中。svc 用於產生系統函式的呼叫請求。例如,作業系統不讓使用者程式直接訪問硬體,而是通過提供一些系統服務函式,使用者程式使用 svc 發出對系統服務函式的呼叫請求,以這種方法呼叫它們來間接訪問硬體。因此,當使用者程式想要控制特定的硬體時,它就會產生乙個 svc 異常,然後作業系統提供的 svc 異常服務例程得到執行,它再呼叫相關的作業系統函式,後者完成使用者程式請求的服務。
用途:可以通過設定,使得一段**能夠被某些中斷打斷,而不能被另外一些中斷打斷,比如可用於確保模擬iic的時序不被打斷而造成通訊失敗
注意:
在c中使用svcall
svc服務函式使用堆疊進行引數傳遞,故c語言版的svc服務函式需要乙個彙編操作,用於把堆疊中的引數提取到暫存器中
__asm void svc_handler(void) //view code該函式名在keil中同usart2_irqhandler等等
////
pwdsf[0] = r0 , pwdsf[1] = r1
//pwdsf[2] = r2 , pwdsf[3] = r3
//pwdsf[4] = r12, pwdsf[5] = lr
//pwdsf[6] = 返回位址(入棧的pc)
//pwdsf[7] = xpsr
unsigned long svc_handler(unsigned int*pwdsf)
//注意,這個函式返回的其實不是0!進一步地,灰色的文字只是用於哄編譯器開心的,具體參考cortex-m3權威指南p169
如何觸發中斷?
step1.宣告函式(__svc會自動生成對應函式)//__svc時keil裡的乙個巨集
unsigned long __svc(0x03) callsvc3(unsigned long svc_r0, unsigned longstep2.呼叫函式svc_r1, unsigned
long svc_r2, unsigned long svc_r3);
unsigned long svcret; //51422中使用:系統服務的返回值
svcret=callsvc3(p0, p1, p2, p3); //
呼叫3號系統服務,並且傳遞4個引數,依次為:p1,p2,p3,p4,再接收返回值到svcret中(別忘了,這個返回值的來歷不尋常)
svcall(sd_ble_gap_adv_data_set, uint32_t, sd_ble_gap_adv_data_set(uint8_t const * const p_data, uint8_t dlen, uint8_t const * const p_sr_data, uint8_t srdlen));
這個svcall在使用mdk時是這麼定義的:
#define svcall(number, return_type, signature) return_type __svc(number) signature
似乎是使用了cortex-m0的svc機制實現softdevice。
乙個比較特殊的字元
位置在鍵盤中數字鍵 1 的左邊,其上檔符號是 使用shift鍵可以換擋為英文輸入法後,單機該鍵即可輸入。由於計算機顯示的原因,反單引號非常容易和單引號 混淆。一 反單引號是西方符號,主要用在linux的bash中。同時在數學軟體mathematica中也有應用。1.在bash中,其用法同 一樣,用 ...
乙個PCI中斷非同步的問題
最近發現由於pci資料傳輸錯誤導致io request得到的資料不正確,這種現象讓我們思考,為什麼系統都已經發現了pci錯誤,io request還能正確結束呢?按照慣例思考,pci傳輸出錯,io request就應該fail掉,但是,事實不是這樣。難道這個問題和pci的中斷非同步有關係?因此,這裡...
乙個特殊異常的問題
乙個特殊異常的問題 delphi windows sdk api 程式涉及到 多執行緒 list 整個程式也還沒看懂 只知道執行大概5天左右後 就報錯 顯示如下 access violation at address 00d24081 in module borlndmm.dll write of ...