在wince系統啟動最開始,也就是eboot部分,會完成一定串列埠的初始化,以便在後面的工作中可以在串列埠中顯示很多資訊。這也是串列埠列印的最開始部分。
oemreaddebugbyte、oemwritedebugbyte、oemwritedebugstring
在eboot彙編跳轉到c語言的main函式後,在blcommon.c中的bootloadermain是第乙個c語言函式,這裡的初始化部分包含乙個oemdebuginit的函式,實現在main.c檔案中,裡面呼叫了oeminitdebugserial()函式,實現在\winceroot\platform\bspname\src\oal\oallib\debug.c裡,就是它完成了串列埠的列印實現,包括oemreaddebugbyte()、oemwritedebugbyte()、oemwritedebugstring()。
edbgoutputdebugstring、kitloutputdebugstring
在bootloadermain實現過程中,還會經常見到兩個函式edbgoutputdebugstring()和kitloutputdebugstring(),這兩個函式的實現其實是一樣的,在\winceroot\public\commom\oak\inc\halether.**件中有如下定義:
#define edbgoutputdebugstring kitloutputdebugstring
edbgoutputdebugstring()的實現在檔案\winceroot\public\commom\oak\drivers\ethdbg\edbgfrmt\format.c中,具體的實現如下,其實和printf的實現很類似,這裡就不做太多介紹了。
void edbgoutputdebugstring (lpcstr sz, ...)
poutputnumdecimal((unsigned long)l);
}
break;
case 'u':
poutputnumdecimal(va_arg(vl, unsigned long));
break;
case 's':
outputstring(va_arg(vl, char *));
break;
case '%':
poutputbyte('%');
break;
case 'c':
c = va_arg(vl, unsigned char);
poutputbyte(c);
break;
default:
poutputbyte(' ');
break;
}
break;
case '\r':
if (*sz == '\n')
sz ++;
c = '\n';
// fall through
case '\n':
poutputbyte('\r');
// fall through
default:
poutputbyte(c);
}
}
va_end(vl);
}
nkdbgprintfw、outputdebugstringw
nkdbgprintfw()函式同樣是在檔案\winceroot\public\commom\oak\drivers\ethdbg\edbgfrmt\format.c中實現的,實現**如下:
void nkdbgprintfw(
const wchar *sz, ...)
poutputnumdecimal((unsigned long)l);
}
break;
case 'u':
poutputnumdecimal(va_arg(vl, unsigned long));
break;
case 's':
outputstringw(va_arg(vl, wchar *));
break;
case '%':
poutputbyte('%');
break;
case 'c':
c = va_arg(vl, unsigned char);
poutputbyte(c);
break;
default:
poutputbyte(' ');
break;
}
break;
case '\n':
poutputbyte('\r');
// fall through
default:
poutputbyte(c);
}
}
va_end(vl);
}
outputdebugstringw()函式其實是直接呼叫nkdbgprintfw()實現的。
void outputdebugstringw(lpcwstr fmt)
retailmsg、debugmsg
這兩個函式是在bsp中最常見的了,在檔案
\winceroot \public\common\sdk\inc\dbgapi.h
中實現,兩者的實現是一摸一樣的,只是在不同的編譯條件下實現的效果不同而已,都是通過上面的
nkdbgprintfw()
函式來實現的。具體實現如下:
#define debugmsg(cond,printf_exp) \
((void)((cond)?(nkdbgprintfw printf_exp),1:0))
#define retailmsg(cond,printf_exp)\
((cond)?(nkdbgprintfw printf_exp),1:0)
WinCE6 0串列埠列印函式彙總
在wince系統啟動最開始,也就是eboot部分,會完成一定串列埠的初始化,以便在後面的工作中可以在串列埠中顯示很多資訊。這也是串列埠列印的最開始部分。oemreaddebugbyte oemwritedebugbyte oemwritedebugstring 在eboot彙編跳轉到c語言的main...
VB6 0好用模組 1 0串列埠
vb6.0好用的串列埠模組類 使用方法如下 該函式功能將得到的com口進行從小到大排序寫入combobox public sub addcomforcombox comboxcontral as combobox dim i as integer dim str2com as string com字...
STM8串列埠列印除錯資訊
static void uart1sendmsg char msg,uint16 t length void myprintfascii char msg void myprintfint8 uint8 t msg,intlength intlength m for n intlength 1 n ...