MCU中printf重定向实现
生活随笔
收集整理的這篇文章主要介紹了
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;??????//非忙 }? }
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重定向实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20175221曾祥杰 实验四《Andr
- 下一篇: 测试代码的方法