<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 單片機(jī)中printf函數(shù)的重映射

          單片機(jī)中printf函數(shù)的重映射

          作者: 時間:2016-11-26 來源:網(wǎng)絡(luò) 收藏
          一、源自于:大俠有話說

          1.如果你在學(xué)習(xí)單片機(jī)之前學(xué)過C語言,那么一定知道printf這個函數(shù).它最最好用的功能

          本文引用地址:http://www.ex-cimer.com/article/201611/321833.htm

          除了打印你想要的字符到屏幕上外,還能把數(shù)字進(jìn)行格式化.例如十進(jìn)制的33,用十進(jìn)制

          方式輸出就是33,用十六進(jìn)制的形式就輸出成21,如果用字符形式輸出,那就是ASCII碼

          表對應(yīng)的’!’.

          2. 51年代,一些人軟件仿真的時候也很喜歡使用printf,但實際代碼運行中,用的人則不多,因

          為別說51年代,就是用AVR的,也會覺得printf這個函數(shù)耗費的CPU資源相當(dāng)可觀.所以

          printf在8位單片機(jī)時代,熟悉的人的確不多.但到了ARM時代,情況則大為不同.畢竟

          ARM的處理能力和51完全不是一個級別,這使得不少人開始喜歡使用printf在實際項目

          中作為調(diào)試過程的串口輸出.因為它的格式化功能實在是相當(dāng)方便.

          而本例程就是教會你這么使用printf.

          3.程序把printf的輸出對象設(shè)定為串口1.有一個標(biāo)準(zhǔn)的函數(shù)是必須要自己定義的,那就是

          fputc,把這個函數(shù)的功能寫成串口輸出一個字符.建議在串口的初始化模塊中定義

          int fputc(int ch)

          {

          USART_SendData(USART1, (u8) ch);

          while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

          return ch;

          }

          然后記得一點,就是MicroLib要勾上.其實大部分情況下,都建議使用MDK附帶的

          MicroLib,這東西是有一定用途的.留待以后再更多地介紹.

          以上兩步做好后,還記得要包含printf的頭文件:

          #include

          那么,所有工作就大功告成了,你可以盡情的嘗試printf帶來的便利.

          4.另外大家是否意識到一點,就是printf輸出到哪,其實是由fputc函數(shù)決定的.所以如果有興

          趣,可以改寫這個fputc函數(shù),使得其printf的對象是DX-32板上的TFT屏或者黑白屏.大家有

          興趣的不妨試試.

          二、源自于:STM32開發(fā)板(正點原子)

          //加入以下代碼,支持printf函數(shù),而不需要選擇use MicroLIB

          #if 1

          #pragma import(__use_no_semihosting)

          //標(biāo)準(zhǔn)庫需要的支持函數(shù)

          struct __FILE

          {

          int handle;

          };

          FILE __stdout;

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

          _sys_exit(int x)

          {

          x = x;

          }

          //重定義fputc函數(shù) ,串口1

          int fputc(int ch, FILE *f)

          {

          while((USART1->SR&0X40)==0);//循環(huán)發(fā)送,直到發(fā)送完畢

          USART1->DR = (u8) ch;

          return ch;

          }

          #endif



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();