|
我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師5 F9 S' u2 c) g+ k5 W+ F
關(guān)注我,一起變得更加優(yōu)秀!
: p, I" `; g( \# w% |5 m5 T嵌入式軟件工程師在編寫 C 語(yǔ)言應(yīng)用程序的時(shí)候,經(jīng)常會(huì)遇到程序運(yùn)行時(shí)跑飛的情況,程序運(yùn)行時(shí)產(chǎn)生錯(cuò)誤,多半是程序員在編寫代碼時(shí),沒(méi)有預(yù)判好發(fā)生錯(cuò)誤的地方,并且沒(méi)有設(shè)計(jì)好合適的錯(cuò)誤處理機(jī)制。* V. w! O+ U$ M0 H
在嵌入式C語(yǔ)言編程中,錯(cuò)誤處理機(jī)制是確保系統(tǒng)穩(wěn)定性和可靠性的關(guān)鍵部分,能確保系統(tǒng)在已知的風(fēng)險(xiǎn)和錯(cuò)誤條件下正常運(yùn)行。7 \: F- j+ Q7 L9 u+ }$ X# ?
以下分享一些常用的錯(cuò)誤處理方法:- r' X: N& j) L* }5 Z/ b' C% b
1、斷言 (Assertions)
`' P! Y7 b# y7 G8 P) V5 z) I斷言用于在開發(fā)階段捕獲程序中的邏輯錯(cuò)誤。通過(guò) assert 宏,可以在條件不滿足時(shí)終止程序并輸出錯(cuò)誤信息,這有助于在開發(fā)階段及早發(fā)現(xiàn)問(wèn)題。
5 {5 ?2 m1 M, F$ a2 F強(qiáng)烈建議使用斷言機(jī)制對(duì)函數(shù)傳參的參數(shù)合法性進(jìn)行判斷,很多芯片的SDK包的函數(shù)傳參都采用了有效的斷言機(jī)制,以防止參數(shù)不合法帶來(lái)不必要的麻煩。3 s% E3 A$ X3 j' d- d1 e; |
i0o3osqr4ge6408255906.png (260.54 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
i0o3osqr4ge6408255906.png
2024-11-22 23:19 上傳
, b0 f. g0 k9 K+ S2、錯(cuò)誤碼 (Error Codes)
, L, Q4 M1 _8 G通過(guò)返回錯(cuò)誤碼來(lái)指示函數(shù)執(zhí)行的結(jié)果。調(diào)用者可以根據(jù)錯(cuò)誤碼采取相應(yīng)的措施,這是一種靈活且適用于多種應(yīng)用場(chǎng)景的錯(cuò)誤處理方式。
: f" O: T1 J& y1 K% b& o2 [" Q對(duì)于有返回值的函數(shù)接口調(diào)用,錯(cuò)誤碼包含了非常豐富的調(diào)試信息,當(dāng)某個(gè)函數(shù)接口調(diào)用異常時(shí),通常先根據(jù)錯(cuò)誤碼進(jìn)行有效分析。
( ]0 N7 z" H; \* b
fuvhjjjbp5t6408256006.png (205.11 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
fuvhjjjbp5t6408256006.png
2024-11-22 23:19 上傳
. b2 F8 F9 I) O
3、中斷服務(wù)程序 (Interrupt Service Routines, ISR)$ z. ]" O6 ^1 j1 O* b/ Z
在嵌入式系統(tǒng)中,中斷是處理異常情況的常用方法。ISR用于處理硬件中斷,并確保系統(tǒng)在異常情況下仍能進(jìn)入中斷服務(wù)程序進(jìn)行相應(yīng)處理。 E: H* c+ I7 e6 [7 p# t$ ^, |
通常是CPU運(yùn)行程序時(shí),內(nèi)部硬件或總線出現(xiàn)錯(cuò)誤而觸發(fā)中斷,對(duì)于MCU應(yīng)用可以使用 cm_backtrace 組件進(jìn)行;厮菖挪椋园l(fā)現(xiàn)錯(cuò)誤發(fā)生的地方。
r' k8 C: u- f ?. R+ X; V
zcpsk15dsqm6408256106.png (197.96 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
zcpsk15dsqm6408256106.png
2024-11-22 23:19 上傳
" r s4 a8 a' c! @7 M+ K; u6 d4、看門狗定時(shí)器 (Watchdog Timer) y7 H3 Z8 U) ^: Q h. @9 W% F. `. u
看門狗定時(shí)器用于檢測(cè)和恢復(fù)系統(tǒng)故障,通?梢允褂肅PU的內(nèi)部看門狗,或使用外部看門狗芯片,系統(tǒng)在正常運(yùn)行時(shí)需要定期重置看門狗定時(shí)器。
9 g. I% c& _- H1 ^% P6 t n如果某些錯(cuò)誤原因,導(dǎo)致程序邏輯不能及時(shí)重置定時(shí)器(俗稱:喂狗),看門狗就會(huì)觸發(fā)系統(tǒng)軟復(fù)位或外部RST引腳復(fù)位,這有助于防止系統(tǒng)因軟件錯(cuò)誤而陷入死循環(huán)。
3 E) G3 `+ I5 ]' b: i4 [
z0dknst4rml6408256206.png (154.54 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
z0dknst4rml6408256206.png
2024-11-22 23:19 上傳
' g+ u( S# W Q0 T! ?: b8 K
5 N, P) l' F; \$ j
msxebyerfbk6408256306.png (54.33 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
msxebyerfbk6408256306.png
2024-11-22 23:19 上傳
- [4 z6 u" @8 Y* ]. W4 h7 X! }6 u5、日志記錄 (Logging)5 J |/ O5 T2 \; w3 p) v4 w% Q; Q
在應(yīng)用軟件運(yùn)行時(shí),如果產(chǎn)品上面有容量較大的非易失性存儲(chǔ)器,可以把運(yùn)行時(shí)的錯(cuò)誤日志記錄到存儲(chǔ)器里面。
+ m5 k; I2 ?/ z$ J記錄程序運(yùn)行時(shí)的錯(cuò)誤日志,這種方式有助于出錯(cuò)時(shí)的調(diào)試和維護(hù),開發(fā)人員不用時(shí)刻在機(jī)器旁邊進(jìn)行程序運(yùn)行監(jiān)視,存儲(chǔ)的錯(cuò)誤日志還可以通過(guò)串口或調(diào)試接口輸出,這對(duì)于出現(xiàn)錯(cuò)誤后的分析和問(wèn)題解決非常重要。: [& m0 Q6 i$ I- ~& \0 u
sjjqvifpmci6408256406.png (103.04 KB, 下載次數(shù): 3)
下載附件
保存到相冊(cè)
sjjqvifpmci6408256406.png
2024-11-22 23:19 上傳
9 X: L5 S+ r6 g$ J# ?( `
6、錯(cuò)誤傳遞
1 c. j% s& \1 x' dC 語(yǔ)言通常使用返回值來(lái)標(biāo)志函數(shù)是否執(zhí)行成功,調(diào)用者通過(guò)檢查返回值以判斷函數(shù)執(zhí)行情況。此外,也可以通過(guò)全局狀態(tài)標(biāo)志或局部跳轉(zhuǎn)(goto)來(lái)處理錯(cuò)誤。$ _' E' w3 i& l7 |6 v1 z1 B
對(duì)于goto語(yǔ)句需要謹(jǐn)慎使用,在局部函數(shù)內(nèi)某個(gè)環(huán)節(jié)運(yùn)行出錯(cuò),使用goto語(yǔ)句可以直接跳轉(zhuǎn)到錯(cuò)誤處理節(jié)點(diǎn),但大范圍使用goto跳轉(zhuǎn),可能會(huì)破壞代碼的運(yùn)行結(jié)構(gòu)與完整性。& b/ e+ S& _+ G5 d0 _4 l
' P/ i: e1 x- `: U8 Y6 A: E
ljygacmdjg46408256507.png (162.13 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
ljygacmdjg46408256507.png
2024-11-22 23:19 上傳
/ L5 D! [: }, }- }! W不同的錯(cuò)誤處理機(jī)制,有對(duì)應(yīng)不同的業(yè)務(wù)應(yīng)用場(chǎng)景和系統(tǒng)要求,建議 C 語(yǔ)言程序開發(fā)者根據(jù)具體情況進(jìn)行具體分析,沒(méi)有一概而論完美的方法。
; @; A: s5 ?" q- s5 e5 A4 }但為了提升嵌入式系統(tǒng)整體的穩(wěn)定性和可靠性,在嵌入式 C 語(yǔ)言程序里面引入合適的錯(cuò)誤處理機(jī)制,是非常值得且有必要的。
$ M9 p+ j% t; O1 E2 ^+ S5 z! C! v/ W4 i- P D8 C
eejwfys2zzk6408256607.png (769.97 KB, 下載次數(shù): 2)
下載附件
保存到相冊(cè)
eejwfys2zzk6408256607.png
2024-11-22 23:19 上傳
+ |" Y0 S0 C6 F4 ^/ l
' m- ~. w, g) n# X
( d7 L2 T, S+ f. I& l! g
-END-
4 j' K* Z `' a; k% Z- F往期推薦:點(diǎn)擊圖片即可跳轉(zhuǎn)閱讀
3 J7 }8 T8 d+ _$ U( |9 _* M5 ~
2 q, T/ X& Y. ^, F# L4 ~: F 9 ?: S+ h- L3 g3 b* D5 O
3 ~( s6 e2 P+ {9 {5 Z2 y, m3 `7 ?
" @2 w2 u; ~8 @' X2 s' l
2 H* _+ F( f4 k
4kmx1fut2zg6408256707.jpg (118.39 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
4kmx1fut2zg6408256707.jpg
2024-11-22 23:19 上傳
" M$ r: |6 [ |' c/ V
" ?3 i& y, X7 ^ `7 Q 有哪些不推薦使用的嵌入式 C 語(yǔ)言語(yǔ)法特性?
# }0 l( n9 L) |6 }6 J/ [; Q ) V; w8 e- _- s
, c2 W# ]1 V0 l) f! E- i
! O1 g( b" A }) F! N( }
5 @2 K8 b2 J5 f+ i& V
yoici31rnup6408256807.jpg (219.91 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
yoici31rnup6408256807.jpg
2024-11-22 23:19 上傳
g! P5 R$ k! j1 L8 ~
! f0 p4 z/ N/ K% q 今年快過(guò)完了,明年準(zhǔn)備進(jìn)廠搞嵌入式工控,提前了解各方行業(yè)信息!
5 t7 I: T6 Y# _ $ Y$ j* e* x# w8 X, H
( ]6 } y9 A% b u6 Z, i
8 F! W( V6 ]5 @# @# [; `2 @" U" s! D
ijnaykh4uoc6408256907.jpg (152.47 KB, 下載次數(shù): 0)
下載附件
保存到相冊(cè)
ijnaykh4uoc6408256907.jpg
2024-11-22 23:19 上傳
~& |) U3 X5 S7 q& ] ; k5 B: y, X+ P8 a( d
基于全志T113-i平臺(tái),嵌入式Linux 快速啟動(dòng),5.2秒成功進(jìn)入應(yīng)用界面!
I+ D- N1 e3 H " ~: j" m1 N3 _% E
, n( L6 O7 o9 H5 @5 u, w) j% ]7 u$ f
j6 z+ O% C! @" i L 我是老溫,一名熱愛學(xué)習(xí)的嵌入式工程師! H B5 v- n+ v( D6 {. g2 L* t
關(guān)注我,一起變得更加優(yōu)秀! |
|