Semi-Hosting

如果要開發ARM Cortex M系列的嵌入式系統開發版,一般來說,不一定會拉出所有的I/O設備。因此ARM公司設計了Semihost機制,讓運行ARM debugger的主機可以與開發版進行I/O溝通,方便讓使用者調適代碼,最基本的方式是開發版透過UART重導向,然後可以呼叫C函式printf()將訊息秀在電腦螢幕上,但是在UART還沒設定之前要如何打印呢?除了可以用Jlink進入debug mode看REG值或是memory值,還有一個方式就是semihosting機制!!!

  • 首先在專案名稱中按右鍵 -> 選Properties。

  • 選C/C++ Build -> Tool Settings -> MCU GCC Linker -> Miscellaneous

  • 打上參數:-specs=rdimon.specs -lc -lrdimon

  • 在專案名稱中按右鍵 -> 選Debug As -> Debug Configurations...

  • 選專案名稱 -> Startup

  • 在底下Run Commands處,輸入monitor arm semihosting enable

  • 回到main.c -> 加入extern void initialise_monitor_handles();

  • 在int main(void)一開始的地方呼叫 initialise_monitor_handles();

  • 進入debug mode然後run,訊息就會直接打印出來。

Last updated

Was this helpful?