娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月31日(星期六)

2018年05月31日 | 關于stm32中printf函數重定向問題

發布者:草木知秋 來源: eefocus關鍵字:stm32  printf函數  重定向 手機看文章 掃描二維碼
隨時隨地手機看文章

學習stm32過程中,對printf函數進行了重定向,但是不能夠在串口調試助手中顯示出來,并且debug不能全速運行,printf函數阻礙了程序的運行。

后來求教了度娘。


標準庫函數的默認輸出設備是顯示器,要實現在串口或LCD輸出,必須重定義標準庫函數里調用的與輸出設備相關的函數.

例如:printf輸出到串口,需要將fputc里面的輸出指向串口(重定向),方法如下:

#ifdef __GNUC__


#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 


PUTCHAR_PROTOTYPE
{
USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
return ch;
}


因printf()之類的函數,使用了半主機模式。使用標準庫會導致程序無法運行,以下是解決方法:


方法1.使用微庫,因為使用微庫的話,不會使用半主機模式.




方法2.仍然使用標準庫,在主程序添加下面代碼:


#pragma import(__use_no_semihosting) 
_sys_exit(int x) 

x = x; 

struct __FILE 

int handle; 



}; 

FILE __stdout;
另一個高手的講解
剛開始學stm32,順著gpio、uart。。。的順序慢慢爬
初始化的方法學習了馬老師的STM32_Init.h****,自己英文還可以,加上avr的基礎還不錯,所以gpio和時鐘配置都很順利
碰到uart就頭大了,看到各種例程里都是printf()函數,自己也想用,畢竟是avr想用卻開銷不了的東西。但是我自己寫的程序里一旦出現printf,單片機的不干活了。查論壇首先發現要重定義fputc函數,照做了,還是不行。
后來懷疑是uart1初始化問題,用自己寫的put_c函數卻沒問題。
后來又發現一種說法,需要避免使用semihosting(半主機模式),我也把代碼加進去了(改fputc去掉了),還是不行。
再一想,重定義fputc是絕對必須的,加上了之后問題解決,成功使用printf("(敏感詞0373) \n");輸出了,哈哈
***************************************************************************************************

以上廢話,可以不看。
簡單地說:想在mdk 3.80a中用printf,需要同時重定義fputc函數和避免使用semihosting(半主機模式), 
論壇里應該有完整介紹這個的帖子,但是我沒搜到,也許是沉了。重發出來希望能幫上像我這樣的菜鳥們。

需要添加以下代碼


#pragma import(__use_no_semihosting) 
/****************************************************************************** 
*標準庫需要的支持函數 
******************************************************************************/ 
struct __FILE 

int handle; 
/* Whatever you require here. If the only file you are using is */ 
/* standard output using printf() for debugging, no file handling */ 
/* is required. */ 
}; 
/* FILE is typedef’ d in stdio.h. */ 
FILE __stdout; 

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

x = x; 




int fputc(int ch, FILE *f)
{
    //USART_SendData(USART1, (u8) ch);
    USART1->DR = (u8) ch;
    
    /* Loop until the end of transmission */
    while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
    {
    }

    return ch;
}


關鍵字:stm32  printf函數  重定向 引用地址:關于stm32中printf函數重定向問題

上一篇:stm32 IAR printf函數重定義
下一篇:IAR for ARM 中printf使用方法

推薦閱讀

2018年5月24日,德國汽車制造商大眾集團舉行了年度最佳供應商頒獎典禮。大眾集團總裁Herbert Diess、保時捷總裁Oliver Blume以及奧迪總裁Rupert Stadler,以及來自26個國家的約280名嘉賓出席了儀式。大眾集團今年從全球表現、當地表現、年度量產、可持續發展、創新價值、電驅動、智能駕駛這個七個領域挑出19家供應商,并授予年度最高榮譽。其中,FANUC...
(圖片來源:西門子官網)據外媒報道,當地時間5月15日,西門子(Siemens)宣布推出PAVE360?自動駕駛硅前驗證環境(pre-silicon autonomous validation environment),該程序旨在支持和促進創新自動駕駛汽車平臺的研發。PAVE360為下一代汽車芯片的研發提供了一個跨汽車生態系統、多供應商協作的綜合環境,使數字化雙胞胎(digital twin)仿真不只局...
協作機器人夾爪制造商OnRobot推出2.5D視覺系統Eyes,適用于各家先進機器手臂,提供外加的深度感知和零件辨識功能。 據報導,機器手臂經常遇到的難題,就是無法拾放大小、形狀或擺放方向不一的物品,通常需要外加夾具、送料盤等其它硬件協助作業,但也因此增加作業成本和復雜度,局限了設備的應用范圍。 OnRobot新推出的2.5D視覺系統Eyes,只要照一張...
Jim Keller是蜚聲國內外的CPU研發大神,在AMD時帶隊做出了Zen架構,是AMD這幾年翻身的關鍵,甚至一步步超越了友商的酷睿處理器。  外人看得到AMD近年來的成績,但是Zen問世之前幾年的時候AMD的情況可以說很糟糕了,公司財務危機重重,股價跌到了2美元以內,產品開發更是無法跟上主流,與Intel的差距極大,推土機及衍生品完全無法抗衡酷睿處理器。  Ji...

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 安泽县| 沁阳市| 佛坪县| 岳池县| 台山市| 汶上县| 巨鹿县| 彭山县| 上饶县| 德兴市| 广饶县| 东莞市| 芜湖县| 神农架林区| 新密市| 喀什市| 虎林市| 松阳县| 博湖县| 中卫市| 丹凤县| 宜兰市| 读书| 尚义县| 交口县| 右玉县| 宜丰县| 桃江县| 凉山| 托里县| 会宁县| 永靖县| 三穗县| 西昌市| 忻城县| 凤凰县| 昭平县| 林州市| 沧源| 陆丰市| 寻乌县|