##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 ...