日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MCU中printf重定向实现

發布時間:2024/9/5 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MCU中printf重定向实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
// 添加頭文件 #include "stdio.h"   #include "stdarg.h"?   //全局變量 bit TI_busy; unsigned char idata putBuf[100];? //最大數量 /*  idata注釋: 定義一個字節型的變量,這個變量保存在RAM的idata區.單片機的存儲主要分為四個區域:data、idata、code、xdata。
  data區:單片機能直接訪問的直接尋址RAM區,00H-7FH
  idata區:單片機間接防問的RAM區,80H-FFH
  code區:單片機的內部程序存儲區,也就是單片機內置的FALSH
  xdata區:單片機外部尋址區,一般指片外的存儲器,0000H-FFFFH */ // 串口打印函數實現? void debug_printf(char* fmt,...) {? unsigned char i,len; va_list ap;?               ? //定義變量為字符指針 va_start(ap, fmt);            ? //獲取可變參數列表的第一個參數的地址 len = vsprintf((char*)putBuf, fmt, ap);?    //將可變列表拷貝至緩沖區 va_end(ap);??              //清空va_list可變參數列表 for(i = 0; i < len; i++)??      ?//把緩存內的字符發送出去 {??? while( TI_busy );???????????? ?  //等待前面的數據發送完成?? TI_busy = 1;??? SBUF = putBuf[i];??    //發送一個字節 }? memSet(putBuf, 0, sizeof(putBuf));?  //清空緩存(自己實現) } //main入口函數 void main()?? {? unsigned int i;? UartInit();???????  //串口初始化 EA=1;???????  ?//開總中斷?? while(1) {? debug_printf(" Hello World ! ");?? debug_printf("? i = %03d, 0x%03X\r\n", i, i++);?? delayMs(1000);? } }? //中斷處理函數     void Uart1() interrupt 4? {? if(RI)????????    //接收 RI = 0;???????  //清標志?? else???????    ?//發送 {??? TI = 0;??????  ?//清標志?? TI_busy = 0;??????//非忙 }? }

轉載于:https://www.cnblogs.com/ownDefine/p/10873625.html

總結

以上是生活随笔為你收集整理的MCU中printf重定向实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。