關(guān)于嵌入式C語言編程小知識總結(jié)
1.?
流水線被指令填滿時才能發(fā)揮最大效能,即每時鐘周期完成一條指令的執(zhí)行(僅指單周期指令)。如果程序發(fā)生跳轉(zhuǎn),流水線會被清空,這將需要幾個時鐘才能使流水線再次填滿。
因此,盡量少的使用跳轉(zhuǎn)指令可以提高程序執(zhí)行效率,解決發(fā)案就是盡量使用指令的“條件執(zhí)行”功能。
2.?
通過下面語句將一個16位的變量放在兩個8位的變量中。
//IP數(shù)據(jù)報總長度高字節(jié)
IpHeadUint8[10]=(IpHead.e_ip.Crc&0xff00)>>8;
//IP數(shù)據(jù)報總長度低字節(jié)
IpHeadUint8[11]=IpHead.e_ip.Crc&0x00ff;
3.
在對全部數(shù)組元素賦初值時,可以不指定數(shù)組長度。
eg;inta={1,2,3,4,5};
但如果當(dāng)輸出第a[5]以上的元素時,系統(tǒng)回輸出隨機(jī)數(shù)值,所以使用此方法時,不能使用超過初始值元素以上的元素。
4.?
由于ADS先天性的對printf不支持;因此不便于我們調(diào)試,可以利用串口輸出來代替printf來調(diào)試。
5.
用或運算,可使某位置為1,其它位不變
eg: PINSEL0 |= 0x00000005; //設(shè)置串口引腳
使第0位和第二位置一,其他位不變。
6.?
C語言符號優(yōu)先級:
1>復(fù)合賦值運算符號:
a =3*5;
等價于a=a (3*5);
7.
一個常見的調(diào)試策略是把一些printf函數(shù)的調(diào)用散布于程序中,確定錯誤出現(xiàn)的具體位置。但是,這些函數(shù)調(diào)用的輸出結(jié)果被寫入到緩沖區(qū)中,并不立即顯示于屏幕上。
事實上,如果程序失敗,緩沖輸去可能不會被實際寫入,因此得到的錯誤位置就是錯誤的。解決的方法是在每個用于調(diào)試的printf函數(shù)之后立即調(diào)用fflush函數(shù)即可得到。
8.
關(guān)鍵字volatile的用法
volatile變量可能用于如下幾種情況:
1>設(shè)備的硬件寄存器(如:狀態(tài)寄存器)
2>一個中斷服務(wù)子程序中會訪問到的全局變量
3>多線程應(yīng)用中被幾個任務(wù)共享的變量。
聲明:
本文來源于網(wǎng)絡(luò),版權(quán)歸原作者所有,如來源信息有誤或侵犯權(quán)益,請聯(lián)系我們刪除或授權(quán)事宜。