現在的企業對嵌入式軟件工程師定位差別也較大,主要是因為大家對嵌入式軟件工程師職責還不太了解。而從事嵌入式軟件開發必然離不開C語言的支撐。嵌入式C語言培訓如何?今天我們先來談論下循環條件。
嵌入式C語言培訓中,計數循環是程序中十分常用的流程控制結構。在C與驗證宏,常用下面累加計數的循環形式:
for(loop=1,loop<=limit;loop++)
而這種累加計數的方法符合一般的自然思維習慣,所以下面這種遞減方法很少使用:
for(loop=limit;loop!=0;loop--)
這兩種循環形式在邏輯上并沒有效率差異,但是映射到具體的體系結構中時,就產生了大大是不同。
int fact1 (int limit) int fact1 (int limit)
{ {... …
for (i=1;i<=limit;i++) for (i=limit;i!=0;i--)
( {fact=fact*i; fact=fact*i;
) }
... …
} }
Fact1 Fact2
... ... … …
0x000010: MUL R2,R1,R2 0x000010: MUL R0,R1,R0
0x000014: ADD R1,R1,#1 0x000014: SUBS R1,R1,#1
0x000018: CMP R2,R0 0x00001C: BNE 0x10
0x00001C: BLE 0x10 … …
... ...
0x000024: MOV PC,LR
從中可以發現,累加法比遞減法多用了1條指令,當循環次數比較大時,這2段代碼就會在性能上產生明顯的差異。其本質原因是:當進行一個非0常數比較時,必須用專門的CMP指令進行判別。因此,在ARM的體系結構下編程,建議采用遞減至0的方法來設置循環條件。
若你想通過正規的嵌入式C語言培訓讓自己得到成長,了解嵌入式培訓班哪家好是很關鍵的,在這個方面,粵嵌教育值得你考慮。