|
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師& J; W% _* Y% d1 U
關(guān)注我,一起變得更加優(yōu)秀!! A+ j- } f3 Z, }3 `
嵌入式軟件工程師在編寫 C 語言應(yīng)用程序的時候,經(jīng)常會遇到程序運行時跑飛的情況,程序運行時產(chǎn)生錯誤,多半是程序員在編寫代碼時,沒有預(yù)判好發(fā)生錯誤的地方,并且沒有設(shè)計好合適的錯誤處理機制。
' {8 X: X* S t0 B& {; w( O) ~; c在嵌入式C語言編程中,錯誤處理機制是確保系統(tǒng)穩(wěn)定性和可靠性的關(guān)鍵部分,能確保系統(tǒng)在已知的風(fēng)險和錯誤條件下正常運行。( A1 D6 x, p4 g( L* _# A: B5 \
以下分享一些常用的錯誤處理方法:4 d* g2 L6 f6 [. R
1、斷言 (Assertions)' s9 M& K% e: v2 y
斷言用于在開發(fā)階段捕獲程序中的邏輯錯誤。通過 assert 宏,可以在條件不滿足時終止程序并輸出錯誤信息,這有助于在開發(fā)階段及早發(fā)現(xiàn)問題。( X' d/ K* w. j* a& v
強烈建議使用斷言機制對函數(shù)傳參的參數(shù)合法性進行判斷,很多芯片的SDK包的函數(shù)傳參都采用了有效的斷言機制,以防止參數(shù)不合法帶來不必要的麻煩。# ]. [! l& o; Q; Z9 I7 f* ?( l9 L- ^& O
i0o3osqr4ge6408255906.png (260.54 KB, 下載次數(shù): 2)
下載附件
保存到相冊
i0o3osqr4ge6408255906.png
2024-11-22 23:19 上傳
, H0 |. b, I. A7 R7 }+ y. v0 e2 C
2、錯誤碼 (Error Codes)6 P+ P3 ]4 g: [- h4 q& I, a
通過返回錯誤碼來指示函數(shù)執(zhí)行的結(jié)果。調(diào)用者可以根據(jù)錯誤碼采取相應(yīng)的措施,這是一種靈活且適用于多種應(yīng)用場景的錯誤處理方式。3 k6 q2 }. j5 S7 O: h
對于有返回值的函數(shù)接口調(diào)用,錯誤碼包含了非常豐富的調(diào)試信息,當(dāng)某個函數(shù)接口調(diào)用異常時,通常先根據(jù)錯誤碼進行有效分析。; C- p7 Y8 ^3 O) M
fuvhjjjbp5t6408256006.png (205.11 KB, 下載次數(shù): 2)
下載附件
保存到相冊
fuvhjjjbp5t6408256006.png
2024-11-22 23:19 上傳
+ S ?- d! X, M2 u3、中斷服務(wù)程序 (Interrupt Service Routines, ISR)" V# _2 a% o- ]! x- Y4 E3 }
在嵌入式系統(tǒng)中,中斷是處理異常情況的常用方法。ISR用于處理硬件中斷,并確保系統(tǒng)在異常情況下仍能進入中斷服務(wù)程序進行相應(yīng)處理。
5 [" V; s& Z* ?- m: j2 r通常是CPU運行程序時,內(nèi)部硬件或總線出現(xiàn)錯誤而觸發(fā)中斷,對于MCU應(yīng)用可以使用 cm_backtrace 組件進行;厮菖挪椋园l(fā)現(xiàn)錯誤發(fā)生的地方。
* Q8 ?8 k8 J9 J2 ~8 b# f% v
zcpsk15dsqm6408256106.png (197.96 KB, 下載次數(shù): 1)
下載附件
保存到相冊
zcpsk15dsqm6408256106.png
2024-11-22 23:19 上傳
5 Q) E! \% n* g9 S$ n
4、看門狗定時器 (Watchdog Timer)2 }& I/ j; K: L! Q) X# \
看門狗定時器用于檢測和恢復(fù)系統(tǒng)故障,通?梢允褂肅PU的內(nèi)部看門狗,或使用外部看門狗芯片,系統(tǒng)在正常運行時需要定期重置看門狗定時器。3 \& H/ r( Y9 z3 O8 v- v g p
如果某些錯誤原因,導(dǎo)致程序邏輯不能及時重置定時器(俗稱:喂狗),看門狗就會觸發(fā)系統(tǒng)軟復(fù)位或外部RST引腳復(fù)位,這有助于防止系統(tǒng)因軟件錯誤而陷入死循環(huán)。
5 t6 b5 Y& ?9 A8 V& S( o. k7 y
z0dknst4rml6408256206.png (154.54 KB, 下載次數(shù): 3)
下載附件
保存到相冊
z0dknst4rml6408256206.png
2024-11-22 23:19 上傳
/ o3 ?9 [- N; L; [; X! ]; Q5 W0 }/ ~4 G0 A
msxebyerfbk6408256306.png (54.33 KB, 下載次數(shù): 3)
下載附件
保存到相冊
msxebyerfbk6408256306.png
2024-11-22 23:19 上傳
1 z* @1 w* V# l4 X- y& k' V5、日志記錄 (Logging)
7 B9 D$ L4 Y0 |! ]) B/ J c在應(yīng)用軟件運行時,如果產(chǎn)品上面有容量較大的非易失性存儲器,可以把運行時的錯誤日志記錄到存儲器里面。/ H2 P" g5 q0 f: d
記錄程序運行時的錯誤日志,這種方式有助于出錯時的調(diào)試和維護,開發(fā)人員不用時刻在機器旁邊進行程序運行監(jiān)視,存儲的錯誤日志還可以通過串口或調(diào)試接口輸出,這對于出現(xiàn)錯誤后的分析和問題解決非常重要。
0 H1 K# \$ J) U8 V$ a- } l9 C
sjjqvifpmci6408256406.png (103.04 KB, 下載次數(shù): 3)
下載附件
保存到相冊
sjjqvifpmci6408256406.png
2024-11-22 23:19 上傳
: w# d' j9 F( U. K0 g2 J6、錯誤傳遞
5 [% {8 a& Z4 WC 語言通常使用返回值來標(biāo)志函數(shù)是否執(zhí)行成功,調(diào)用者通過檢查返回值以判斷函數(shù)執(zhí)行情況。此外,也可以通過全局狀態(tài)標(biāo)志或局部跳轉(zhuǎn)(goto)來處理錯誤。; I, S) E# e2 D+ m; C$ x% n8 h
對于goto語句需要謹(jǐn)慎使用,在局部函數(shù)內(nèi)某個環(huán)節(jié)運行出錯,使用goto語句可以直接跳轉(zhuǎn)到錯誤處理節(jié)點,但大范圍使用goto跳轉(zhuǎn),可能會破壞代碼的運行結(jié)構(gòu)與完整性。
% |0 S! Y( r$ Q8 I3 |2 C
, [* h' F7 k! V! ?$ g
ljygacmdjg46408256507.png (162.13 KB, 下載次數(shù): 1)
下載附件
保存到相冊
ljygacmdjg46408256507.png
2024-11-22 23:19 上傳
0 ]1 K/ s7 K( Y' M0 f+ _$ t- ?
不同的錯誤處理機制,有對應(yīng)不同的業(yè)務(wù)應(yīng)用場景和系統(tǒng)要求,建議 C 語言程序開發(fā)者根據(jù)具體情況進行具體分析,沒有一概而論完美的方法。
2 E7 Q" c* u, D* E' l但為了提升嵌入式系統(tǒng)整體的穩(wěn)定性和可靠性,在嵌入式 C 語言程序里面引入合適的錯誤處理機制,是非常值得且有必要的。5 @) W' b% B O) ^8 f0 N
, k* y! o, Z6 x& d% q- H0 G
eejwfys2zzk6408256607.png (769.97 KB, 下載次數(shù): 2)
下載附件
保存到相冊
eejwfys2zzk6408256607.png
2024-11-22 23:19 上傳
5 V; L/ ^9 ?7 R9 V
" c; L; @1 V4 v/ f) ?9 G+ O3 L3 [; u% f
/ O$ O5 N3 L) a5 t$ ^1 W0 r( Z
-END-2 n5 g% z0 N3 ]0 c' ^
往期推薦:點擊圖片即可跳轉(zhuǎn)閱讀
3 t) r: x/ n" G0 F( z
7 k0 W0 Q* k. ~# U! y $ q8 C& \/ U6 ? j, }
! Z( T- M. Y5 b4 H
& d$ g! u* H' P& a
9 R7 w* S8 I M6 E
4kmx1fut2zg6408256707.jpg (118.39 KB, 下載次數(shù): 2)
下載附件
保存到相冊
4kmx1fut2zg6408256707.jpg
2024-11-22 23:19 上傳
& D! a) h/ `6 Z" R D3 q) | & A: |$ t4 ~5 M5 e) v7 V
有哪些不推薦使用的嵌入式 C 語言語法特性?, k- j% k; [5 j0 b" X: y2 d
7 T1 D5 ^) A6 j* i
+ M( O0 |- r4 o) ]0 f 4 _/ M; ~) V0 m% u4 g( Q
' t1 S: l6 q: v. _3 @! n% g
yoici31rnup6408256807.jpg (219.91 KB, 下載次數(shù): 1)
下載附件
保存到相冊
yoici31rnup6408256807.jpg
2024-11-22 23:19 上傳
* k9 T, F! i) s, M5 z
: @1 F, y: A" h, M+ Z, \% Z1 g 今年快過完了,明年準(zhǔn)備進廠搞嵌入式工控,提前了解各方行業(yè)信息!0 Y) \% E9 a- c8 I) m' T
& Z4 ~& o( N" l' [- d
, _7 x5 k' c/ M, O9 n3 B# U) [& P E 1 }" i4 C: A, O. \7 m8 ~& t( _
ijnaykh4uoc6408256907.jpg (152.47 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ijnaykh4uoc6408256907.jpg
2024-11-22 23:19 上傳
4 N6 k; p4 c5 \3 i( }; S$ I
9 e7 l1 V% y) g4 d5 E: ^. a. ~$ _& c 基于全志T113-i平臺,嵌入式Linux 快速啟動,5.2秒成功進入應(yīng)用界面!
7 B* {6 s3 ~$ [+ s8 c* T& t
4 [ C# C# y4 e
2 g `* A+ ]8 i( t9 D* [9 M7 @
+ B$ }. z- J( @6 e8 A 我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師
6 Q, Q5 }: i: d% Y$ {關(guān)注我,一起變得更加優(yōu)秀! |
|