Difference Between printf and log

printf( ) - write a formatted string to the standard output stream (ANSI).

log( ) does not actually perform the output directly to the logging streams, but instead queues the message to the logging task, logMsg( ) can be called from interrupt service routines.

printf()是將信息輸出到標(biāo)準(zhǔn)輸出設(shè)備(STDIN/STDOUT)中,如果此時(shí)設(shè)備正在工作,那么就會(huì)發(fā)生阻塞.

log()是使用消息隊(duì)列的方式,它將信息地址發(fā)送到隊(duì)列,由專門的任務(wù)將信息打印出來.

關(guān)于Log的工作機(jī)理。LogMsg利用消息隊(duì)列將用戶所發(fā)的消息傳送給LogTask,然后由LogTask將其顯示在屏幕或者其他輸出設(shè)備上。而VxWorks默認(rèn)的LogTask的任務(wù)優(yōu)先級很高,這就直接導(dǎo)致了任務(wù)的切換。
切換是這樣發(fā)生的,假設(shè)用戶任務(wù)usrTask的優(yōu)先級是51級(通常要低于網(wǎng)絡(luò)任務(wù)50級,一般在100級以后),而我記憶中的LogTask是1級任務(wù),僅次于中斷響應(yīng)。
當(dāng)usrTask調(diào)用LogMsg的時(shí)候,LogTask解除阻塞狀態(tài),獲得CPU資源,而usrTask則排隊(duì)到就緒任務(wù)隊(duì)列去了。LogTask釋放CPU資源后,就緒隊(duì)列中的第一個(gè)任務(wù)開始執(zhí)行,usrTask則繼續(xù)在就緒隊(duì)列里等待

log可 用于中斷函數(shù)調(diào)用,而printf不能用于中斷,會(huì)阻塞

printf 在向串口發(fā)送數(shù)據(jù)時(shí),串口驅(qū)動(dòng)是存在發(fā)送緩存的,當(dāng)我們使用stampX 時(shí),一次printf 調(diào)用不會(huì)導(dǎo)致發(fā)送緩存滿,所以printf 在將字符串送到緩沖區(qū)里就返回了,所以速度較快(并且和串口的波特率無關(guān))。而使用timexN時(shí),它會(huì)多次調(diào)用printf,導(dǎo)致發(fā)送緩沖滿,這時(shí)printf 會(huì)被阻塞,等待發(fā)送完成,這時(shí)測出來的性能就基本上反映了串口的通訊速率

固:在大工程中,使用log,不使用printf.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,659評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,229評論 25 708
  • 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎(chǔ) 通信在共享內(nèi)存的模型里,通過寫-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱...
    澤毛閱讀 4,503評論 2 21
  • 看了易萍同學(xué)的的打卡,對這幾天究竟先扔什么東西?突然有了新的感悟:一些新的和某個(gè)人有關(guān)的東西從來沒有用過的,上面寄...
    胡曉梅閱讀 132評論 0 0
  • 每一個(gè)生命都值得我們?nèi)サ却?,每一個(gè)生命都值得我們?nèi)プ鹬?,每一個(gè)生命都是我們血脈的延續(xù)。 沒有人生下來就是王子或公主...
    萬物生靈閱讀 233評論 0 3

友情鏈接更多精彩內(nèi)容