<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MCU開(kāi)發(fā)利器:調試系統之UART

MCU開(kāi)發(fā)利器:調試系統之UART

作者: 時(shí)間:2023-08-30 來(lái)源:開(kāi)心果Need Car 收藏

軟件開(kāi)發(fā)的同學(xué),對于調試,并不陌生。開(kāi)發(fā)階段,大家使用最多的調試手段:在調試器(eg:lauterbach)中,設置斷點(diǎn)(Breakpoint),通過(guò)程序進(jìn)入斷點(diǎn)的方式確認問(wèn)題。但是,此方式畢竟有其局限性,eg:

本文引用地址:http://dyxdggzs.com/article/202308/450092.htm
  1. 非開(kāi)發(fā)人員(eg:測試人員)不能或者沒(méi)有條件通過(guò)此方式進(jìn)行程序調試;

  2. 車(chē)輛量產(chǎn)后,出現bug時(shí),無(wú)法連接調試器,不能獲取問(wèn)題發(fā)生時(shí)的車(chē)輛工況信息

  3. ......

所以,談到解決bug,我們就需要思考不同階段的不同調試策略。本文聚焦(universal asynchronous receiver transmitter,通用異步收發(fā)器)調試系統。

關(guān)于調試(Debug),在A(yíng)utosar規范中,也給出了多個(gè)調試模塊,比如:

  • DET(Default ErrorTracer)系統,此模塊側重檢查BSW(Basic Software)模塊開(kāi)發(fā)和運行時(shí)的錯誤,并不能將錯誤信息以緩存的方式輸出。

  • DLT(Diagnostic Log and Trace)系統,此模塊可以將SW-Cs、BSW、RTE、Det以及Dem記錄的信息,以Message的形式通過(guò)外部接口輸出,如此,即可利用外部的上位機監控程序的運行狀態(tài),或者將運行的時(shí)時(shí)狀態(tài)存儲下來(lái),以便后續bug問(wèn)題分析。

DLT與DET的關(guān)系如下所示:

車(chē)輛量產(chǎn)后的問(wèn)題,相比于DET,DLT更適合,這類(lèi)似于Linux等系統的日志系統,可以將程序運行的時(shí)時(shí)狀態(tài)記錄下來(lái),以便于出現問(wèn)題時(shí),確認問(wèn)題原因。本文所討論的調試系統類(lèi)似DLT,但是,相對于DLT,更輕量化,自由度也更大。

1、調試系統

UART調試系統,故名思意,就是利用串口功能,將log信息輸出給上位機,示意如下所示:

(一)為什么要log系統?

如文章開(kāi)篇提到的問(wèn)題:車(chē)輛量產(chǎn)以后,出現bug問(wèn)題時(shí),無(wú)法使用調試器進(jìn)行調試,同時(shí),受限于DEM模塊記錄故障信息的能力,無(wú)法通過(guò)NVM存儲的有限數據確認車(chē)輛問(wèn)題時(shí)的運行工況,比如:網(wǎng)絡(luò )狀態(tài)、某些模塊局部變量狀態(tài)等。如果能像飛機黑匣子一樣,將問(wèn)題車(chē)運行的日志記錄下來(lái),通過(guò)DTC信息(快照數據、拓展數據)+日志信息即可最大程度的還原車(chē)輛故障時(shí)工況,進(jìn)而有效確認問(wèn)題原因。

(二)UART調試系統

上使用調試系統,需要構造一個(gè)類(lèi)似PC端的Printf接口,也就是重定向功能。利用MCU具有的外設,設計一個(gè)輸出系統,而UART是最常用的外設。關(guān)于UART調試系統,網(wǎng)上資源很多,本文不過(guò)多講解,文末給出一個(gè)源碼鏈接。

2、利用UART系統進(jìn)行MCU程序調試

本文分享的UART調試系統來(lái)自L(fǎng)wip,玩Lwip系統的同學(xué)應該比較熟悉。使用Lwip調試系統注意點(diǎn):

(一)參數配置

在debug.h文件中,定義了一個(gè)宏:LWIP_DEBUGF,此宏引用了Ifx_Lwip_printf接口,如下所示:

而Ifx_Lwip_printf接口封裝了串口發(fā)送接口(sendUARTMessage),如下所示:

s8_tIfx_Lwip_printf(constchar*format, ...){#ifdef__LWIP_DEBUG__charstr[MAXCHARS + 4];s8_tresult = ERR_CONN;

va_list args;va_start(args, format);vsnprintf(str, MAXCHARS, format, args);va_end(args);{Ifx_SizeT cnt = 0;while(str[cnt]!=0)cnt++;sendUARTMessage(str, cnt);sendUARTMessage("rn", 2);}#endifreturnresult;}

使用調試系統時(shí),需要使能Debug開(kāi)關(guān),第一個(gè)參數需要設置狀態(tài)和層級,參數配置示意如下:

TCP_OUTPUT_DEBUG | LWIP_DBG_STATE | LWIP_DBG_LEVEL_SEVERE。如下所示:

TCP_DEBUG使能需要在opt.h文件中配置,如下所示:

/*** TCP_INPUT_DEBUG:Enable debugging in tcp_in.c for incoming debug.*/#if!defined TCP_INPUT_DEBUG || defined __DOXYGEN__#defineTCP_INPUT_DEBUG LWIP_DBG_ON#endif

(二)串口上位機輸出信息

在程序任意需要輸出信息的位置,添加LWIP_DEBUGF語(yǔ)句,輸出的調試信息如下所示:

如上的信息流就類(lèi)似黑匣子信息,可以根據開(kāi)發(fā)人員或者架構意圖,預埋一些關(guān)鍵信息,以便于后期的排查。

當然,凡是有利有弊,雖然這樣的調試系統,可以很方便的增加調試信息,對開(kāi)發(fā)人員友好(個(gè)人很喜歡這樣的調試系統),但是,增加這樣的調試系統需要消耗軟/硬件資源。

硬件:意味著(zhù)需要增加一個(gè)用于調試的串口UART,也可以使用其他外設,eg:Ethernet。log系統需要緩存信息,因此需要消耗一塊物理存儲空間,對于MCU這種內存資源有限的單片機,一般需要把信息傳遞給車(chē)機或者中控這類(lèi)資源豐富的控制器。舉例:MCU將log信息傳遞給HUD(Head Up Display,抬頭顯示器),log信息由HUD存儲,之后通過(guò)對應總線(xiàn)將信息輸出給外部上位機,示意如下:

軟件:增加一個(gè)調試模塊,本身就需要增加對應的軟件,消耗部分資源。同時(shí),由于軟件模塊的增加,也會(huì )增加部分CPU負擔,如果調試信息過(guò)多,會(huì )進(jìn)一步加重CPU負擔。所以,這里就需要考慮增加多大的CPU開(kāi)銷(xiāo)是系統所能承受的。

2、Lwip UART調試系統源碼

本文源碼鏈接:

https://github.com/Kaixinguo2021/TC397_Tasking_UART_Logging.git



關(guān)鍵詞: MCU UART

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>