Lab-7 重點提示

85 views
Skip to first unread message

Jim Huang

unread,
Dec 13, 2012, 9:44:44 AM12/13/12
to embedd...@googlegroups.com
hi all,

還是有很多同學還未完成 Lab-7,這裡簡單作些提示:

(1) 閱讀 ARM 手冊,以得知 semihosting 原理就是在 Target 端觸發特別的狀態,使得 On-Chip Debugger
得以將相關的操作轉到 Host 端進行。可閱讀 mbed-freertos 原始程式碼,找到一些線索:
https://github.com/hugovincent/mbed-freertos

重點是檔案 include/debug_support.h 裡頭的定義:

static inline int SemihostCall(enum SemihostReasons reason, void *arg)
{
// Based on arm/syscalls.c from Newlib and James Snyder's semifs.

// For Thumb-2 code use the BKPT instruction instead of SWI.
#ifdef __thumb2__
#define AngelSWI 0xAB
#define AngelSWIInsn "bkpt"
#else
#define AngelSWI 0x123456
#define AngelSWIInsn "swi"
#endif

int value;
asm volatile ("mov r0, %1; mov r1, %2; " AngelSWIInsn " %a3; mov %0, r0"
: "=r" (value) // Outputs
: "r" (reason), "r" (arg), "i" (AngelSWI) // Inputs
: "r0", "r1", "r2", "r3", "ip", "lr", "memory", "cc");
return value;
}

在 STM32F4-Discovery,因為是 ARM Cortex-M4 架構,自然就是走 __thumb2__ 這路,也就是透過
"bkpt" 來觸發 ARM semihosting。
接著可以在原始程式碼找出相關的使用方式。

(2) 透過 OpenOCD 下載 firmware 到 STM32F4-Discovery,務必搞清楚 memory layout,否則只是白費功夫。

Thanks,
-jserv
Reply all
Reply to author
Forward
0 new messages