標籤:ar io 使用 sp on 資料 問題 bs ad
1、struct
struct 是一種複合資料型別,其構成元素可以是一些複合資料型別,如array,struct,union,預設情況下,編譯器為結構體的每個成員按其自然對齊(預設對齊,按照結構體成員中size最大的成員對齊)分配空間,第一個成員和整個結構體地址相同。
使用偽指令#pragma pack(n),編譯器將按照n個位元組對齊,若n大於結構體中最大成員size,則結構體扔按照size最大的成員進行對齊。
2、static關鍵字的作用
在函數體內,一個被聲明為靜態變數在這一函數被調用過程中維持其值不變
在模組內函數體外,一個被聲明為靜態變數可以被模組內所有函數訪問,不能被模組外其他函數訪問,是一個本地的全域變數
在模組內,一個被聲明為靜態函數只可被這一個模組的其他函數調用
3、const關鍵字的含義
4、volatile有什麼含義
一個volatile修飾的變數可能被意想不到的改變,因此每次訪問都重新讀取這個變數的值,而不是使用儲存在寄存器裡的備份。例如平行裝置的硬體寄存器、一個中斷服務子程式中會訪問到的非自動變數、多線程應用中被幾個任務共用的變數
2、c高效編程
第一招:以空間換時間,例如函數調用需要壓棧和出棧操作,如果換成宏,雖然佔用了大量的空間,但消耗的cpu時間減少了
第二招:數學方法解決問題,例如:I=(100*(1+100))/2 (求1~100的和)
第三招:使用位操作,例如:j = 456%32操作可以替換為:j = 456 - (456>>4<<4);
第四招:彙編嵌入
備忘:
1、置位操作函數:
#define bwMCDR2_ADDRESS 4
#define bsMCDR2_ADDRESS 17
#define bmMCDR2_ADDRESS BIT_MASK(MCDR2_ADDRESS)
#define BIT_MASK(_bf)(((1U<<(bw##_bf))-1)<<(bs##_bf)
#define SET_BITS(_dst,_bf,_val) ((_dst)=((_dst)&~(BIT_MASK(_bf)))|(((_val)<<(bs##_bf)&BIT_MASK(_bf))))
SET_BITS(MCDR2,MCDR2_ADDRESS,RegisterNumber)
C學習筆記