STM32 串口 #pragma import(__use_no_semihosting)解析
標(biāo)準(zhǔn)庫(kù)函數(shù)的默認(rèn)輸出設(shè)備是顯示器, 要實(shí)現(xiàn)在串口或 LCD 輸出,必須重定義標(biāo)準(zhǔn)庫(kù)函數(shù)里調(diào)用的與輸出 設(shè)備相關(guān)的函數(shù) . 例如 :printf 輸出到串口,需要將 fputc 里面的輸出指向串口 (重定向 ),方法如下 : 只要自己添加一個(gè) int fputc(int ch, FILE *f) 函數(shù),能夠輸出字符就可以了 #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif /* __GNUC__ */ PUTCHAR_PROTOTYPE { /* Place your implementation of fputc here */ /* e.g. write a character to the USART */ USART_SendData(USART1, (uint8_t) ch); /* Loop until the end of transmission */ while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); return ch; } 因 printf() 之類的函數(shù),使用了半主機(jī)模式。使用標(biāo)準(zhǔn)庫(kù)會(huì)導(dǎo)致程序無(wú)法運(yùn)行 ,以下是解決方法 : 方法 1.使用微庫(kù) ,因?yàn)槭褂梦?kù)的話 ,不會(huì)使用半主機(jī)模式 . 如果使用的是 MDK,請(qǐng)?jiān)诠こ虒傩缘?“Target “- 》”Code Generation “中勾選 ”Use MicroLIB “這樣以后就可以 使用 printf ,sprintf 函數(shù)了 方法 2.仍然使用標(biāo)準(zhǔn)庫(kù) ,在主程序添加下面代碼 : /*為確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù),因?yàn)椴皇褂冒胫鳈C(jī),標(biāo)準(zhǔn) C 庫(kù) stdio.h 中有些使用半主機(jī)的 函數(shù)要重新寫 ,您必須為這些函數(shù)提供自己的實(shí)現(xiàn) */ #pragma import(__use_no_semihosting) ?// 確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù) _sys_exit(int ?x) //定義 _sys_exit() 以避免使用半主機(jī)模式 { x = x; } struct __FILE ?// 標(biāo)準(zhǔn)庫(kù)需要的支持函數(shù) { int handle; }; /* FILE is typedef ’ d in stdio.h. */ FILE __stdout; 在獨(dú)立應(yīng)用程序中,您不太可能支持半主機(jī)操作。 因此,必須確保您的應(yīng)用程序中沒(méi)有鏈接 C 庫(kù)半主機(jī) 函數(shù)。 為確保沒(méi)有從 C 庫(kù)鏈接使用半主機(jī)的函數(shù), 必須導(dǎo)入符號(hào) __use_no_semihosting 。可在您工程的 任何 C 或匯編語(yǔ)言源文件中執(zhí)行此操作,如下所示: ? 在 C 模塊中,使用 #pragma 指令: #pragma import(__use_no_semihosting) ? 在匯編語(yǔ)言模塊中,使用 IMPORT 指令: IMPORT __use_no_semihosting 如果仍然鏈接了使用半主機(jī)的函數(shù),則鏈接器會(huì)報(bào)告錯(cuò)誤。 --------------------- 本文來(lái)自 牛奶Tao 的CSDN 博客 ,全文地址請(qǐng)點(diǎn)擊:https://blog.csdn.net/tao658/article/details/81204094?utm_source=copy
總結(jié)
以上是生活随笔為你收集整理的STM32 串口 #pragma import(__use_no_semihosting)解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: keil编译出错关于__use_no_s
- 下一篇: RV1108调试串口参数设置