1
我正在嘗試在lpc 1769(cortex m3)上進行上下文切換。我正在嘗試編寫一個計算數字指數的例程,在用戶模式下將其作爲子例程運行,但使用SVC調用和中斷處理程序來請求SVC進程與其代表交互。要打印出來的值應該作爲寄存器參數傳遞給SVC。lpc 1769上下文切換
如果我做模式從用戶模式切換到主模式,我怎樣才能獲得存儲在用戶模式堆棧中的值到主模式?
任何人都可以爲上述查詢寫一個小程序嗎?
在此先感謝您。
我正在嘗試在lpc 1769(cortex m3)上進行上下文切換。我正在嘗試編寫一個計算數字指數的例程,在用戶模式下將其作爲子例程運行,但使用SVC調用和中斷處理程序來請求SVC進程與其代表交互。要打印出來的值應該作爲寄存器參數傳遞給SVC。lpc 1769上下文切換
如果我做模式從用戶模式切換到主模式,我怎樣才能獲得存儲在用戶模式堆棧中的值到主模式?
任何人都可以爲上述查詢寫一個小程序嗎?
在此先感謝您。
您可以輕鬆地傳遞最多四個參數。只要寫一個C函數,並使用內聯彙編程序來調用主管:
#define svc(code) asm volatile ("svc %[immediate]"::[immediate] "I" (code))
#define SVC_WRITE_DATA 1
void sv_call_write_data(char *string, int length)
{
svc(SVC_WRITE_DATA);
}
看點三如何提取的管理程序調用處理程序的參數。
您可以直接從用戶模式堆棧中獲取值。使用內聯彙編程序,以確定由主叫方所使用的堆棧:
asm volatile(
"tst lr, #4\t\n" /* Check EXC_RETURN[2] */
"ite eq\t\n"
"mrseq r0, msp\t\n"
"mrsne r0, psp\t\n"
"b %[sv_call_handler_main]\t\n"
: /* no output */
: [sv_call_handler_main] "i" (sv_call_handler_main) /* input */
: "r0" /* clobber */
);
由於我目前正與該hassling周圍太,我寫了一個關於它的博客文章。你的IDE使用GCC,所以這也應該適用於你:http://falstaff.agner.ch/2013/02/18/cortex-m3-supervisor-call-svc-using-gcc/
我想在nxp lpc xpresso IDE上使用它。謝謝 – 2013-02-11 11:10:54