STM32半主機模式

2021-08-03 20:58:25 字數 2156 閱讀 7318

在keil中程式設計時常會遇到__use_no_semihosting_swi的警告,這時你就是進入了半主機模式。

在嵌入式的程式設計中你是避免不了使用printf、fopen、fclose等函式的但是因為嵌入式的程式中並沒有對這些函式的底層實現,使得裝置執行時會進入軟體中斷baeb處,這時就需要__use_no_semihosting_swi這 個宣告,使程式遇到這些檔案操作函式時不停在此中斷處,具體操作如下,將下列程式加入你的工程中:

#pragma import(__use_no_semihosting_swi)  

#pragma import(_main_redirection)

const

char __stdin_name[150];

const

char __stdout_name[150];

const

char __stderr_name[150];

typedef

int filehandle;

//重寫標準庫函式,這時printf、fopen、fclose等檔案操作函式執行時就會呼叫你的重寫函式,這些重寫函式只是幾個簡單的例子,並沒有重寫所有的檔案操作函式

void _sys_exit(int status)

filehandle _sys_open(const

char *name, int openmode)

int _sys_close(filehandle fh)

int _sys_write(filehandle fh, const

unsigned

char *buf, unsigned len, int mode)

int _sys_read(filehandle fh, unsigned

char*buf, unsigned len, int mode)

int _sys_istty(filehandle fh)

int _sys_seek(filehandle fh, long pos)

int _sys_ensure(filehandle fh)

long _sys_flen(filehandle fh)

int _sys_tmpnam(char *name, int fileno, unsigned maxlength)

void _ttywrch(int ch)

"code"

class="cpp">time_t time(time_t *t)

int remove(const

char *filename)

char *_sys_command_string(char *cmd, int len)

clock_t clock(void)

若出現如下編譯錯誤:error: l6915e: library reports error: __use_no_semihosting_swi was requested, but _ttywrch was referenced,此時你只需重寫_ttywrch 函式即可當目標板脫離**器(jlink/ulink)單獨執行時,不能使用半主機模式

這條語句可以關閉半主機模式,只需要在任意乙個c檔案中加入即可。

還有在使用keil程式設計的過程中還會遇到..\obj\usart.axf: error: l6915e: library reports error: __use_no_semihosting was requested, but _ttywrch was referenced

說的大概的意思就是關掉了半主機模式,但是函式__ttywrch被要求了,這時要把函式重寫一遍,當然出現其他的函式被要求的時候,可以參考上面的函式進行編寫,只要放到任意乙個.c原始檔之中即可。

**關於 microlib

microlib 是預設 c 庫的備選庫。 它用於必須在極少量記憶體環境下執行的深層嵌入式應用程式。 這些應用程式不在作業系統中執行。microlib 不會嘗試成為符合標準的 iso c 庫。

microlib 進行了高度優化以使**變得很小。 它的功能比預設 c 庫少,並且根本不具備某些 iso c 特性。某些庫函式的執行速度也比較慢,例如,memcpy()。

**

stm32半主機模式

在keil中程式設計時常會遇到 use no semihosting swi的警告,這時你就是進入了半主機模式。在嵌入式的程式設計中你是避免不了使用printf fopen fclose等函式的但是因為嵌入式的程式中並沒有對這些函式的底層實現,使得裝置執行時會進入軟體中斷baeb處,這時就需要 us...

Stm32 半主機模式

簡單的說,就是我們嵌入式程式中,類似printf的介面是會與我們pc進行通訊,以方便我們借助我們除錯板的 器在pc上用開發工具進行除錯。在嵌入式的程式設計中你是避免不了使用printf fopen fclose等函式的但是因為嵌入式的程式中並沒有對這些函式的底層實現,使得裝置執行時會進入軟體中斷ba...

STM32啟動模式

stm32三種啟動模式對應的儲存介質均是晶元內建的,它們是 1 使用者快閃儲存器 晶元內建的flash。2 sram 晶元內建的ram區,就是記憶體啦。3 系統儲存器 晶元內部一塊特定的區域,晶元出廠時在這個區域預置了一段bootloader,就是通常說的isp程式。這個區域的內容在晶元出廠後沒有人...