MCU中printf重定向实现
生活随笔
收集整理的這篇文章主要介紹了
MCU中printf重定向实现
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
// 添加頭文件 #include "stdio.h" #include "stdarg.h"? //全局變量 bit TI_busy; unsigned char idata putBuf[100];? //最大數(shù)量 /* idata注釋: 定義一個(gè)字節(jié)型的變量,這個(gè)變量保存在RAM的idata區(qū).單片機(jī)的存儲(chǔ)主要分為四個(gè)區(qū)域:data、idata、code、xdata。
data區(qū):單片機(jī)能直接訪問的直接尋址RAM區(qū),00H-7FH
idata區(qū):單片機(jī)間接防問的RAM區(qū),80H-FFH
code區(qū):單片機(jī)的內(nèi)部程序存儲(chǔ)區(qū),也就是單片機(jī)內(nèi)置的FALSH
xdata區(qū):單片機(jī)外部尋址區(qū),一般指片外的存儲(chǔ)器,0000H-FFFFH */ // 串口打印函數(shù)實(shí)現(xiàn)? void debug_printf(char* fmt,...) {? unsigned char i,len; va_list ap;? ? //定義變量為字符指針 va_start(ap, fmt); ? //獲取可變參數(shù)列表的第一個(gè)參數(shù)的地址 len = vsprintf((char*)putBuf, fmt, ap);? //將可變列表拷貝至緩沖區(qū) va_end(ap);?? //清空va_list可變參數(shù)列表 for(i = 0; i < len; i++)?? ?//把緩存內(nèi)的字符發(fā)送出去 {??? while( TI_busy );???????????? ? //等待前面的數(shù)據(jù)發(fā)送完成?? TI_busy = 1;??? SBUF = putBuf[i];?? //發(fā)送一個(gè)字節(jié) }? memSet(putBuf, 0, sizeof(putBuf));? //清空緩存(自己實(shí)現(xiàn)) } //main入口函數(shù) 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);? } }? //中斷處理函數(shù) void Uart1() interrupt 4? {? if(RI)???????? //接收 RI = 0;??????? //清標(biāo)志?? else??????? ?//發(fā)送 {??? TI = 0;?????? ?//清標(biāo)志?? TI_busy = 0;??????//非忙 }? }
data區(qū):單片機(jī)能直接訪問的直接尋址RAM區(qū),00H-7FH
idata區(qū):單片機(jī)間接防問的RAM區(qū),80H-FFH
code區(qū):單片機(jī)的內(nèi)部程序存儲(chǔ)區(qū),也就是單片機(jī)內(nèi)置的FALSH
xdata區(qū):單片機(jī)外部尋址區(qū),一般指片外的存儲(chǔ)器,0000H-FFFFH */ // 串口打印函數(shù)實(shí)現(xiàn)? void debug_printf(char* fmt,...) {? unsigned char i,len; va_list ap;? ? //定義變量為字符指針 va_start(ap, fmt); ? //獲取可變參數(shù)列表的第一個(gè)參數(shù)的地址 len = vsprintf((char*)putBuf, fmt, ap);? //將可變列表拷貝至緩沖區(qū) va_end(ap);?? //清空va_list可變參數(shù)列表 for(i = 0; i < len; i++)?? ?//把緩存內(nèi)的字符發(fā)送出去 {??? while( TI_busy );???????????? ? //等待前面的數(shù)據(jù)發(fā)送完成?? TI_busy = 1;??? SBUF = putBuf[i];?? //發(fā)送一個(gè)字節(jié) }? memSet(putBuf, 0, sizeof(putBuf));? //清空緩存(自己實(shí)現(xiàn)) } //main入口函數(shù) 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);? } }? //中斷處理函數(shù) void Uart1() interrupt 4? {? if(RI)???????? //接收 RI = 0;??????? //清標(biāo)志?? else??????? ?//發(fā)送 {??? TI = 0;?????? ?//清標(biāo)志?? TI_busy = 0;??????//非忙 }? }
轉(zhuǎn)載于:https://www.cnblogs.com/ownDefine/p/10873625.html
總結(jié)
以上是生活随笔為你收集整理的MCU中printf重定向实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20175221曾祥杰 实验四《Andr
- 下一篇: JS-copy到剪贴板