gcc編譯使用hal庫時重定向printf 函式

2021-10-08 15:34:19 字數 1700 閱讀 1376

##gcc編譯使用hal庫時重定向printf()函式

1.使用stm32cubemx配置好對應的串列埠

2.新建usart_debug.h的標頭檔案和usart_debug.c檔案,並新增到工程裡面

以下為usart_debug.h**

/*使用說明:使用標準庫重定向printf()函式 

1.配置串列埠和串列埠handle

2.在需要的地方新增usart_debug.h標頭檔案

3.使用printf()函式--不支援浮點數輸出

*/#ifndef __usart_debug_h

#define __usart_debug_h

#define usart_debug usart1

/*配置使用的串列埠*/

#define huart_debug huart1

/*配置使用的串列埠handle*/

/*stm32cubemx配置串列埠後自動生成的標頭檔案,這裡包含以下*/

#include

"usart.h"

/*重定向需要使用到的標頭檔案*/

#include

"stdio.h"

/*告知聯結器不從c庫鏈結使用半主機的函式--不使用半主機模式*/

#pragma import(__use_no_semihosting)

/*重新定義__write函式*/

int_write

(int fd,

char

*ptr,

int len)

;/*定義_sys_exit()以避免使用半主機模式*/

void

_sys_exit

(int x)

;#endif

/*__usart_debug_h*/

usart_debug.c

#include

"usart_debug.h"

/*重新定義__write函式*/

int_write

(int fd,

char

*ptr,

int len)

/*定義_sys_exit()以避免使用半主機模式*/

void

_sys_exit

(int x)

使用:

/* user code begin includes */

#include

"usart_debug.h"

/* user code end includes */

/* user code begin header_startdefaulttask */

/** * @brief function implementing the defaulttask thread.

* @param argument: not used

* @retval none

*//* user code end header_startdefaulttask */

void

startdefaulttask

(void

const

* argument)

/* user code end startdefaulttask */

}

STM32 HAL庫 printf 串列埠重定向

在對printf重定向之前,一定不要有printf,否則程式馬上跑飛。在main函式之前加上如下 對串列埠進行重定向,當然,串列埠一定要初始化之後再用printf,否則程式雖然不會飛,但是printf也不會有結果 ifdef gnuc define putchar prototype int io ...

gcc編譯使用靜態庫 動態庫

假設已經有可用的liboutprint.a和liboutprint.so.1.0.0可用,則 gcc o hello static l.loutprint hello.cpp gcc o hello l.loutprint hello.cpp export ld library path pwd n...

GCC編譯時指定動態庫搜尋路徑

補充檢視編譯好的動態庫或者程序的rpath的方法 動態庫的搜尋路徑的順序 參考資料 gcc中的rpath引數可以用編譯時指定動態庫的搜尋路徑,這樣執行時就不需要export ld library path了。編譯時增加引數 wl,rpath 編譯時增加引數 wl,z,origin wl,rpath ...