分析1:volatile 是什麼?怎麼用?
答:簡單的說,就是不讓編譯器進行優化,即每次讀取或者修改值的時候,都必須重新從內
存或者暫存器中讀取或者修改,防止從快取處讀取的值是過期了的,所以加了這個volatile
可以保證每次讀的值絕對是實時的:
一般說來,volatile 用在如下的幾個地方:
1.中斷服務程式中修改的供其它程式檢測的變數需要加volatile;
2.多工環境下各任務間共享的標誌應該加volatile;
3.儲存器對映的硬體暫存器通常也要加volatile 說明,因為每次對它的讀寫都可能由不同
意義。我認為這是區分c 程式設計師和嵌入式系統程式設計師的最基本的問題。搞嵌入式的傢伙們經常
同硬體、中斷、rtos 等等打交道,所有這些都要求用到 volatile 變數。不懂得volatile
的內容將會帶來災難。假設被面試者正確地回答了這是問題(嗯,懷疑是否會是這樣),我
將稍微深究一下,看一下這傢伙是不是直正懂得volatile 完全的重要性。
分析2:__i、 __o 、__io 是什麼?
答:如下:
__i :輸入口。既然是輸入,那麼暫存器的值就隨時會外部修改,那就不能進行優化,每次
都要重新從暫存器中讀取。也不能寫,即唯讀,不然就不是輸入而是輸出了。
__o :輸出口,也不能進行優化,不然你連續兩次輸出相同值,編譯器認為沒改變,就忽略
了後面那一次輸出,假如外部在兩次輸出中間修改了值,那就影響輸出。
__io:輸入輸出口,同上。
分析3:為什麼加下劃線?
答:原因是避免命名衝突,一般巨集定義都是大寫,但因為這裡的字母比較少,所以再新增下
劃線來區分。這樣一般都可以避免命名衝突問題,因為很少人這樣命名,這樣命名的人肯定
知道這些是有什麼用的。
經常寫大工程時,都會發現老是命名衝突,要不是全域性變數衝突,要不就是巨集定義衝突,所
以我們要盡量避免這些問題,不然出問題了都不知道問題在**。
分析4:typedef 是什麼意思,怎麼使用?
答:typedef 為c 語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別
包括內部資料型別(int,char 等)和自定義的資料型別(struct 等);在程式設計中使用typedef
目的一般有兩個,乙個是給變數乙個易記且意義明確的新名字,另乙個是簡化一些比較複雜
的型別宣告。
1) typedef 的最簡單使用,例如:typedef long byte_4;表示給已知資料型別long 起個新
名字,叫byte_4
2) typedef 與結構結合使用
例如:typedef struct tagmystruct
mystruct;
這語句實際上完成兩個操作
操作1:定義乙個新的結構型別tagmystruct, struct 關鍵字和tagmystruct 一起,構成
了這個結構型別,不論是否有typedef,這個結構都存在。我們可以用struct tagmystruct
varname 來定義變數,但要注意,使用tagmystruct varname 來定義變數是不對的,因為
struct 和tagmystruct 合在一起才能表示乙個結構型別。
struct tagmystruct
;操作2:typedef 為這個新的結構起了乙個名字,叫mystruct。
typedef struct tagmystruct mystruct;
因此,mystruct 實際上相當於struct tagmystruct,我們可以使用mystruct
varname 來定義變數。
分析5:所以具體的typedef **解釋如下:
1)例:typedef unsigned int uint32_t;
表示使用uint32_t 符號表示unsigned int 符號
2)例:typedef __io uint32_t vu32;
表示使用vu32 符號表示typedef __io 符號
3)例:typedef unsigned short int uint16_t;
表示使用uint16_t 符號表示unsigned short int 符號
KSDK USB 例程分析
在usb example裡面檔案 lite為精簡版,省略了很多usb枝幹上的功能,保留了usb通訊部分的主幹功能,我使用的是全功能版。函式 board initpins 中,主要是port以及gpio相關的初始化。1 使能port的時鐘,當外設時鐘沒有開啟時,程式不能讀出外設暫存器的值,同時也不能使...
opencv例程分析(1)
show image include include opencv2 opencv.hpp include opencv2 core core.hpp include opencv2 highgui highgui.hpp using namespace cv using namespace std...
ZigBee HA示例程式分析
zigbee協議棧中自帶的homeautomation例程,雖然也是操作燈泡,但是,是通過zcl來統一處理的,符合ha profile規範,互連互操作性較好。下面就簡要分析以下zcl的使用。在任務陣列中,多定義了zcl層。technorati 標籤 zigbee ha 示例程式 osal sampl...